Redstone adalah bahan dalam gim Minecraft, dan digunakan untuk banyak alat rumit. Untuk program ini, Anda hanya perlu mensimulasikan tiga item: kawat redstone (dicatat dengan R), obor redstone (dicatat dengan T), dan blok (dicatat dengan B).
Berikut adalah daftar aturan dasar tentang cara kerja 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
Input akan diberikan dalam array dua dimensi hingga ukuran 64x64, seperti ini:
TRRR
B
TBRTRR
R
RRRRRRRRR
R
RRRRRR
Dijamin bahwa input tidak akan memiliki "jam", atau redstone didukung oleh obor yang menunjuk ke blok bahwa obor aktif. Hanya akan ada satu sirkuit redstone di setiap input.
Program Anda harus mengubah setiap karakter menjadi 1 atau 0, 1 yang menunjukkan apakah item ini bertenaga / memancarkan daya, dan 0 jika tidak bertenaga / tidak memancarkan daya.
Input ini harus memiliki output ini:
1111
1
100000
1
111111111
1
001111
Ini adalah kode-golf, sehingga kode terpendek menang, seperti biasa.
sumber
"TRR\nB B\nRRT"
?111\n0 1\n000
adalah output; tampaknya masuk akal dalam aturan. Saya akan meletakkan batasan input yang mengatakan Anda tidak dapat memiliki situasi sepertiTRR B R RRR
, di mana berkedip berulang kali.Jawaban:
Haskell, 400
map(map h.transpose).transpose.(\l->[g l|g<-id:f(map(const ' ')$head l)++map map (f ' ')])
mengganti setiap ubin dengan daftar itu sendiri diikuti oleh empat tetangganya, lalu memetakannya melalui h. h mengatakan untuk setiap ubin bagaimana itu bereaksi terhadap tetangga: Obor mati ('T' daripada 't') ketika ada blok daya ('b') di dekatnya, kabel ('d' untuk mati melalui 's') menyalin secara tidak sempurna tetangga paling bertenaga mereka (meskipun tidak bisa lebih buruk daripada mati), dll.iterate
mengulangi langkah ini,(!!(64^2+16))
memetik iterasi di mana sirkuit asiklik dilakukan konvergen, dan saya benar-benar menulisnya seperti itu untuk memberikan batas intuitif, bukan untuk mendarat di 400.sumber
Python, 699
Ini hanya lulus cepat (kehabisan waktu sekarang). Mungkin bisa menggunakan golf lebih banyak.
sumber
f=set
dan membuatl=lambda x:zip(x,[0]*len(x))
. Nah, Anda masih lebih dari 700 karakter. Juga, Anda meninggalkan ruang yang tidak berguna di... or not (a,z)in o
.f=set
akan mencukur beberapa karakter, dan Anda memiliki karakter lain yang tidak berguna @not (a,z)in o
Python 2, 556 byte
Lihat itu dalam aksi
print()
sumber
input()
danprint
. Juga,str(int(bool(j[1:]!=u)))
sama dengan`int(j[1:]!=u)`
.str(
, tapi bagus tentangbool(
.`x`
(menggunakan backticks, ini alias untukrepr
) sama denganstr(x)
(untuk bilangan bulat kecil, setidaknya. Ini berbeda untuk objek tertentu, rindu, generator, dll). Golf lain:if g!=0
sama denganif g
. Anda juga dapat memilikik=lambda h,l,z:max(...
print ''
? Mungkinkah ituprint''
?