Wireworld es un autómata celular diseñado para parecerse a los electrones que fluyen a través de los cables. Su mecánica simple permite la construcción de circuitos digitales. Incluso ha permitido la construcción de una computadora completa .
Su misión es crear la implementación más corta de Wireworld en el idioma que elija.
Cada celda de la cuadrícula tiene uno de cuatro estados. Los cuatro estados son "en blanco", "cobre", "cabeza de electrones" o "cola de electrones".
- Una celda en blanco siempre seguirá siendo una celda en blanco
- Una cabeza de electrones siempre se convertirá en una cola de electrones.
- Una cola de electrones siempre se convertirá en cobre
- Una celda de cobre se convertirá en una cabeza de electrones si exactamente uno o dos de sus ocho vecinos son cabezas de electrones, de lo contrario seguirá siendo cobre
Esta competencia tendrá un estilo similar a la competencia Juego más corto de la vida , pero con algunos cambios.
- La cuadrícula debe tener al menos 40 por 40 celdas
- Los bordes de la cuadrícula NO deben envolverse (no un toro). Trate las células fuera del campo como si estuvieran constantemente "en blanco".
- Los usuarios deben poder ingresar su propia configuración inicial.
- Mirar fijamente las pantallas en blanco no es divertido. El programa debe mostrar visualmente la simulación mientras se ejecuta.
Este es el código de golf, menos bytes gana.
fuente
ALPACA, 82 caracteres
ALPACA es un lenguaje diseñado específicamente para autómatas celulares.
o no es nada; c es conductor; e es electrón; t es cola de electrones.
fuente
GolfScript (
125 120 105100 caracteres)Tenga en cuenta que cuento
\033
como un carácter cada uno, porque pueden reemplazarse por unESC
carácter literal . Esto utiliza códigos de control ANSI, por lo que se basa en un tty compatible. También tenga en cuenta que los marcos se imprimen comenzando con la cuadrícula de entrada.Existe cierta superposición con Generar una cuadrícula de sumas , que también utiliza el vecindario de Moore.
Codificación: espacio en blanco =>
; cabeza de electrones =>
i
; cola de electrones =>`
; cobre =>X
.La pausa entre iteraciones es el tiempo requerido para calcular 46656 46656 . Cambiar
6.?.?
a otra expresión le permite controlar la velocidad; la siguiente más lenta para el mismo recuento de caracteres es7.?.?
, que es mucho más lenta (la salida es 22 veces mayor y no es un cálculo de complejidad lineal).Para un caso de prueba, he estado usando
del desafío Rosetta Code Wireworld .
fuente
Python
371341 caracteresSí, no es tan corto, ¡pero tiene una interfaz gráfica de usuario interactiva!
Instrucciones:
Haga clic con el botón izquierdo del mouse para colocar el cable
Haga clic con el botón derecho del mouse para borrar
Haga clic con el botón central del mouse para colocar la cabeza del electrón
Haga clic fuera de los ejes para pisar el autómata.
fuente
(x>0)&(x<3)
->(0<x<3)
. :)Pitón (
243214)Intenté hacer un cruce entre usabilidad y personajes. La cuadrícula es 40x40. La entrada se da en stdin. Una cabeza de electrones es
h
, la cola de electrones est
, el cobre esc
, cualquier otra cosa está en blanco.El ciclo while (línea 3) sin comprimir (no funcionará si se coloca en el código):
fuente
g[e]='h'if(t=='c')&...else't'if i=='h'else'c'if i=='t'else i
. No estoy seguro si eso funciona exactamente como es, pero algo en ese sentido debería funcionarC,
355347300294 caracteresEditar: me di cuenta de que no necesito
feof()
Editar: Guardado 47 caracteres! Eliminó el sueño, eliminó casi todos los aparatos ortopédicos, combinó muchas operaciones.
Editar: El último hoy, desde que rompí 300 caracteres. Cambió
printf
aputs
, encontró una pequeña optimización linda con la primera comparación.C no se presta bien a este tipo de problema, pero bueno, jugar al golf es divertido. Esta es una implementación de fuerza bruta bastante, pero quería ver hasta dónde podía jugar golf.
La entrada es un archivo de texto llamado
i
. Contiene una representación del estado inicial, con*
para cobre,+
para cabeza de electrón,-
para cola de electrón, espacios para celdas vacías. Estoy usando la puerta XOR de la página wiki para realizar pruebas.fuente
cond?43:42
ser escrito42+(cond)
? Y estoy seguro de quer=s[j][i++];*p=r==43?45:r;if(r==45)*p=42;
puede reducirser=s[j][i++];*p=r==43?45:r==45?42:r;
si no es asír=s[j][i++]-43;*p=!r?45:r==2?42:r;
Python,
234218 caracteresIngrese el tablero como tres listas de números complejos que representan las coordenadas de las celdas de cobre (que deben incluir las listas de cabezas y colas), caras y colas. Aquí hay un ejemplo:
Tenga en cuenta que nosotros
eval
la entrada, por lo que puede usar expresiones complejas arbitrariamente para listas de números complejos.fuente
QBasic, 309 bytes
Advertencia: la versión de golf no es fácil de usar: tiene un método de entrada extraño, funciona como un bucle infinito y no tiene ningún retraso (por lo tanto, se ejecuta demasiado rápido en algunos sistemas). Solo ejecútelo si sabe cómo terminar un programa en su entorno QBasic. Se recomienda la versión sin golf (ver más abajo).
Para ejecutar, especifique en el indicador de entrada el ancho
w
y alto de su configuraciónh
. 1 Luego escribaw*h
códigos de un solo dígito para las celdas (moviéndose de izquierda a derecha, luego de arriba a abajo), con0
= vacío6
= cable7
= cabeza de señal1
= cola de señalUna vez que haya ingresado todas las celdas, comenzará la simulación (y continuará para siempre, hasta que elimine el programa).
Sin golf
Una versión más fácil de usar. Para modificar el diseño, modifique las
DATA
declaraciones al final.El código aprovecha la
POINT
función, que lee el valor de color de un píxel de la pantalla. Esto significa que no tenemos que almacenar las celdas por separado como una matriz. Para asegurarnos de que todas las celdas se actualicen simultáneamente, realizamos las actualizaciones en una segunda "página". Podemos alternar la página activa usando una versión de laSCREEN
declaración, y copiar el contenido de una página a otra usando laPCOPY
declaración.1 Los valores máximos para ancho y alto dependen del modo de pantalla utilizado. En
SCREEN 9
, el ancho puede ser de hasta 638 y la altura de hasta 348.SCREEN 7
tiene una resolución más pequeña (tamaño de configuración máximo de 318 por 198), pero los píxeles son más grandes y, por lo tanto, más fáciles de ver (en DOS QBasic o el emulador DOSBox, desafortunadamente QB64 solo da una ventana más pequeña).Ejecución de ejemplo
Versión sin golf en archive.org , con modo de pantalla 7:
fuente