Latar Belakang
Tantangan ini untuk menghormati apsillers , yang memenangkan kategori Tidak semudah kelihatannya di Best of PPCG 2016 dengan tantangan mereka. Dapatkah kotak musik 4-note saya memainkan lagu itu? Selamat!
Pada halaman "Tentang Saya", pengguna ini memiliki simulator yang sangat rapi untuk otomat seluler Game of Life . (Serius, pergi memeriksanya.) Di sisi lain, kata aspillera adalah bahasa Spanyol untuk "arrowslit". Mengingat fakta-fakta ini, tantangan ini adalah tentang panah di Game of Life.
Tanda panah Game of Life
Di GoL, kami akan mewakili panah oleh glider , dan dinding dengan urutan blok . Sebuah glider tunggal mendekati dinding dari atas, dan mencoba terbang melalui celah di dinding (tanda panah). Tugas Anda adalah untuk memeriksa apakah glider melewati tanda panah atau menabrak dinding.
Memasukkan
Input Anda adalah kisi bit, yang mewakili konfigurasi GoL. Anda dapat mengambilnya dalam format apa pun yang wajar (string multiline dari dua karakter ASCII yang dapat dicetak, daftar string, array 2D integer, array 2D boolean, dll.). Untuk kejelasan, saya akan menggunakan string multiline dari karakter .#
berikut ini.
Input dijamin memiliki beberapa properti. Pertama, tingginya 2N untuk beberapa N ≥ 6 , dan lebarnya setidaknya 2N + 2 . Inputnya adalah semua .
s, kecuali bahwa di suatu tempat di tiga baris teratas adalah glider, dan pada dua baris tengah ada dinding balok. Glider akan menuju barat daya atau tenggara, dan posisinya sedemikian rupa sehingga jika dinding dihilangkan, ia tidak akan melewati tepi samping sebelum mencapai tepi bawah (tetapi mungkin mencapai sudut kisi). Glider pada awalnya dipisahkan dari tepi kiri dan kanan setidaknya satu langkah .
s. Itu bisa dalam fase apa pun.
Dinding terdiri dari blok, yang dipisahkan oleh satu kolom .
s, kecuali di satu tempat, di mana mereka akan dipisahkan oleh setidaknya dua kolom .
s. Seperti halnya glider, blok paling kiri dan paling kanan juga dipisahkan dari tepi dengan satu langkah .
s. Akan selalu ada setidaknya satu blok di tepi kiri dan satu blok di tepi kanan.
Berikut adalah contoh dari kisi masukan yang valid:
....#......................
..#.#......................
...##......................
...........................
...........................
...........................
.##.##............##.##.##.
.##.##............##.##.##.
...........................
...........................
...........................
...........................
...........................
...........................
Keluaran
Seperti yang dinyatakan, tugas Anda adalah menentukan apakah glider menabrak dinding atau membuatnya sampai ke tepi selatan. Untuk keperluan tantangan ini, crash terjadi jika konfigurasi tidak lagi terdiri dari satu glider dan dinding blok, terlepas dari apa yang terjadi kemudian dalam simulasi. Diagram berikut menunjukkan celah terkecil yang dapat dilalui glider tenggara tanpa menabrak dalam dua fase yang berbeda (kondisi untuk glider barat daya simetris).
...#...........
.#.#...........
..##...........
...............
...............
##...........##
##...........##
...#...........
....#..........
..###..........
...............
...............
##...........##
##...........##
Jika glider terbang melalui dinding, Anda harus menampilkan nilai kebenaran, dan jika tidak, nilai palsu. Untuk contoh di atas, output yang benar adalah falsy, karena glider akan menabrak bagian kiri dinding.
Untuk keperluan tantangan ini, Anda dapat mengasumsikan bahwa jika Anda mensimulasikan GoL pada input untuk 2 * (tinggi - 3) langkah, glider berada di baris paling bawah di posisi yang diharapkan dan dinding masih utuh, maka hasilnya benar. .
Aturan dan penilaian
Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang.
Uji kasus
Saya telah mengumpulkan test case ke dalam repositori GitHub , karena mereka cukup besar. Berikut ini tautan ke masing-masing file: