Les scores
Cette section sera remplie au fur et à mesure de la soumission des soumissions.
Ordinaire
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
Bonus Round
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
Karel J. AlphaBot
Contexte
Un cours d'introduction populaire à Java est Karel J. Robot (je l'utilise moi-même). Le robot interagit avec une grille de rues (coordonnées entières positives y) et d'avenues (coordonnées x entières positives) ainsi que des bips sonores, qui peuvent être placés et stockés sur la grille (notez que Karel et tous les bips sonores ne peuvent exister que sur un treillis points). Karel (le robot) ne doit effectuer que cinq actions: avancer de 1, tourner à gauche en place, poser un bip, prendre un bip et s'éteindre.
Dans mon cours d'informatique, l'une de nos premières tâches a été de programmer Karel pour apprendre à tourner à droite, à faire demi-tour et à effectuer l'action combinée d'avancer de 1 et de poser un bip. Quelques jours plus tard, une tâche consistait à utiliser ces méthodes et à écrire de nouvelles méthodes pour produire des lettres de l'alphabet.
Naturellement, une fois cette tâche terminée, j'ai écrit plus de méthodes pour créer chaque lettre de l'alphabet, ainsi que les dix chiffres numériques, et je prévois de comprendre comment faire une sorte de traitement de texte à partir du robot, où une chaîne serait entré dans STDIN et le robot placerait des bips sur la grille d'une manière qui ressemblerait aux lettres.
Chaque fois que j'écrivais private void draw#
pour chaque personnage #
, j'ajoutais un commentaire qui me disait des abréviations pour la séquence de commandes dont j'avais besoin.
J'ai les commandes suivantes (écrites en pseudocode) à ma disposition (clarification - ce sont les seules commandes utiles ).
Turn Left
Rotate the robot 90˚ counterclockwise
Abbreviated as "l"
Turn Right
Rotate the robot 90˚ clockwise
Abbreviated as "r"
Move
Move one space forwards
Abbreviated as "m"
Put Beeper
Put a beeper on the spot that Karel is on
Abbreviated as "p"
Drop Beeper
Move, then Put Beeper
Abbreviated as "d"
Turn Around
Turn Left, then Turn Left
Abbreviated as "a"
Conditions
Le robot doit procéder dans l'ordre suivant.
- Le robot démarre dans le coin inférieur gauche du rectangle 5xN de la zone minimale dans laquelle la lettre sera dessinée.
- Le robot dessine la lettre.
- Le robot se déplace vers le coin inférieur droit du rectangle.
- Le robot se déplace de deux espaces vers la droite et doit faire face au nord / haut
Voyons un exemple. Supposons que nous voulons dessiner A
. L'emplacement du robot est la lettre qui indique sa direction (nord, sud, est, ouest). La lettre est en majuscule si le robot est sur place avec un bip et en minuscule si le robot est sur place sans bip. o
représente des taches avec des bips et .
représente des taches sans bips.
Comme nous le verrons plus tard, A
est-ce.
.ooo.
o...o
ooooo
o...o
o...o
Voici une solution possible.
Grids ..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... ..... ..... ..... ..... ..... .....
..... ..... ..... N.... E.... oE... ooE.. oooE. oooW.
..... ..... N.... o.... o.... o.... o.... o.... o....
n.... N.... o.... o.... o.... o.... o.... o.... o....
Letters p d d r d d d a
..... ..... ..... ..... ..... n.... e.... .E... .oE..
..... ..... ..... ..... N.... o.... o.... o.... o....
ooWo. oWoo. Wooo. Nooo. oooo. oooo. oooo. oooo. oooo.
o.... o.... o.... o.... o.... o.... o.... o.... o....
o.... o.... o.... o.... o.... o.... o.... o.... o....
m m m r d m r d d
.ooE. .oooe .ooos .ooo. .ooo. .ooo. .ooo. .ooo.
o.... o.... o.... o...S o...o o...o o...o o...o
oooo. oooo. oooo. oooo. ooooS ooooo ooooo ooooo
o.... o.... o.... o.... o.... o...S o...o o...o
o.... o.... o.... o.... o.... o.... o...S o...E
d m r d d d d l
La finale mml
pour compléter la quatrième puce est implicite car elle apparaît dans chaque lettre et parce que je ne veux pas revenir en arrière et ajouter deux autres colonnes à tout dans la solution proposée ci-dessus.
Ainsi, une solution à faire A
est pddrdddammmrdmrdddmrddddlmml
.
Notez que cela ne doit pas être votre solution. Votre algorithme peut parcourir toutes les colonnes, en plaçant les bips aux bons endroits et sans se fier à l'endroit où d'autres bips ont été placés ou seront placés. Quel que soit votre algorithme, le robot ne peut placer qu'un seul bip par espace sur la grille.
Le programme
Votre programme prendra en entrée une grille 5xN de la grille de la lettre. Notez qu'il n'y a pas de robot sur l'entrée; le robot est supposé être dans le coin inférieur gauche (sud-ouest), face au nord.
La sortie sera la séquence de lettres qui est le raccourci de la séquence.
Exemples d'entrées
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
Exemples de sorties
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
C'est du golf de code, les gars. Les règles CG standard s'appliquent. Le code le plus court en octets gagne.
Bonus Round
Règles
Si vous souhaitez participer au tour de bonus, assurez-vous de rendre vos codes efficaces en mouvement! Vous trouverez ci-dessous une bibliothèque de toutes les lettres 5x5 que mon programme crée lors de son exécution. L'objectif du tour de bonus est d'écrire un programme qui imprime une séquence ABCDEFGHIJKLMNOPQRSTUVWXYZ
contenant le moins de coups possible. Il n'y a aucune entrée dans STDIN. Le code sera évalué non pas sur la longueur du code mais sur son "score de déplacement". Le score de déplacement est conçu pour décourager les algorithmes de balayage qui visitent chaque point du rectangle.
d: 1
l: 1
m: 4
p: 1
r: 1
Des lettres
.ooo. oooo. ooooo oooo. ooooo ooooo .oooo o...o
o...o o...o o.... o...o o.... o.... o.... o...o
ooooo oooo. o.... o...o oooo oooo. o.ooo ooooo
o...o o...o o.... o...o o.... o.... o...o o...o
o...o oooo. ooooo oooo. ooooo o.... oooo. o...o
ooooo ....o o...o o.... ooooo o...o ooooo oooo.
..o.. ....o o..o. o.... o.o.o oo..o o...o o...o
..o.. ....o oo... o.... o.o.o o.o.o o...o oooo.
..o.. o...o o..o. o.... o...o o..oo o...o o....
ooooo .ooo. o...o ooooo o...o o...o ooooo o....
oooo. oooo. ooooo ooooo o...o o...o o...o o...o
o..o. o...o o.... ..o.. o...o o...o o...o .o.o.
o..o. oooo. ooooo ..o.. o...o .o.o. o.o.o ..o..
oooo. o..o. ....o ..o.. o...o .o.o. o.o.o .o.o.
....o o...o ooooo ..o.. ooooo ..o.. ooooo o...o
o...o ooooo
.o.o. ...o.
..o.. ..o..
.o... .o...
o.... ooooo
La même procédure que le défi d'origine doit être suivie: les lettres doivent être dessinées une à la fois avec une séparation d'espace entre chaque lettre.
Les règles CG standard s'appliquent. L'entrée avec le score de coup le plus bas gagne.
Pour résumer, les deux codes feront essentiellement les mêmes choses. Le premier code doit avoir un nombre minimal d'octets dans le code, et le second code doit utiliser le plus petit nombre de mouvements.
Réponses:
perl -p0,
60 5654 + 2 octetsle golf
Remarques
la source
@-
, pourrait être utile à partager sur les conseils pour jouer au golf en Perl !JavaScript (ES6), 91
Un premier essai du défi de base.
Testez l'exécution de l'extrait ci-dessous dans un navigateur compatible EcmaScript 6 (testé dans Firefox)
Afficher l'extrait de code
BONUS CHALLENGE REPONSE - Score pour l'alphabet complet = 869
Testez l'exécution du wnippet ci-dessous dans Firefox (meilleur plein écran)
Comme je n'aime pas les défis d' entrée fixe / sortie fixe , vous pouvez essayer votre entrée. N'oubliez pas que seules les lettres seront imprimées.
la source