Rumah Perjalanan Drunkard
Dalam tantangan ini Anda harus menulis sebuah program yang mensimulasikan seorang pemabuk yang tersandung dalam perjalanan pulang dari bar.
Memasukkan:
Input akan berupa matriks kedekatan (mewakili grafik berarah) yang mewakili jalur yang dapat diambil pemabuk. Di setiap lokasi, pemabuk akan memilih satu jalur secara acak (Setiap opsi memiliki peluang yang kira-kira sama dan tidak tergantung pada pilihan sebelumnya) untuk diikuti.
Asumsikan pemabuk selalu mulai di bar (baris pertama dalam matriks adjacency).
Jika pemabuk memasuki jalan buntu, dapat diasumsikan bahwa ia telah pulang atau ditangkap karena keracunan di depan umum dan program tersebut harus mengembalikan jalannya.
Dapat diasumsikan bahwa grafik akan selalu mengandung setidaknya satu jalan buntu.
Dapat juga diasumsikan bahwa pemabuk akan selalu dapat keluar dari bar (baris pertama tidak akan menjadi nol semua) dan bahwa jika pemabuk akan terjebak di suatu lokasi, bahwa baris akan diwakili oleh semua nol.
Keluaran:
Hasilnya adalah jalan yang diambil si pemabuk dalam usahanya untuk pulang. Nilai untuk lokasi dapat berupa nol atau satu diindeks.
Contoh:
Input
[1,0,1,1]
[0,0,0,0]
[1,0,0,0]
[1,1,1,1]
Possible Outputs
[0,2,0,3,2,0,0,3,1]
[0,3,0,3,1]
Input
[0,1,1,1,0,1]
[1,0,1,0,1,1]
[0,0,0,0,0,0]
[0,0,0,0,0,1]
[1,0,0,0,0,0]
[0,0,0,0,0,0]
Possible outputs
[0,1,5]
[0,5]
[0,1,4,0,2]
[0,3,5]
[0,3,0,1,4,0,5]
Deterministic path:
Input
[0,0,1,0]
[0,0,0,1]
[0,1,0,0]
[0,0,0,0]
Output
[0,2,1,3]
sumber
[ '1011', '0000', '1000', '1111' ]
?i
dengan semua nol kecuali pada kolomi
?0
link ke1,2,3,5
, namun output terakhir telah itu pergi dari0
ke4
Jawaban:
Mathematica, 72 byte
Ini adalah fungsi mengambil matriks sebagai argumen dan mengembalikan daftar, dan menggunakan 1-indexing.
Ide dasarnya adalah memulainya
yang berulang kali menerapkan aturan yang mengikuti daftar
{1}
sampai berhenti berubah. Aturan cocok dengan polanyayang berarti "daftar dengan nol atau lebih elemen yang disebut
r
diikuti oleh elemen yang disebutx
." Ini memberix
sebagai elemen terakhir dalam daftar saat ini, dan kami mengganti daftar denganyang merupakan daftar asli dengan
<stuff>
ditambahkan. Hal-hal yang dimaksud adalahyang mengambil
#[[x]]
(x
elemen th dari matriks input) sebagai daftar bobot dan memetakannyan++&/@#
, yang merupakan kependekan dariRange@Length@#
(yaitu{1,2,3,...}
dengan panjang yang sesuai). Ini akan melempar kesalahan jika bobotnya semua nol, itulah sebabnya dibungkus dengan ayang akan kembali
##&[]
jika pesan kesalahan dihasilkan. Ini hanya cara penulisan yang mewahSequence[]
, yang bertindak sebagai elemen "tidak ada" ({1,2,Sequence[],3}
dievaluasi menjadi{1,2,3}
) dan karenanya membuat daftar tidak berubah, menyebabkannya//.
berhenti mengganti.sumber
R ,
726966 byteCobalah online!
Mengambil input sebagai
logical
matriks, dan mencetak indeks berbasis 1 ke konsol.sumber
Perl 5
-a0
,5351 byteBerikan matriks input sebagai string ketat terpisah pada STDIN
Cobalah online!
Kerusakan
@F
selama loop body tetapi akan diperbaiki olehredo
sumber
MATL , 15 byte
Output berbasis 1.
Cobalah online! Input pertama . Input kedua . Input ketiga .
Penjelasan
sumber
Perl 6 , 38 byte
Cobalah online!
sumber
Python, 136 byte
Menggunakan nol pengindeksan, dengan asumsi randrange telah diimpor. Mengambil input m sebagai matriks adjacency
113 tidak ada impor
s=lambda m,c=0,p=[0],x=0:1 in m[c]and(m[c][x]and s(m,x,p+[x],randrange(len(m)))or s(m,c,p,randrange(len(m))))or p
136 dengan impor
import random as r;s=lambda m,c=0,p=[0],x=0:1 in m[c]and(m[c][x]and s(m,x,p+[x],r.randrange(len(m)))or s(m,c,p,r.randrange(len(m))))or p
sumber
Ruby ,
70 6765 byteTerima kasih kepada benj2240 untuk menghemat 2 byte!
Cobalah online!
sumber
m[i].sum<1?:[]
.sum
diperkenalkan pada 2.4. Saya biasa melakukan.reduce(0, :+)
...JavaScript (ES6), 87 byte
Cobalah online!
Versi alternatif, 81 byte
Mengambil input sebagai array dari string biner. Ukuran maksimum yang didukung adalah 16x16.
Cobalah online!
sumber
Java 10, 135 byte
Diindeks 0
Penjelasan:
Cobalah online.
sumber
Haskell ,
123118 byteCobalah online!
sumber
APL (Dyalog Unicode) , 32
34byteCobalah online!
Mengambil array biner bersarang sebagai input. Menghasilkan setiap iterasi pada jalur yang berbeda.
sumber
Python ,
9794 byteCobalah online!
Lihat jawaban ini untuk penjelasan lebih lanjut tentang pembuat bilangan acak:
sumber