Tulis fungsi (menggunakan sesedikit mungkin byte) yang mengambil array dua dimensi dari sejumlah kolom dan baris di mana:
0
mewakili blok kosong,1
mewakili blok ular.
Fungsi harus mengembalikan jumlah kemungkinan jalur yang dilalui ular.
Contoh 1:
Memasukkan:
[
[1,1,1,1,1],
[0,0,0,0,1],
[0,0,0,0,1],
]
Keluaran: 2
Pada contoh di atas, fungsi akan kembali 2
karena jawabannya adalah salah satu dari:
Contoh 2:
Memasukkan:
[
[1,1,1,1],
[0,0,1,1],
[0,0,1,1],
]
Keluaran: 6
Dalam contoh ini fungsi akan kembali 6
karena jawabannya adalah salah satu dari:
catatan:
Saat menilai input, Anda dapat mengasumsikan bahwa:
- Array yang mewakili kolom akan selalu memiliki ukuran yang sama (sehingga array berbentuk persegi panjang);
- Setidaknya ada 1 jalur yang valid;
- Ular tidak dapat berjalan melalui tepian (seperti yang dapat terjadi pada beberapa versi ular);
- Ular akan selalu memiliki setidaknya 2 blok;
- Ular tidak bisa bergerak secara diagonal;
- Jalan diarahkan. (jadi, dua jalur berakhir pada posisi yang berbeda tetapi sebaliknya tampak sama persis bukan jalan yang sama, itu akan menambah hingga total)
code-golf
grid
binary-matrix
Adelin
sumber
sumber
[[0,0,1,1],[0,0,1,1],[0,0,1,1]]
. Sebagian besar jawaban memberi 16, tetapi satu memberi 15.Jawaban:
Bahasa Wolfram (Mathematica) , 16 + 83 = 99 byte
Pernyataan impor perpustakaan (16 byte):
Badan fungsi aktual (83 byte):
Cobalah online!
Perhatikan bahwa pertanyaannya hanya menanyakan jumlah jalur Hamiltonian dalam grafik.
Namun, (untuk beberapa alasan)
HamiltonianPath
fungsi tidak benar-benar berfungsi dengan grafik berarah ( contoh ) Jadi, saya menggunakan solusi yang dijelaskan dalam pertanyaan Mathematica.SE ini :True
) yang terhubung ke semua simpul lainnya.Grafik dikonstruksikan menggunakan
MakeGraph
(secara mengganggu tidak ada built-in yang setara langsung), menggunakan fungsi boolean##||Norm[#-#2]==1&
, yang mengembalikanTrue
jika dan hanya jika salah satu argumen adalahTrue
atau jarak antara dua simpul tersebut1
.Tr[1^x]
tidak dapat digunakan sebagai gantinyaLength@x
, dan<2
tidak dapat digunakan sebagai gantinya==1
.HamiltonianPath
dapat digunakan jika grafik tidak diarahkan, dengan fungsi tubuh membutuhkan 84 byte (lebih tepatnya 1 byte lebih dari pengiriman saat ini):Cobalah online!
sumber
JavaScript (ES6),
154134 byteCobalah online!
Bagaimana?
metode
Mulai dari setiap sel yang mungkin, kita mengisi matriks, membersihkan semua sel di jalan kita. Setiap kali matriks berisi tidak lebih dari 1 , kami menambah jumlah n dari jalur yang mungkin.
Setiap jalur yang valid dihitung 4 kali karena arah yang dipilih pada sel terakhir, yang sebenarnya tidak masalah. Karena itu, hasil akhirnya adalah n / 4 .
Fungsi rekursif
Alih-alih memanggil fungsi rekursif g () dari callback peta kedua () seperti ini ...
... kita mendefinisikan rekursif fungsi g () secara langsung sebagai callback dari peta () :
Meskipun formula agak panjang
y=1/y?y:Y
yang diperlukan untuk mengatur nilai awal y , ini menghemat 2 byte secara keseluruhan.Kode yang dikomentari
sumber
Jelly ,
1211 byteCobalah online!
Penjelasan.
sumber
§ỊML
bukannya§ỊP€S
menyimpan byte - saya pikir itu harus bekerja?§ÐṂL
yang sedikit lebih cepat.Python 2 ,
257246241234233227214210 byteCobalah online!
Disimpan
sumber
w
danh
Python 2, 158 byte
Cobalah online!
sumber
Haskell ,
187155 byteCobalah online!
sumber