Menulis dua blok persegi panjang kode, setiap w lebar karakter dan h karakter tinggi, yang menerapkan permainan Conway of Life ketika diatur dalam grid. ( w dan h dapat berupa bilangan bulat positif)
Misalnya, dua blok kode mungkin: ( w = 3, h = 2, bukan kode aktual)
XX|
--+
dan
|
--+
Perlakukan blok pertama seolah-olah itu adalah sel "hidup" di Game of Life dan blok kedua seolah-olah itu adalah sel "mati".
Sekarang atur banyak salinan dari dua blok ini ke dalam program yang lebih besar yang mewakili kisi Game of Life, seperti glider ini :
| | | | |
--+--+--+--+--+
| |XX| | |
--+--+--+--+--+
| | |XX| |
--+--+--+--+--+
|XX|XX|XX| |
--+--+--+--+--+
| | | | |
--+--+--+--+--+
| | | | |
--+--+--+--+--+
Sekarang di sini adalah titik kuncinya: ketika kode ini dijalankan, outputnya haruslah grid Game of Life yang merupakan generasi setelah ini, menggunakan blok kode hidup dan mati yang sama untuk sel.
Jadi output ke program di atas akan menjadi generasi berikutnya dari glider, yang juga berfungsi sebagai program runnable:
| | | | |
--+--+--+--+--+
| | | | |
--+--+--+--+--+
|XX| |XX| |
--+--+--+--+--+
| |XX|XX| |
--+--+--+--+--+
| |XX| | |
--+--+--+--+--+
| | | | |
--+--+--+--+--+
Menjalankan ini akan menghasilkan generasi berikutnya:
| | | | |
--+--+--+--+--+
| | | | |
--+--+--+--+--+
| | |XX| |
--+--+--+--+--+
|XX| |XX| |
--+--+--+--+--+
| |XX|XX| |
--+--+--+--+--+
| | | | |
--+--+--+--+--+
Dan seterusnya.
Proses tersebut harus dapat diulang tanpa batas waktu dan berfungsi untuk pengaturan blok kode hidup dan mati Anda dalam kisi Game of Life.
Grid output harus memiliki dimensi yang sama dengan program asalnya (5 oleh 6 di atas). Ukuran kisi sekecil 1 per 1 seharusnya bisa digunakan, dan ukurannya mungkin semena-mena. Secara alami, sebuah grid kosong hanya akan menampilkan dirinya sendiri.
Pembaruan: Mampu mensimulasikan kisi-kisi dimensi apa pun tanpa harus mengubah "petak" akan ideal tetapi karena ini tampaknya sangat sulit saya akan menerima jawaban yang menganggap kisi-kisi adalah ukuran tertentu (mungkin sekitar 16 * 16).
Aturan Game of Life adalah sebagai berikut:
- Setiap sel hidup dengan kurang dari 2 atau lebih dari 3 tetangga ( Moore ) mati.
- Setiap sel mati dengan 3 tetangga hidup menjadi hidup.
- Sel-sel lain tidak berubah.
Mencetak gol
Tantangannya adalah melakukan ini di area blok kode sekecil mungkin. Skor Anda adalah w * h . Skor terendah menang. Dalam hal ikatan, jawaban dengan suara terbanyak menang.
Detail
- Selain baris baru yang diperlukan untuk membuat hal-hal menjadi empat persegi panjang, dua blok kode Anda (dan karena itu program grid Game of Life Anda) hanya boleh berisi karakter ASCII yang dapat dicetak (kode hex 20 hingga 7E, tanpa tab, tanpa baris baru tambahan ).
- Kedua blok kode harus memiliki karakter w * h (selain baris baru yang diperlukan) dengan setidaknya satu perbedaan karakter. Mengisi mereka dengan spasi atau komentar tidak masalah. Mereka seharusnya tidak berubah dari satu generasi ke generasi berikutnya.
- Outputnya harus pergi ke file atau ke stdout. Tidak ada input.
- Kondisi batas dapat berupa periodik (di mana tepi atas berbatasan dengan bawah dan tepi kiri berbatasan dengan kanan) atau tak terbatas (di mana semua sel di luar batas selalu mati). Pilih yang cocok untuk Anda.
- Membaca kode sumber Anda sendiri tidak diperbolehkan.
- Bahasa atau alat apa pun yang sudah melakukan ini tidak diizinkan. (Kalau-kalau ada satu.)
Catatan: The -|+
karakter di atas hanya digunakan untuk menekankan batas sel. Blok Anda tidak memerlukan batas yang dapat dibedakan. Namun , ketika menampilkan output Anda akan sangat membantu jika ada beberapa pemisahan yang dapat dibedakan antara blok, mungkin dibuat dengan karakter yang tidak pernah digunakan dalam program sehingga mudah untuk dihapus. misalnya
DD+DD+DD+DD
+++++++++++
AA+DD+AA+DD
dari pada
DDDDDDDD
AADDAADD
sumber
__SOURCE_CODE__
.Jawaban:
Perl, w * h = 233 * 1 = 233 (per sel)
Sel bekerja dalam ukuran kisi apa saja (sebenarnya bahkan dengan panjang baris tidak beraturan). Di luar batas sel dianggap mati.
Sel Mati
Sel hidup
Pesawat peluncur
menghasilkan:
Penjelasan (tidak terkini)
Perl, w * h = 140 * 2 = 280 (per sel)
Sel multi-line tidak efisien tetapi dapat dihilangkan
__LINE__
.Sel Mati
Sel hidup
sumber
JavaScript ES6 (239 x 1 karakter per sel)
Sel mati:
Sel hidup:
Hanya perbedaan untuk sel
S[j]=0
mati danS[j]=1
sel hidup.Ukuran kisi dikendalikan dengan variabel W (lebar) dan H (tinggi). Sel di luar kotak mati.
Versi yang dikomentari
Glider (grid 5 x 6)
Keluaran generasi berikutnya:
sumber
|
adalah operator bitwise dan hanya bekerja dengan angka.||
adalah operator logis yang mengembalikan sisi kiri jika "benar", sisi kanan sebaliknya.Python, 67x33 = 2.211
Perhatikan, bahwa ini adalah versi cantik saya, di mana saya menambahkan baris "#" ke setiap baris lain di sel kehidupan, dan "" ke setiap baris lain di sel mati. Selain itu, sel-sel dipisahkan oleh garis "#". Dengan cara ini, Anda dapat menempatkan konfigurasi awal dalam file teks, misalnya
GOL.py
, dan melihatnya dengan font kecil untuk melihat apa yang terjadi pada setiap langkah. Untuk sampai ke langkah berikutnya, jalankanpython GOL.py > GOL1.py;mv GOL1.py GOL.py
dan lihat lagi.Solusi saya bekerja pada kisi ukuran sewenang-wenang dan mengasumsikan kondisi batas periodik. Saya belum menguji berbagai garis lebar, tetapi pasti ada kemampuan untuk itu.
Saya juga harus menyebutkan, bahwa keberhasilan solusi ini tergantung pada
__del__
dipanggil ketikaa
dihancurkan pada akhir program. The Python dokumentasi negaraJadi, saya hanya berharap, ini tidak hanya bekerja dengan penerjemah saya.
Sel hidup:
Sel mati:
Python, 67x17 = 1.139 Untuk mendapatkan versi golf , masih dengan beberapa cara untuk mengenali sel-sel kehidupan dari jauh, pernyataan cetak kedua di baris 19 dan 31 serta setiap baris lainnya dihapus.
Sel hidup:
Sel mati:
Jika ada permintaan, saya dengan senang hati akan menjelaskan cara kerja solusi saya ketika saya menemukan waktu.
sumber
<sup><sub>...</sub></sup>
dalam satu<pre><code>
blok. Ini tidak mengurangi ketinggian garis, tetapi font teks berkurang untuk setiap kemunculannya. Hanya menggunakan subskrip atau hanya superskrip akan membuat kode melayang turun atau naik di luar markup, tetapi bergantian akan membuatnya tetap terpusat secara vertikal.