El reto
Debe escribir un programa completo que tome siete números de STDIN e imprima el historial bidimensional del autómata celular (CA) en STDOUT. Este es el código de golf.
Formato de entrada La entrada será de siete enteros / cadenas separadas por comas. El primer número es el número de la regla según el código de Wolfram (el nombre estándar para cada regla). El segundo es la configuración inicial inicial. El tercero y cuarto describen qué patrón y cuántas veces debe agregarse a la izquierda de la configuración inicial. como relleno. El quinto y el sexto hacen lo mismo para el lado derecho. El último número es el número de generaciones para ejecutar la simulación.
Entonces, un ejemplo de entrada es 90,11,0,4,0,4,5
. Esto debería decirle a su programa que está ejecutando la regla 90 . También debe decirle al programa que desea que la configuración inicial esté 11
con la cadena 0
agregada 4 veces a ambos extremos, por lo que el patrón de inicio real es 0000110000
. También le dice a su programa que ejecute esta simulación durante 5 generaciones.
Salida Su programa debe imprimir toda la matriz de celdas de cada generación (separadas por nuevas líneas), de modo que la salida sea el diagrama de espacio-tiempo de la CA. Para cada generación, el estado de cada celda está determinado por su estado y los estados de las celdas a la izquierda y derecha inmediatas, de acuerdo con la regla proporcionada como entrada. La simulación debe envolver los bordes. Lo primero que se debe imprimir debe ser la matriz inicial como gen. 0.
La entrada 90,11,0,4,0,4,5
debería dar como resultado la siguiente salida tan exactamente como sea posible.
0000110000
0001111000
0011001100
0111111110
1100000011
0110000110
Tenga en cuenta que el estado inicial no está incluido en las cinco generaciones. Observe también que la simulación se envuelve alrededor de los bordes.
Más ejemplos
entrada:
184,1100,01,2,01,1,4
salida:
0101110001
1011101000
0111010100
0110101010
0101010101
entrada:
0,1011,1,0,0,1,2
salida:
10110
00000
00000
Más información sobre cómo funcionan los CA 1D y cómo están numerados
fuente
Respuestas:
Golfscript,
77 7370 caracteresGracias a @Howard, quien señaló cómo guardar 4 caracteres.
fuente
48-
->1&
y creo que también tres más. Puede omitir)
antes del bloque (no aumentar el contador) y, por lo tanto, también guardar los dos últimos pops.APL (153 caracteres)
Y en forma menos legible, un poco más corta:
Ejemplo:
Estoy seguro de que hay margen de mejora (¡incluso encontré algunos cambios al escribir esta publicación!), Pero algunos de ellos podrían implicar cambios fundamentales, y no puedo soportar mirar APL por más tiempo. La variante de APL utilizada aquí es Dyalog APL .
fuente
Ruby,
165159 caracteresEditar: encontré algunos lugares para pequeñas mejoras.
Ejemplo de ejecución:
fuente
C,
303305301 294292305 Editar: ¡Uy! Olvidé eso
calloc()
lleva dos args. Estaba explotando en una entrada más grande.301 Edición: ¡Ah, ja! Usé mi
calloc()
boo-boo para guardar 2 bytes más al aumentar el tamaño del bloque de la memoria solicitada.294 Edición: ¡Rompió 300! Eliminó uno de los
strcat()
sy ajustó algunos bucles. Tengo que usar munch máximo, que es tan divertido decirlo como usarlo.292 Editar: no necesitaba la
+2
asignación en memoria.Yo solía respuesta luser de droog como la idea de base, pero ha cambiado el algoritmo de embalaje, así como una gran cantidad de ajustes y la factorización de las constantes.
fuente
C,A,
! :)brk()
? entonces enp=s+C+1;
alguna parte.+++
!%[01]
a%s
! -9 (... muchos años después)C (
487484418 con espacios eliminados)* Cayó 66 con la ayuda de JoeFish *
mecanografiado
fuente
int
variables sean globales y eliminando#include
:r,A,B,C,n,i,j; main(){char *s...
for
bucles:for(;A--;)strcat(s,a);
A
yC
más tarde para que no tenga que declarari
oB
para nadap=malloc((C=strlen(s))+1); --C; strcpy(p,s); for(A=0;A<n;A++){
Lo siento, me detendré ahora :)--C;
:p=malloc((C=strlen(s)-1)+2);
. ¡Creo que el código de golf es más divertido que crearlo en primer lugar!#include
ya quescanf
es variadic. Pero probablemente esté bien, ya que solo se llama una vez. ... Mi vieja máquina murió ayer, y todavía estoy instalando Cygwin. Incorporaré esos cambios tan pronto como pueda probarlo. ¡Gracias!