Redstone é um material no jogo Minecraft, e é usado para muitas engenhocas complexas. Para este programa, você precisará simular apenas três itens: o fio redstone (anotado com R), a tocha redstone (anotada com T) e o bloco (anotado com B).
Aqui está uma lista de regras básicas sobre como o redstone funciona:
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
A entrada será fornecida em matrizes bidimensionais até um tamanho de 64x64, assim:
TRRR
B
TBRTRR
R
RRRRRRRRR
R
RRRRRR
É garantido que a entrada não terá nenhum "relógio" ou redstone alimentado por uma tocha apontando para o bloco em que a tocha está ligada. Haverá apenas um circuito redstone em cada entrada.
Seu programa deve alterar cada caractere para 1 ou 0, 1 indicando se este item está energizado / emitindo energia e 0 se ele não estiver energizado / não emitindo energia.
Esta entrada deve ter esta saída:
1111
1
100000
1
111111111
1
001111
Este é um código de golfe, o código mais curto vence, como sempre.
fonte
"TRR\nB B\nRRT"
?111\n0 1\n000
é a saída; parece ser bom dentro das regras. Vou colocar uma restrição de entrada dizendo que você não pode ter nenhuma situação comoTRR B R RRR
, onde pisca repetidamente.Respostas:
Haskell, 400
map(map h.transpose).transpose.(\l->[g l|g<-id:f(map(const ' ')$head l)++map map (f ' ')])
substitui cada bloco por uma lista de si mesma seguida por seus quatro vizinhos e depois mapeia isso por h. h diz para cada bloco como reage aos vizinhos: tochas se apagam ('T' em vez de 't') quando há um bloco de energia ('b') por perto, fios ('d' para mortos por 's') copiam imperfeitamente seu vizinho mais poderoso (embora não possa piorar do que morrer), etc.iterate
repete esta etapa,(!!(64^2+16))
realiza uma iteração na qual os circuitos acíclicos terminam convergindo, e eu a escrevi totalmente assim para fornecer um limite intuitivo, para não aterrissar em 400.fonte
Python, 699
Este é apenas um passe rápido (sem tempo por enquanto). Provavelmente pode usar muito mais golfe.
fonte
f=set
e criar uml=lambda x:zip(x,[0]*len(x))
. Bem, você ainda teria mais de 700 caracteres. Além disso, você deixou um espaço inútil em... or not (a,z)in o
.f=set
iria raspar alguns caracteres, e você tem um outro personagem inútil @not (a,z)in o
Python 2, 556 bytes
Veja em ação
print()
fonte
input()
eprint
. Além disso,str(int(bool(j[1:]!=u)))
é o mesmo que`int(j[1:]!=u)`
.str(
, mas bom argumentobool(
.`x`
(usando backticks, é um apelido pararepr
) é o mesmo questr(x)
(para números inteiros pequenos, pelo menos. É diferente para certos objetos, longs, geradores etc.). Outro golfe:if g!=0
é o mesmo queif g
. Você também pode terk=lambda h,l,z:max(...
print ''
? Poderia serprint''
?