Redstone jest materiałem w grze Minecraft i jest wykorzystywany do wielu skomplikowanych urządzeń. W tym programie będziesz musiał tylko zasymulować trzy elementy: drut z czerwonego kamienia (oznaczony literą R), pochodnia z czerwonego kamienia oznaczony literą T i blok (oznaczony literą B).
Oto lista podstawowych zasad dotyczących działania 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
Dane wejściowe będą podawane w tablicach dwuwymiarowych do rozmiaru 64 x 64, takich jak to:
TRRR
B
TBRTRR
R
RRRRRRRRR
R
RRRRRR
Gwarantujemy, że wejście nie będzie miało żadnych „zegarów” ani czerwonego kamienia zasilanego pochodnią wskazującą blok, w którym latarka jest włączona. Na każdym wejściu będzie tylko jeden obwód redstone.
Twój program musi zmienić każdy znak na 1 lub 0, 1 wskazujący, czy ten element jest zasilany / emitujący moc, oraz 0, jeśli nie jest zasilany / nie emituje mocy.
Dane wejściowe powinny mieć następujące dane wyjściowe:
1111
1
100000
1
111111111
1
001111
To jest golf golfowy, więc jak najkrótszy kod wygrywa.
źródło
"TRR\nB B\nRRT"
?111\n0 1\n000
jest wyjściem; wydaje się, że jest to zgodne z zasadami. Wprowadzę ograniczenie wejściowe, mówiąc, że nie możesz mieć takich sytuacjiTRR B R RRR
, w których wielokrotnie miga.Odpowiedzi:
Haskell, 400
map(map h.transpose).transpose.(\l->[g l|g<-id:f(map(const ' ')$head l)++map map (f ' ')])
zastępuje każdy kafelek listą samych siebie, a następnie czterema sąsiadami, a następnie odwzorowuje to do h. h mówi dla każdego kafelka, jak reaguje na sąsiadów: Pochodnie wyłączają się („T” zamiast „t”), gdy w pobliżu znajduje się blok mocy („b”), przewody („d” dla martwych przez „s”) niedokładnie kopiują ich najsilniejszy sąsiad (choć nie może stać się gorzej niż martwy) itp.iterate
powtarza ten krok,(!!(64^2+16))
opracowuje iterację, w której obwody acykliczne są zbieżne, i całkowicie napisałem to w ten sposób, aby dać intuicyjną granicę, a nie wylądować na 400.źródło
Python, 699
To tylko szybkie przejście (na razie zabrakło czasu). Prawdopodobnie przydałoby się o wiele więcej gry w golfa.
źródło
f=set
i stworzyćl=lambda x:zip(x,[0]*len(x))
. Nadal będziesz mieć ponad 700 znaków. Ponadto pozostawiłeś bezużyteczne miejsce na... or not (a,z)in o
.f=set
not (a,z)in o
Python 2, 556 bajtów
Zobacz to w akcji
print()
źródło
input()
iprint
. Ponadtostr(int(bool(j[1:]!=u)))
jest taki sam jak`int(j[1:]!=u)`
.str(
, ale dobry punktbool(
.`x`
(przy użyciu odwrotnych znaków jest to alias dlarepr
) jest taki sam jakstr(x)
(przynajmniej dla małych liczb całkowitych. Jest różny dla niektórych obiektów, długich, generatorów itp.). Kolejny golf:if g!=0
jest taki sam jakif g
. Możesz również miećk=lambda h,l,z:max(...
print ''
? Czy to możliweprint''
?