Latar Belakang
Anda adalah magang penyihir yang kuat, dan master Anda saat ini sedang mengembangkan mantra untuk membuat labirin antar dimensi untuk menjebak musuh-musuhnya. Ia ingin Anda memprogram komputer bertenaga uapnya untuk menganalisis kemungkinan tata letak. Memprogram mesin jahat ini sangat berbahaya, jadi Anda harus menjaga kode sesingkat mungkin.
Memasukkan
Input Anda adalah kisi periode .
dan hash dua dimensi #
, yang menandakan ruang dan dinding kosong, diberikan sebagai string yang dibatasi garis baru. Akan selalu ada setidaknya satu .
dan satu #
, dan Anda dapat memutuskan apakah ada baris baru atau tidak.
Kotak ini adalah cetak biru labirin tanpa batas, yang dibuat dengan menyelaraskan banyak salinan dari kotak di sebelah satu sama lain. Labirin dibagi menjadi rongga , yang merupakan komponen yang terhubung dari ruang kosong (ruang diagonal yang berdekatan tidak terhubung). Misalnya, kisi
##.####
...##..
#..#..#
####..#
##...##
menghasilkan labirin berikut (berlanjut tanpa batas ke segala arah):
##.######.######.####
...##.....##.....##..
#..#..##..#..##..#..#
####..#####..#####..#
##...####...####...##
##.######.######.####
...##.....##.....##..
#..#..##..#..##..#..#
####..#####..#####..#
##...####...####...##
##.######.######.####
...##.....##.....##..
#..#..##..#..##..#..#
####..#####..#####..#
##...####...####...##
Labirin khusus ini berisi rongga area tak terbatas. Di sisi lain, cetak biru ini menghasilkan labirin dengan hanya rongga terbatas:
##.####
##..###
####...
..####.
#..####
Keluaran
Output Anda akan menjadi nilai kebenaran jika labirin berisi rongga tak terbatas, dan nilai palsu jika tidak. Perhatikan bahwa labirin dapat berisi rongga yang terbatas dan tidak terbatas; dalam hal ini, hasilnya harus benar.
Aturan
Anda dapat menulis program atau fungsi lengkap. Hitungan byte terendah menang, dan celah standar tidak diizinkan.
Kasus Uji Tambahan
Rongga tak terbatas:
.#
#.#
...
#.#
#.###.#.###.#
#.#...#...#.#
#.#.#####.#.#
..#.#...#.#..
###.#.#.#.###
#...#.#.#...#
#.###.#.###.#
##.###
#..###
..##..
###..#
##..##
..#..#..#..#..#..#
.#..#..#..#..#..#.
#..#..#..#..#..#..
#.####.###.###.####
#...#..#...###..###
###.#..#.######..##
....####.#######...
###..###...########
##########.##....##
..###......##.##...
#.........##..#####
###########..###..#
#...........####..#
#.###########.##..#
#.##....##.....####
#.####.###.###.####
Rongga yang terbatas:
###
#.#
###
.#
#.
####
.#..
####
#.#.#
..#..
#####
..#..
#.#.#
#.#.#.#.#.#
..#...#.#..
###.###.###
..#.#......
#.#.#######
#.#.......#
#.#######.#
#.#.....#.#
#.#.#.#.#.#
##....#####
.#..#...##.
.##.#..#...
..###.###..
#..##.#####
#...##....#
#.#.#####.#
###..####.#
....####...
###...#####
###....##.#########
####...##....#...##
..####.#######.###.
....##..........##.
###..#####.#..##...
####..#..#....#..##
..###.####.#.#..##.
..###...#....#.#...
..####..##.###...##
#.####.##..#####.##
####...##.#####..##
###########
........#..
#########.#
..........#
.##########
.#.........
##.########
...#.......
.
dan satu#
di input.Jawaban:
JavaScript (ES6), 235
253Metode yang sama digunakan oleh @mac. Untuk setiap sel bebas, saya mencoba mengisi rekursif, menandai sel yang digunakan dengan koordinat yang saya gunakan (yang bisa di luar template asli). Jika selama pengisian saya tiba di sel yang sudah ditandai memiliki koordinat berbeda, saya berada di jalur yang tak terbatas.
Cara unik menangani modulo di JS cukup mengganggu.
Uji di Firefox / konsol FireBug
Tak terbatas
Keluaran
Terbatas
Keluaran
sumber
(j%4-1)%2
memberikan pola berulang yang bagus.L=
arah byte.C # -
423375 byteSelesaikan program C #, terima input melalui STDIN, output "Benar" atau "Salah" untuk STDOUT yang sesuai.
Saya tidak bisa meninggalkan Linq di sana ... untungnya penghapusannya terbayar! Sekarang melacak sel dilihat dan dikunjungi dalam array (mengingat hanya melihat jumlah yang terbatas pula). Saya juga menulis ulang kode directional, menghilangkan kebutuhan untuk Lambda, dan umumnya membuat kode lebih mustahil untuk dipahami (tetapi dengan penghematan byte yang substansial).
Ini adalah pencarian pertama (bukan yang penting) yang hanya berjalan sampai terjebak di gua yang terbatas, atau memutuskan gua itu cukup besar sehingga harus sangat besar (ketika memiliki sel sebanyak persegi panjang asli, ini berarti harus ada jalur dari satu sel ke dirinya sendiri di tempat lain, yang dapat kita terus ikuti selamanya).
Kode tidak terpangkas:
sumber
C#
jawaban sebagai pengambil suara teratas di sini.Python 2 -
258210244 bytePeriksa path secara rekursif, jika stack overflow mengembalikan 1 (benar) lain kembali Tidak ada (falsey).
sumber
;
untuk barisp
, karena Anda akan mendapatkannya di baris yang sama denganif
.Python 2 -
297286275 bytePilih sel "terbuka" yang sewenang-wenang untuk memulai pengisian banjir. Labirin tidak terbatas jika selama pengisian kita mengunjungi kembali sel yang sudah kita kunjungi, tetapi memiliki koordinat yang berbeda dengan kunjungan sebelumnya. Jika isi banjir memenuhi seluruh wilayah tanpa menemukan sel seperti itu, cobalah wilayah lain. Jika wilayah seperti itu tidak dapat ditemukan, labirin terbatas.
Membawa file untuk diproses pada baris perintah, mengembalikan kode keluar
1
untuk tak terbatas, dan0
untuk terbatas.Mengembalikan hasil yang benar untuk semua kasus uji.
sumber