Redstone es un material en el juego Minecraft, y se usa para muchos artilugios complejos. Para este programa, solo necesitará simular tres elementos: el cable de redstone (señalado con R), la antorcha de redstone (señalada con T) y el bloque (señalado con B).
Aquí hay una lista de reglas básicas sobre cómo funciona redstone:
A redstone torch sends power to any adjacent redstone wire.
TRRRR
^This redstone wire is powered.
Redstone wire can only hold power for 15 blocks.
TRRRRRRRRRRRRRRRR
^This last wire is unpowered, because the torch is >15 blocks away.
A block is said to be powered if a powered redstone wire is found adjacent to it.
TRRRB
^This block is powered.
If a block next to a redstone torch is powered, then the torch stops emitting power.
T
R
R
R
B <This block is powered.
T <This redstone torch does not emit power because of the block next to it.
R <This redstone is unpowered because the torch is not providing power.
R
La entrada se proporcionará en matrices bidimensionales de hasta 64x64, de esta manera:
TRRR
B
TBRTRR
R
RRRRRRRRR
R
RRRRRR
Se garantiza que la entrada no tendrá ningún "reloj" o redstone alimentado por una antorcha que apunte al bloque en el que está encendida. Solo habrá un circuito de redstone en cada entrada.
Su programa debe cambiar cada carácter para que sea 1 o 0, 1 que indica si este elemento tiene potencia / potencia de emisión, y un 0 si no tiene potencia / no está emitiendo potencia.
Esta entrada debe tener esta salida:
1111
1
100000
1
111111111
1
001111
Este es un código de golf, por lo que el código más corto gana, como siempre.
fuente
"TRR\nB B\nRRT"
?111\n0 1\n000
es la salida; parece estar dentro de las reglas. Pondré una restricción de entrada diciendo que no puede tener situaciones comoTRR B R RRR
, donde parpadea repetidamente.Respuestas:
Haskell, 400
map(map h.transpose).transpose.(\l->[g l|g<-id:f(map(const ' ')$head l)++map map (f ' ')])
reemplaza cada mosaico por una lista de sí mismo seguido de sus cuatro vecinos, luego los asigna a través de h. h dice para cada mosaico cómo reacciona ante los vecinos: las antorchas se apagan ('T' en lugar de 't') cuando hay un bloque de alimentación ('b') cerca, los cables ('d' por muerto a través de 's') se copian de forma imperfecta su vecino más poderoso (aunque no puede ser peor que muerto), etc.iterate
repite este paso,(!!(64^2+16))
arranca una iteración en la que los circuitos acíclicos se hacen convergentes, y lo escribí totalmente así para dar un límite intuitivo, no aterrizar en 400.fuente
Python, 699
Esto es solo un pase rápido (se acabó el tiempo por ahora). Probablemente pueda usar mucho más golf.
fuente
f=set
y crear unl=lambda x:zip(x,[0]*len(x))
. Bueno, todavía tendrías más de 700 caracteres. Además, dejaste un espacio inútil en... or not (a,z)in o
.f=set
afeitaría algunos caracteres, y tienes otro personaje inútil @not (a,z)in o
Python 2, 556 bytes
Véalo en acción
print()
fuente
input()
yprint
. Además,str(int(bool(j[1:]!=u)))
es lo mismo que`int(j[1:]!=u)`
.str(
, pero buen puntobool(
.`x`
(usando backticks, es un alias pararepr
) es lo mismo questr(x)
(para enteros pequeños, al menos. Es diferente para ciertos objetos, largos, generadores, etc.). Otro golf:if g!=0
es el mismo queif g
. También puede tenerk=lambda h,l,z:max(...
print ''
? Podría serprint''
?