Puntuaciones
Esta sección se completará a medida que se ingresen los envíos.
Normal
1. bopjesvla Perl 54
2. edc65 Javascript (ES6) 91
3. name language score
4. name language score
5. name language score
Ronda de bonificación
1. name language score
2. name language score
3. name language score
4. name language score
5. name language score
Karel J. AlphaBot
Antecedentes
Un curso de introducción popular a Java es Karel J. Robot (lo estoy usando yo mismo). El robot interactúa con una cuadrícula de calles (coordenadas y enteras positivas) y avenidas (coordenadas x enteras positivas), así como con buscapersonas, que se pueden colocar y almacenar en la cuadrícula (tenga en cuenta que Karel y cualquier buscapersonas solo pueden existir en la red) puntos). Karel (el robot) solo debe realizar cinco acciones: avanzar 1 en 1, girar a la izquierda en su lugar, dejar un zumbador, recoger un zumbador y apagarse.
En mi clase de Ciencias de la Computación, una de nuestras primeras tareas fue programar a Karel para que aprenda a girar a la derecha, girar y realizar la acción combinada de avanzar por 1 y dejar un pitido. Unos días después, una tarea consistía en utilizar estos métodos y escribir nuevos métodos para producir letras del alfabeto.
Naturalmente, una vez que terminé esta tarea, escribí más métodos para hacer cada letra del alfabeto, así como los diez dígitos numéricos, y planeo descubrir cómo hacer una especie de procesador de texto con el robot, donde una cadena entraría a STDIN y el robot pondría buscapersonas en la cuadrícula de una manera que se pareciera a las letras.
Cada vez que escribía private void draw#
para cada personaje #
, agregaba un comentario después que me decía abreviaturas para la secuencia de comandos que necesitaría.
Tengo los siguientes comandos (escritos en pseudocódigo) a mi disposición (aclaración: estos son los únicos comandos útiles ).
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"
Condiciones
El robot debe proceder en el siguiente orden.
- El robot comienza en la esquina inferior izquierda del rectángulo de 5xN de área mínima en la que se dibujará la letra.
- El robot dibuja la carta.
- El robot se mueve a la esquina inferior derecha del rectángulo.
- El robot se mueve dos espacios a la derecha y debe mirar hacia el norte / arriba
Analicemos un ejemplo. Supongamos que queremos dibujar A
. La ubicación del robot es la letra que indica su dirección (norte, sur, este, oeste). La letra se escribe con mayúscula si el robot está en un lugar con un busca y minúscula si el robot está en un lugar sin un busca. o
representa manchas con buscapersonas y.
representa manchas sin buscapersonas.
Como veremos más adelante, A
es esto.
.ooo.
o...o
ooooo
o...o
o...o
Aquí hay una posible solución.
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
El final mml
para completar la cuarta viñeta está implícito porque aparece en cada letra y porque no quiero regresar y agregar otras dos columnas a todo en la solución propuesta anteriormente.
Por lo tanto, una solución para hacer A
es pddrdddammmrdmrdddmrddddlmml
.
Tenga en cuenta que esta no tiene que ser su solución. Su algoritmo puede pasar por cada columna, colocando los buscapersonas en los lugares adecuados y sin depender de dónde se han colocado o se colocarán otros buscapersonas. No importa cuál sea su algoritmo, el robot solo puede colocar una señal acústica por espacio en la cuadrícula.
El programa
Su programa tomará como entrada una cuadrícula de 5xN de cuál es la cuadrícula de la letra. Tenga en cuenta que no hay robot en la entrada; se supone que el robot está en la esquina inferior izquierda (suroeste), hacia el norte.
La salida será la secuencia de letras que son la abreviatura de la secuencia.
Entradas de muestra
.ooo.
o...o
ooooo
o...o
o...o
o...o.ooooo
o...o...o..
ooooo...o..
o...o...o..
o...o.ooooo
Resultados de muestra
pddrdddammmrdmrdddmrddddlmml
prmmmlmlmmdrdrdddlmlmmdrdrmmmdrddddlmmlprdddlmldmmrmrmdmlmldmmrdrddddrmmmdlmml
Este es el código de golf, amigos. Se aplican las reglas estándar de CG. El código más corto en bytes gana.
Ronda de bonificación
Reglas
Si quieres participar en la ronda de bonificación, ¡asegúrate de que tus códigos se muevan de manera eficiente! A continuación se muestra una biblioteca de todas las letras de 5x5 que mi programa crea cuando se ejecuta. El objetivo de la ronda de bonificación es escribir un programa que imprima una secuencia ABCDEFGHIJKLMNOPQRSTUVWXYZ
que contenga la menor cantidad de movimientos posible. No hay entrada a STDIN. El código será calificado no en la longitud del código sino en su "puntaje de movimiento". El puntaje de movimiento está diseñado para desalentar los algoritmos de barrido que visitan cada punto del rectángulo.
d: 1
l: 1
m: 4
p: 1
r: 1
Letras
.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
Se debe seguir el mismo procedimiento que el desafío original: las letras se deben dibujar de una en una con una separación de espacios entre cada letra.
Se aplican las reglas estándar de CG. La entrada con el puntaje de movimiento más bajo gana.
Para resumir, ambos códigos esencialmente harán lo mismo. El primer código debe tener un número mínimo de bytes en el código, y el segundo código debe usar el menor número de movimientos.
Respuestas:
perl -p0,
60 5654 + 2 bytesgolf
notas
fuente
@-
, podría ser útil para compartir los consejos para jugar al golf en la pregunta de Perl .JavaScript (ES6), 91
Un primer intento al desafío básico.
Pruebe a ejecutar el fragmento a continuación en un navegador compatible con EcmaScript 6 (probado en Firefox)
Mostrar fragmento de código
RESPUESTA DE DESAFÍO DE BONIFICACIÓN - Puntuación para el alfabeto completo = 869
Pruebe a ejecutar el wnippet a continuación en Firefox (mejor pantalla completa)
Como no me gustan los desafíos de entrada fija / salida fija , puedes probar tu entrada. Solo recuerde, solo se imprimirán letras.
fuente