Aturan 110 adalah otomat seluler dengan beberapa sifat menarik. Tujuan Anda adalah untuk mensimulasikan aturan 110 dalam karakter sesedikit mungkin.
Bagi mereka yang tidak tahu, aturan 110 disimulasikan baris demi baris dalam kotak. Setiap kotak dalam garis grid melihat kotak di atas, di atas-kiri dan di atas-kanan untuk menentukan sel apa yang seharusnya.
current pattern 111 110 101 100 011 010 001 000
new cell 0 1 1 0 1 1 1 0
Input: angka dari 0 hingga 39 yang merepresentasikan baris input ke-atas, dalam format beralasan apa pun (string yang dipisahkan koma, daftar, argumen fungsi). Untuk mengakomodasi bahasa yang diindeks 1, angka juga dapat diindeks 1 dan berkisar dari 1 hingga 40.
Input contoh:
38,39
Output: Kisi 40 x 40 yang mewakili automata berjalan termasuk baris pertama. Anda harus membiarkan 0 sebagai kosong dan 1 sebagai karakter pencetakan yang terlihat. Ruang tambahan diperbolehkan, selama kisi yang sebenarnya dapat dibedakan secara wajar. Bagian bawah kisi mungkin memiliki baris baru tetapi tidak boleh ada garis kosong di antara garis kisi.
Contoh output:
XX
XXX
XX X
XXXXX
XX X
XXX XX
XX X XXX
XXXXXXX X
XX XXX
XXX XX X
XX X XXXXX
XXXXX XX X
XX X XXX XX
XXX XXXX X XXX
dll.
Catatan: Pertanyaan serupa tentang automata seluler 1D telah diajukan, tetapi saya berharap, dengan hanya menggunakan satu aturan, jawaban yang lebih pendek dapat ditulis.
Jawaban:
CJam - 47
Ini digunakan
!
untuk sel "1".Cobalah di http://cjam.aditsu.net/
Penjelasan:
S40*
membuat string (array) dari 40 spasil',/
membaca garis dan membelah dengan koma{…}/
mengeksekusi blok untuk setiap item (angka dalam bentuk string)-
i'!t
mengonversi angka menjadi bilangan bulat dan menetapkan item pada posisi itu di string sebelumnya (awalnya 40 spasi ) ke '!'Pada titik ini kami telah memperoleh baris pertama.
{…}39*
mengeksekusi blok 39 kali-
N
menambahkan baris baru-
40,
membuat array [0 1… 39]-
S3$S++
menyalin baris sebelumnya (posisi 3 pada stack) dan menambahkannya dengan spasi di setiap sisi-
f{…}
mengeksekusi blok untuk {setiap angka dari 0 ke 39} dan {the padded line}-
>3<
mengambil sepotong 3 item dari garis empuk mulai dari angka saat ini-
2b
mengkonversi dari basis 2; item yang kami iris bukan basis-2 digit, tetapi karakter dapat dikonversi ke nilai ASCII mereka dan '' mod 8 adalah 0 dan '!' mod 8 adalah 1-
137Yb
mengonversi 137 ke basis 2 (Y
= 2), memperoleh [1 0 0 0 1 0 0 1], yang 110 terbalik dan dinegasikan (pada 8 bit)-
='!^
mendapatkan basis-2 digit yang sesuai ( array membungkus sehingga indeks diambil mod 8) dan xor's with the '!' karakter, menghasilkan '!' untuk 0 dan '' untuk 1sumber
Ruby, 113 karakter
Mengambil input pada stdin. Untuk menggunakan aturan lain, cukup ganti
110
di baris terakhir dengan aturan apa pun yang ingin Anda coba.Contoh:
sumber
Mathematica, 122 byte
Ya, Anda mungkin melihat ini sebagai penyalahgunaan celah ini , tetapi a) celah itu cukup diperdebatkan, b) pertanyaan Cellular Automaton membutuhkan jawaban Mathematica (terutama yang tentang Peraturan 110) dan c) Jawaban Ruby Ventero lebih pendek, jadi saya tidak berpikir ada salahnya dilakukan.
Sebagian besar karakter digunakan untuk parsing input dan format output. Otomat yang sebenarnya disimulasikan menggunakan
Ini menggunakan kondisi batas periodik (jadi kisi-kisi membungkus).
sumber
Python - 141
Jalankan sebagai mis
python 110.py <<< 38,39
sumber
['X',' ']
dapat diubah menjadi'X '
untuk menyimpan 5 karakter.o=range()
q,
676258 byteDiasumsikan tidak ada bungkus:
Versi lama
sumber
Python, 186
Layak tetapi mungkin tidak optimal.
Anda tidak menentukan bagaimana input didapat, jadi saya baru saja membuat fungsi.
Gunakan contoh:
Keluaran:
sumber
Mathematica, 113 karakter
Jawaban lain menggunakan Mathematica
CellularAutomaton
.sumber
" "["X"][[#]]&
kerjanya?" "["X"][[1]]
adalah"X"
." "["X"][[0]]
mengembalikan kepala" "["X"]
, yaitu" "
.C - 178
Kode ini tergantung pada kenyataan bahwa setiap baris dalam matriks disimpan dalam memori yang berdekatan. Juga, ia tidak mencetak baris pertama, tetapi mencetak 40 baris berikutnya, karena aturan hanya menentukan kisi 40x40.
Diindentasi hanya untuk keterbacaan, jumlah byte hanya mencakup kode yang diperlukan.
sumber
Lua - 351
Bukan bahasa yang ideal untuk bermain golf.
sumber
do u(n,i,'x')
itu disengaja, bukan?Haskell ,
175 170 169 136 127127 byte−9 byte berkat @bmo
Cobalah online!
sumber
Haskell ,
135 131130 byte-1 byte berkat Ørjan Johansen (mengatur ulang
take 40
)Pendekatan yang sama sekali berbeda untuk jawaban FrownyFrog tetapi hampir sama panjangnya:
Penjelasan
r
zipWith3
(?)
The
(?)
operator adalah bagian yang paling menarik dari solusi: Sebelumnya saya menggunakan aturan Boolean dihasilkan dengan peta Karnaugh, tapi ternyata di luar ada cara yang lebih ringkas:sumber
take 40$
sebelumnyamap(" o"!!)<$>
.Sekam ,
3128 byteHah, Husk mengalahkan Jelly!
Cobalah online!
Penjelasan & Tidak Disatukan
Sebelum menambahkan penjelasan, biarkan saya sedikit ungolf ini .. Pertama mari kita hapus berbagai komposisi, tambahkan tanda kurung eksplisit dan buka kompresi
¨↑¨
string. Juga mari kita ganti40
dengan4
untuk penjelasan yang lebih mudah dibaca:sumber
Java, 321 karakter
Input dilewatkan sebagai argumen dari baris perintah, misalnya
java R 38,39
Saya tidak pernah menulis kode java yang lebih dikaburkan :-)
sumber
Pembaruan: Contoh output yang benar di sini (dengan 40 baris tidak 50): Output baru di bawah ini (dihapus sebelumnya untuk singkatnya):
Melakukan teka-teki lain saya belajar sesuatu yang menarik tentang pernyataan bersarang untuk loop di php, dan tiba-tiba mereka jauh lebih kompleks daripada yang saya pikir sebelumnya. Ketika saya mendapatkan waktu saya rasa saya bisa mengalahkan skor ini. Untuk saat ini meskipun tetap tidak berubah pada 408 yang tidak kompetitif.
Karakter php versi 408 saya:
Ini adalah teka-teki yang bagus. Saya juga menghabiskan waktu lama bermain dengan input karena ini adalah hal-hal menarik yang harus dikatakan. Bagaimanapun, ini adalah versi PHP saya (yang mana dekat dengan beberapa jawaban yang diposting tetapi lengkap. Di posisi ke-0 hanya ambil di atas dan di kanan atas, di posisi ke-39 hanya ambil di atas dan di atas kiri, yaitu tidak ada pembungkus. Jadi di sini adalah versi saya:
Anda dapat melihatnya dan menjalankannya di sini: http://codepad.org/3905T8i8
Input adalah string input pada awalnya sebagai $ a = '38, 39 ';
Output adalah sebagai berikut:
Harap Anda menyukainya!!!
PS Saya harus menambahkan beberapa jeda baris ke kode sehingga Anda bisa melihat semua itu dan tidak merentangkan halaman dengan bilah gulir.
sumber
Stax , 24 byte CP437
Jalankan dan debug online!
Menggunakan titik kode 1 dalam CP437 untuk sel "1".
Kasus luar biasa untuk menunjukkan kekuatan bahasa ini.
Penjelasan
Menggunakan versi yang belum dibongkar (29 byte) untuk menjelaskan.
sumber
K (ngn / k) ,
4435 byteCobalah online!
{
}
berfungsi dengan argumenx
!40
daftar int mulai dari 0 hingga 39x?
cari indeksnyax
, gunakan0N
("bilangan bulat nol") karena tidak ditemukan^
siapa di antara mereka yang nol? ini memberi kita input, dinegasikan39{
}\
berlaku 39 kali, kumpulkan hasil antara dalam daftar1,x,1
kelilingi daftar dengan 1s (negasi 0s)3'
tiga kali lipat item berturut-turut2/'
decode biner masing-masing@
gunakan sebagai indeks di ...2\145
penyandian biner 145 (bit dinegasikan 110)"X "
akhirnya, gunakan matriks 40x40 sebagai indeks dalam string"X "
(di@
sini adalah implisit)sumber
Jelly , 29 byte
Cobalah online!
sumber