Tulis program atau fungsi yang mengambil dalam bilangan bulat positif N (melalui stdin / command line / function arg) dan mencetak atau mengembalikan representasi string dari jalan acak dua dimensi yang merupakan N langkah panjang, ditarik dari garis miring: /
\
(ditambah spasi dan baris baru untuk spasi).
Berjalan acak 2D dimulai pada asal kisi integer tak terbatas . Kemudian N kali berulang kali, arah mata angin (atas, bawah, kiri, kanan) dipilih secara seragam secara acak dan alat bantu jalan menggerakkan satu unit ke arah itu. Jalur yang dihasilkan adalah jalan acak.
Ini adalah jalan acak untuk N = 6. Perhatikan bahwa itu berjalan kembali dengan sendirinya ketika mencapai (-1, 3).
Untuk menggambar ini dengan garis miring, pada dasarnya kita perlu memutar seluruh benda 45 ° searah jarum jam. Sumbu dan titik awal dan akhir tidak digambar dalam versi garis miring.
/
\
\
/\
Jalan yang lebih kompleks seperti ini (N = 20, meskipun tidak ada cara untuk mengatakannya):
Akan menjadi ini:
/
/\/ /\
\/\/
/\/
\/
Program Anda perlu membuat versi slash dari jalan acak ini. Anda harus secara acak memilih setiap arah jalan yang baru ditempuh, sehingga setiap menjalankan program untuk N tertentu hampir pasti akan menghasilkan jalan yang berbeda. (Pseudorandomness baik-baik saja.)
Seharusnya tidak pernah ada garis kosong di atas atau di bawah garis miring terendah dan tertinggi (kecuali untuk satu baris tambahan opsional), dan seharusnya tidak pernah ada kolom ruang kosong sebelum atau setelah garis miring paling kiri dan paling kanan.
Jadi untuk N = 1, output selalu /
atau \
, tetapi tidak pernah seperti ini:
/
Ruang trailing dibolehkan selama tidak melewati kolom tebasan paling kanan.
Kiriman dengan byte paling sedikit menang. Inilah penghitung byte yang berguna.
Jawaban:
Pyth, 74 byte
Terjemahan jawaban Uri Zarfaty yang lebih optimal.
sumber
"\
- tentu saja, tidak ada keacakan, tapi ini jalan yang valid setiap waktu!Python 2,
300285257246236 byteSesuatu untuk memulai sesuatu. Seharusnya mungkin untuk mengecilkan ini lebih jauh. Terima kasih @Maltysen untuk mencukur 10 byte.
Buat output jalan ke kamus G dari tupel yang dikunjungi (x, y), memperbarui lokasi kami saat kami pergi. Setiap langkah acak n adalah u / d (u) dan l / r (l).
sumber
"".join
dij in f(1)
loop dan mencetak langsung.PHP 5.5 - 209 byte
Tidak Disatukan:
Mulai mengerjakan jawaban PHP dari awal, tetapi kode terakhir terlalu mirip dengan karya @Uri Zarfaty jadi saya benar-benar tidak punya keberanian untuk mempostingnya. Akhirnya porting menjawab kata dengan beberapa modifikasi sebagai gantinya. Dorong nilai x / y ke dalam
$X
dan$Y
larik untuk menentukan min / maks dalam loop keluaran.Pemakaian:
sumber
Pyth - 89
Ini pada dasarnya adalah terjemahan dari jawaban Uri Zarfaty, meskipun saya memang membuat beberapa optimasi.
Penjelasan segera hadir.
Coba di sini .
sumber