Tulis program atau fungsi yang menggunakan tiga bilangan bulat, lebar w
, tinggi h
, dan jumlah langkah s
. Anda akan menggambar langkah-langkah berjalan acak yang tidak memotong-sendiri s
jauh pada gambar 5*w
dengan 5*h
piksel di mana setiap sel 5 dengan 5 piksel kosong (beige murni) atau salah satu dari dua belas "pipa" sederhana ini:
Gambar di atas diperbesar untuk menampilkan detail. Berikut adalah ukuran pipa sebenarnya:
(Garis abu-abu hanya untuk memisahkan jenis pipa.)
Jalan acak akan menjadi jalur pipa kontinu tunggal yang dimulai pada satu titik ujung pipa (salah satu dari empat tipe pipa terbawah) dan berakhir di titik ujung pipa lainnya.
Mulai dengan kotak kosong w
oleh h
dan pilih satu sel secara acak untuk menjadi titik awal. Kemudian secara acak pilih salah satu dari empat arah untuk memulai dan menggambar titik akhir pipa yang sesuai. Sel awal ini menandai langkah pertama dalam berjalan Anda dan setiap kali Anda menggambar sel baru atau menimpa yang sudah ada itu dihitung sebagai langkah lain yang diambil.
Sekarang, berulang kali, pilih secara acak ke kanan, kiri, atau lurus, gambar sel pipa yang sesuai jika arah yang dipilih valid. Mundur dan pilih kembali jika arah tidak valid sampai s
jalur langkah lengkap terbentuk. Jalur harus diakhiri dengan titik akhir pipa, yang mungkin ada di mana saja di grid, tergantung pada jalur yang diambil.
Sangat penting untuk dicatat bahwa hanya dua sel pipa lurus yang dapat ditimpa, dan hanya dengan sel pipa lurus dengan orientasi yang berlawanan, hasilnya adalah sel persimpangan. Kalau tidak, semua pipa harus ditempatkan di sel kosong.
Ketika persimpangan diambil, bagian jalur yang lebih jauh dari sel awal harus digambarkan di atas.
Terserah Anda apakah grid memiliki syarat batas periodik (PBC) atau tidak, yaitu apakah pipa yang keluar dari satu sisi grid akan keluar di sisi lain. Tanpa PBC, batas grid dihitung sebagai penghalang yang bisa Anda temui seperti pipa lainnya.
Kasus Khusus
- Kapan
s
0 tidak ada pipa yang harus ditarik dan output harus kosong5*w
oleh5*h
gambar (yaitu semua krem). Kapan
s
1 stub pipa tunggalharus ditarik pada sel awal yang dipilih secara acak.
Detail lainnya
- Anda dapat berasumsi bahwa
s
palingw*h
banyak jalan akan selalu memungkinkan. (Meskipun jalur yang lebih panjang dimungkinkan karena persimpangan.) w
danh
akan selalu positif.- Semua pilihan acak harus seragam acak. mis. Anda tidak boleh menghindari membuat persimpangan ketika memungkinkan bahkan jika itu membuat masalah lebih mudah. Generator angka pseudo-acak diizinkan.
- Tiga warna yang berbeda secara visual dapat digunakan sebagai pengganti warna hitam, biru, dan krem.
- Gambar output Anda dapat diperbesar sehingga benar-benar
5*w*k
oleh5*h*k
piksel di manak
bilangan bulat positif. (Memperbesar setiap contoh yang Anda posting disarankan meskipun Andak
1.) - Setiap format file gambar lossless umum dapat digunakan dan gambar dapat disimpan ke file, ditampilkan, atau dimuntahkan mentah ke stdout.
Kode terpendek dalam byte menang.
Contohnya
(Semua diperbesar 500%.)
Jika inputnya w=2, h=1, s=0
maka output akan selalu:
Jika inputnya w=2, h=1, s=1
maka output akan menjadi salah satu gambar ini dengan peluang yang sama:
Jika inputnya w=2, h=1, s=2
maka output akan menjadi
atau mungkin
jika grid diasumsikan memiliki PBC.
(Perhatikan bahwa memulai jalur seperti akan membuat langkah kedua menjadi tidak mungkin.)
Berikut adalah beberapa kemungkinan keluaran w=3, h=2, s=6
, dengan asumsi PBC:
Berikut ini adalah kemungkinan output untuk w=3, h=3, s=9
, dengan asumsi PBC:
Perhatikan bahwa jalur tidak perlu menutupi semua sel karena penghitungan persimpangan adalah dua langkah. Juga, kita dapat menyimpulkan bahwa titik akhir sudut adalah sel awal karena jembatan penyimpangan pasti telah ditarik sesudahnya. Dengan demikian kita dapat menyimpulkan urutan pilihan acak yang dibuat:
start at top left, facing east
go straight
go right
go right
go right
go straight
go left
go right
end
Akhirnya, berikut adalah contoh w=4, h=5, s=20
dan w=4, h=5, s=16
:
You will be drawing a non-self-intersecting random walk
... apakah itu berpotongan sendiri atau tidak?