Saya sedang berjalan melalui patch labu hari lain untuk pesta ulang tahun, dan melihat tanaman merambat labu membuat pola yang bagus, dengan berputar, loop, dan cabang. Kita akan mensimulasikan itu di sini dengan beberapa seni ASCII.
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
Aturan Konstruksi Vine
- Hanya ada satu pokok anggur, hanya terdiri dari
\ / - p q b d
karakter. - Pohon anggur hanya bergerak dari kiri ke kanan melintasi layar. Dengan kata lain, anggaplah Anda adalah semut yang memulai karakter anggur paling kiri. Saat Anda maju ke karakter yang berdekatan berikutnya pada pokok anggur, Anda harus memindahkan satu kolom ke kanan - tidak pernah ke kiri.
- Ketika anggur berubah arah, salah satu
p q b d
karakter diperlukan untuk mensimulasikan loop. Thep
bergabung tanaman merambat bepergian timur laut ke timur, yangq
untuk timur ke tenggara, yangb
dari tenggara ke timur, dand
dari timur ke timur laut. Perhatikan bahwa "lingkaran" surat itu terhubung ke pohon anggur horizontal, dan "batang" surat itu terhubung ke diagonal. - Awal anggur harus salah satu
p
ataub
(pilihan Anda, tidak harus acak), dan mulai secara horizontal. Akhir anggur harus salah satuq
ataud
(pilihan Anda, tidak harus acak), dan harus berakhir secara horizontal. - Perhatikan bahwa loop dapat ditempatkan berbatasan langsung dengan loop lainnya (misalnya,
pd
adalah substring yang valid dari anggur), tetapi itu mungkin membuatnya lebih sulit untuk menempatkan labu nanti. Anda mungkin ingin selalu memiliki salah satu- / \
setelah loop (seperti yang saya lakukan dalam contoh saya), tetapi itu tidak diperlukan.
Aturan Labu
- Labu hanya terdiri dari
(())
(string ini). - Dari pokok anggur, labu diikat oleh cabang. Cabang ini hanya dapat dilampirkan ke
p q b d
loop, tepatnya satu\
atau/
panjangnya, dan melekat pada labu sehingga "ujung" cabang adalah di tengah. - Mereka dapat terhubung di atas atau di bawah pokok anggur.
- Cabang dapat terhubung ke "kiri."
- Hanya satu labu dapat melampirkan per cabang, dan hanya satu cabang per loop.
Keserampangan
- Saat bepergian secara horizontal, anggur memiliki kemungkinan 50% untuk melanjutkan secara horizontal, 25% kemungkinan untuk berbelok ke timur laut, dan 25% kemungkinan untuk berbelok ke tenggara.
- Saat bepergian secara diagonal, pohon anggur memiliki peluang 90% untuk memutar horisontal dan 10% kemungkinan melanjutkan secara diagonal.
- Harus ada putaran yang cukup untuk mendukung jumlah input labu, meskipun lebih banyak putaran diizinkan.
- Setelah anggur dibuat, labu dapat ditempatkan secara acak di sudut mana pun yang belum ditempati labu.
- Labu tidak bisa tumpang tindih dengan sulur atau labu lainnya.
Tantangan
Diberikan nomor input, hasilkan patch labu acak mengikuti aturan di atas. Menjalankan kode beberapa kali dengan input yang sama akan menghasilkan hasil yang berbeda. Semua tambalan labu yang mungkin untuk nomor input yang diberikan harus memiliki beberapa (tidak selalu sama) peluang yang tidak nol terjadi.
Memasukkan
Integer tunggal n
mewakili jumlah labu di tambalan, dalam format apa pun yang nyaman . Untuk singkatnya kode, Anda dapat menganggap inputnya 0 < n < 256
.
Keluaran
Patch labu yang dihasilkan, baik dicetak / ditampilkan ke layar atau dikembalikan sebagai string / string-array / etc.
Aturan
- Ini adalah kode-golf sehingga semua aturan biasa untuk bermain golf berlaku, dan kode terpendek (dalam byte) menang.
- Gunakan definisi standar kami tentang "Acak."
- Program atau fungsi lengkap dapat diterima.
- Celah standar dilarang.
- Whitespace / newlines terkemuka dan tertinggal semuanya sepenuhnya opsional.
Contohnya
Untuk input n = 3
, berikut adalah beberapa contoh VALID tambalan labu mengikuti aturan di atas (dipisahkan oleh baris baru kosong).
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
(()) (())
\ /
b-q (())
\ /
b-q
p-----------------------q (())
/ \ /
(()) b-q
/
(())
Berikut adalah beberapa contoh INVALID untuk input n = 3
, dengan penjelasan #
.
(()) (())
/ /
p---q----q
\
(())
# The vine continued horizontally after a loop was placed.
(()(())
\ /
p---q
\
(())
# The pumpkins are both overlapping and sprouting from the same loop.
p----------------q
\ \ \
(()) (()) (())
# The pumpkin is attached to the middle of the vine, not at a loop.
Jawaban:
Python 2, 819 byte
Dibawa
n
sebagai inputSelalu letakkan pumkpin di 'luar' sudut (acak kiri / kanan)
Sementara tanaman anggur dibangun, labu ditambahkan, dan ketika labu cukup ada, anggur berhenti.
Contoh:
n=4
n=20
sumber