Dibuja el camino de la hormiga de Langton .
Descripción
Los cuadrados en un avión son de diferentes colores, ya sea negro o blanco. Identificamos arbitrariamente un cuadrado como la "hormiga". La hormiga puede viajar en cualquiera de las cuatro direcciones cardinales en cada paso que da. La hormiga se mueve de acuerdo con las siguientes reglas:
- En un cuadrado blanco, gire 90 ° a la derecha, voltee el color del cuadrado, avance una unidad
- En un cuadrado negro, gire 90 ° a la izquierda, voltee el color del cuadrado, avance una unidad
Presupuesto
- Entrada: un entero N entre 0 y 725 (inclusive).
- Salida: una cuadrícula de 17 por 17 que representa la "ruta" de la hormiga a partir del paso N.
Reglas
- La hormiga comienza a mirar hacia la derecha (3 en punto).
- La hormiga comienza en el centro de la cuadrícula.
- Úselo
_#@
para cuadrados blancos, cuadrados negros y la hormiga respectivamente. - La cuadrícula es inicialmente completamente blanca.
- Puede realizar un programa completo o una función en un idioma interpretado.
- Entrada por stdin o argumento.
Ejemplos
Actualización: la salida de N = 450 del caso fue incorrecta.
N = 0
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
________@________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
N = 1
_________________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
________#________
________@________
_________________
_________________
_________________
_________________
_________________
_________________
_________________
N = 450
_________________
_________________
___________##____
____##______##___
___#__##___##_#__
__###_#@#__#__#__
__#_#_#_#__#_#___
_____###___#_____
_____#___________
_____#__###______
___#_#_#__#_#_#__
__#__#_#____###__
__#_##__##___#___
___##______##____
____##___________
_________________
_________________
Respuestas:
GolfScript - 67 caracteres
La solución Python de hallvabo es la más similar a esta, por lo que solo describiré las principales diferencias.
El tablero se almacena como una cadena en lugar de una matriz. Esto es para que podamos actualizar un valor en el tablero con menos caracteres (ya que las cadenas son siempre planas), y así es fácil llevarlo al formato de salida deseado.
La posición de la hormiga se incrementa con la fórmula
((d&1)*17+1)*((d&2)-1)
(es decir.1&17*)\2&(*
), donde d es la dirección. Usamos la variable6
para poder omitir la inicialización.fuente
:6
- Muy hipster. Odiaría depurar tu código :-)Ruby 1.9, 104 caracteres
Entrada a través del argumento de función.
m
r*r>1
lugar der.abs>1
String#scan
para generar la salida. Cambiado==
a>
String#tr
con un condicionalfuente
Python, 123
Solo una ligera reelaboración de mi solución Python de http://golf.shinh.org/p.rb?Langtons+Ant .
fuente
GolfScript
969489Mi lenguaje de odio favorito está de vuelta con otro montón de códigos de sorteo semi legibles.
89 versión, finalmente logré integrar @ en el bucle de salida.
94 versión:
Comentado:
Editar, también podría hacer una versión grande, aquí van las iteraciones 59 * 59 y 10500:
.
fuente
Windows PowerShell,
119118fuente
PHP,
350309307312174161166159151149147144143Sin golf
350 -> 309: varias técnicas de compresión con los bucles for (), también actualizados para mostrar la salida correcta.
309 -> 307: Se convirtió el bucle principal for () en un bucle while ().
307 -> 312: Olvidé cambiarlo para usar argv.
312 -> 174: Recodificado en base a otra respuesta.
174 -> 161: ya no está predeterminado todo el conjunto.
161 -> 166: Argv gana de nuevo.
166 -> 159: No es necesario redefinir argv [1].
159 -> 151: ya no está predeterminado, PHP lo hace automáticamente.
151 -> 149: se eliminó un conjunto de paréntesis, el orden de las operaciones elimina la necesidad.
149 -> 147: se acortó el último bucle for (), no se necesitan llaves.
147 -> 144:El último bucle for () ahora es un bucle while ().
144 -> 143: se utilizó una variable temporal para guardar un carácter.
fuente
C,
166162Aquí una traducción de mi enfoque Delphi a C, mostrando cuán compacto puede ser C. Tomé prestado el truco condicional de nueva línea de fR0DDY (¡gracias amigo!):
La versión comentada con sangría se ve así:
fuente
"_@#"[g[i]]
ya+=(1-(d&2))*(1+(16*(d&1)))
(1+d%2*16)
ahorra algunos caracteres.Delfos, 217
El código sangrado y comentado se lee así:
Entrada:
Salida:
fuente
C 195 Personajes
http://www.ideone.com/Dw3xW
Me sale esto por 725.
fuente
p+=t+4;x+=a[p%4];
lugar dep=(p+t+4)%4;x+=a[p];
guardar tres caracteres.sed, 481 caracteres
Se puede reducir a 478 caracteres al eliminar la primera línea y ejecutar con
-n
Requiere N líneas para la entrada, por ejemplo. cuando se ejecuta como
salidas:
fuente
Perl, 110 caracteres
El número se lee desde la primera línea de STDIN. El resto de la entrada se ignora.
Ligeramente más legible:
Ediciones
(112 → 111) No es necesario actualizar
$d
con el valor del módulo 4.(111 → 110) Ahora puede alinear el
$d
incrementoAnexo (109 caracteres)
Podemos tener un carácter más corto si está contento de tener el caso especial de
N=0
falla (no genera el@
carácter para la hormiga). Todas las demás entradas funcionan correctamente:Las diferencias son que ahora usamos en
%f
lugar de@f
para poder usar índices negativos, e iteramos desde en-144..144
lugar de0..288
. Ahorra tener que inicializar$p
.fuente
Mathematica, 94 caracteres
fuente
> <>, 122 bytes
A riesgo de una pequeña necromancia de hilos, pensé que escribir una respuesta en> <> sería un desafío interesante ...
Este programa espera que el número de pasos para calcular esté presente en la pila antes de la ejecución.
fuente