Geçen gün bir doğum günü partisi için bir kabak yaması boyunca yürüyordum ve balkabağı sarmaşıklarının, kıvrımlar, döngüler ve dallarla şık bir desen oluşturduğunu fark ettim. Bunu burada bazı ASCII sanatlarıyla simüle edeceğiz.
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
Asma Yapım Kuralları
- Sadece
\ / - p q b d
karakterlerden oluşan sadece bir ana asma vardır . - Asma, ekran boyunca sadece soldan sağa doğru hareket eder. Başka bir deyişle, en soldaki asma karakterinden başlayan bir karınca olduğunuzu varsayalım. Ana asmadaki bir sonraki bitişik karaktere ilerlerken, bir sütunu sağa taşımalısınız - asla sola gitmemelisiniz.
- Asma yön değiştirdiğinde,
p q b d
bir döngüyü simüle etmek için karakterlerden biri gerekir.p
, Doğuda kuzeydoğusunda seyahat üzüm katılırq
güneydoğu doğu için,b
güneydoğudan doğuya ved
doğudan kuzeydoğusundaki. Mektubun “halkası” nın yatay asmaya ve harfin “sapı” diyagonaline bağlandığına dikkat edin. - Asmanın başlangıcı biri (
p
veyab
seçiminiz rastgele olmak zorunda değildir) olmalı ve yatay olarak başlamalıdır. Asmanın sonu birq
veya olmalıdırd
(seçiminiz rastgele olmak zorunda değildir) ve yatay olarak bitmelidir. - İlmeklerin diğer iliklere hemen bitişik olarak yerleştirilebileceğini (ör
pd
., Asmanın geçerli bir alt dizisidir), ancak balkabağının daha sonra yerleştirilmesini zorlaştırabileceğini unutmayın. Her zaman- / \
bir döngüden hemen sonra (örneklerde yaptığım gibi) birine sahip olmak isteyebilirsiniz , ancak gerekli değildir.
Kabak Kuralları
- Kabaklar sadece
(())
(bu tam ip) oluşur. - Ana asmadan, kabaklar dalılarla tutturulur. Bu sürgünler sadece
p q b d
ilmeklere tutturulabilir , tam olarak bir\
veya/
uzunluğundadır ve balkabağına bağlanır, böylece sürgünün "ucu" ortada olur. - Ana asmanın üstüne veya altına bağlanabilirler.
- Sürgünler "sola" giderek bağlanabiliyor.
- Her atış için sadece bir kabak ve döngü başına sadece bir atış ekleyebilir.
Rastgelelik
- Yatay olarak seyahat ederken, asma yatay olarak devam etme şansı% 50, kuzeydoğuya dönme şansı% 25 ve güneydoğuya dönme şansı% 25'dir.
- Çapraz olarak seyahat ederken, asma yatay olarak% 90 ve çapraz olarak devam etme şansı% 10'dur.
- Kabakların giriş sayısını desteklemek için yeterli dönüşler olmalıdır, ancak daha fazla dönüşe izin verilir.
- Asma inşa edildiğinde, kabaklar zaten bir kabak tarafından işgal edilmemiş herhangi bir köşeye rastgele yerleştirilebilir.
- Kabaklar asma veya diğer kabakların üstüne binemez.
Meydan okuma
Bir giriş numarası verildiğinde, yukarıdaki kurallara uyarak rastgele bir kabak yaması üretin. Kodun aynı girişle birden çok kez çalıştırılması farklı sonuçlar vermelidir. Belirli bir giriş numarası için tüm olası kabak yamalarının sıfır olmayan bir şekilde meydana gelme şansı olmalıdır (zorunlu olarak eşit değildir).
Giriş
Herhangi bir uygun formattan
yamadaki kabak sayısını temsil eden tek bir tam sayı . Kodun kısalığı için, girdinin olduğunu varsayabilirsiniz .0 < n < 256
Çıktı
Ortaya çıkan kabak yaması, ekrana basılı / ekrana getirilmiş veya bir dize / dize dizisi / vb. Olarak döndürülmüştür.
kurallar
- Bu kod golf, bu nedenle golf için tüm olağan kurallar geçerlidir ve en kısa kod (bayt cinsinden) kazanır.
- Standart "Rastgele" tanımımızı kullanın .
- Tam bir program veya işlev kabul edilebilir.
- Standart boşluklar yasaktır.
- Öncü ve sondaki boşluk / yeni satırlar tamamen isteğe bağlıdır.
Örnekler
Girdi için n = 3
, yukarıdaki kurallara (boş satırlarla ayrılmış) uyan bir kabak yamasının bazı VALID örnekleri.
(())
\
p--q p-----q
/ \ / \
(()) b--d (())
(()) (())
\ /
b-q (())
\ /
b-q
p-----------------------q (())
/ \ /
(()) b-q
/
(())
Aşağıda, n = 3
açıklamalarla birlikte bazı INVALID örnekleri verilmiştir #
.
(()) (())
/ /
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.