Redstone est un matériau du jeu Minecraft, et il est utilisé pour de nombreux engins complexes. Pour ce programme, vous n'aurez qu'à simuler trois éléments: le fil de redstone (noté avec R), la torche de redstone (noté avec T) et le bloc (noté avec B).
Voici une liste de règles de base sur le fonctionnement de 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
L'entrée sera donnée dans des tableaux bidimensionnels jusqu'à une taille de 64x64, comme ceci:
TRRR
B
TBRTRR
R
RRRRRRRRR
R
RRRRRR
Il est garanti que l'entrée n'aura aucune "horloge" ou redstone alimentée par une torche pointant vers le bloc sur lequel la torche est allumée. Il n'y aura qu'un seul circuit redstone dans chaque entrée.
Votre programme doit changer chaque caractère en 1 ou en 0, 1 indiquant si cet élément est alimenté / émettant de la puissance, et 0 s'il n'est pas alimenté / n'émettant pas de puissance.
Cette entrée doit avoir cette sortie:
1111
1
100000
1
111111111
1
001111
C'est un code-golf, donc le code le plus court gagne, comme toujours.
la source
"TRR\nB B\nRRT"
?111\n0 1\n000
est la sortie; cela semble être conforme aux règles. Je mettrai une restriction d'entrée disant que vous ne pouvez pas avoir de situations commeTRR B R RRR
, où il clignote à plusieurs reprises.Réponses:
Haskell, 400
map(map h.transpose).transpose.(\l->[g l|g<-id:f(map(const ' ')$head l)++map map (f ' ')])
remplace chaque tuile par une liste d'elle-même suivie de ses quatre voisins, puis la transforme en h. h indique pour chaque tuile comment il réagit aux voisins: les torches s'éteignent ('T' plutôt que 't') quand il y a un bloc d'alimentation ('b') à proximité, les fils ('d' pour dead through 's') copient imparfaitement leur voisin le plus puissant (bien qu'il ne puisse pas être pire que mort), etc.iterate
répète cette étape,(!!(64^2+16))
arrache une itération à laquelle les circuits acycliques se font converger, et je l'ai totalement écrit comme ça pour donner une limite intuitive, pas pour atterrir à 400.la source
Python, 699
Ceci est juste un passage rapide (a manqué de temps pour l'instant). Il peut probablement utiliser beaucoup plus de golf.
la source
f=set
et créer un fichierl=lambda x:zip(x,[0]*len(x))
. Eh bien, vous auriez encore plus de 700 caractères. De plus, vous avez laissé un espace inutile à... or not (a,z)in o
.f=set
cela raserait quelques caractères, et vous avez un autre personnage inutile @not (a,z)in o
Python 2, 556 octets
Voyez-le en action
print()
la source
input()
etprint
. En outre,str(int(bool(j[1:]!=u)))
c'est la même chose que`int(j[1:]!=u)`
.str(
, mais bon point à proposbool(
.`x`
(en utilisant des raccourcis, c'est un alias pourrepr
) est identique àstr(x)
(pour les petits entiers, au moins. C'est différent pour certains objets, longs, générateurs, etc.). Un autre golf:if g!=0
est le même queif g
. Vous pouvez également avoirk=lambda h,l,z:max(...
print ''
? Serait-ce possibleprint''
?