Göreviniz, belirli bir şablonu tamamlayarak geçerli bir hokkabazlık deseni oluşturmaktır. Ama önce, muhtemelen böyle bir modelin nasıl ifade edildiğini bilmeniz gerekir.
Siteswap'a Giriş
Siteswap, hokkabazlık modelleri için oluşturulmuş gösterimdir. Deseni atımlara bölerek çalışır. Her vuruşta, sol ve sağ eliniz, topu fırlatmaya başlar. Her atış (yani her vuruş), bir sonraki topun ne zaman atılacağını gösteren bir sayı ile gösterilir - bu doğrudan atış yüksekliğine karşılık gelir.
Bazı örneklere bakalım. Tüm bunların animasyonlarını burada görebilirsiniz .
3 Toplu Kaskad
En basit 3 top modeli. Her top her üç vuruşta bir atılır (alternatif eller). Bu vuruşları yazmak şöyle görünür (ASCII çizgileri aynı topun atıldığı iki vuruşları birleştirir):
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap 3 3 3 3 3 3 3 3 3
└─┼─┼─┘ │ │
└─┼───┘ │
└─────┘
Bir atılan her topu nasıl Not L
ritmi, bir sonraki atılır R
bu desen genellikle olarak gösterilir böylece beat.Siteswap desenler, üstü kapalı tekrarlamak 333
basitçe rağmen, 3
aynı zamanda yeterli olacaktır.
441
441 siteswap ile biraz daha karmaşık bir örnek :
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap 4 4 1 4 4 1 4 4 1
│ │ └─┘ │ │
└─┼─────┘ │
└───────┘
Çift sayılı atışların atıldıkları elin nasıl gittiğine, tek sayılı atışların ise diğer ele gittiğine dikkat edin.
423
Bazen bir topu atmak yerine bir vuruşla tutmak istersiniz. Bütün bunlar, bu top bir dahaki seferinde sırayla atılacağı anlamına gelir - yani 2 sonra atıyor. Yani bir topu tutmak 2
kalıptaki bir a eşittir :
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap 4 2 3 4 2 3 4 2 3
│ └─┼─┘ │ │
│ └───┼─┘
└───────┘
50505
Bir 0
akım elde Bu model gösterdiği gibi, bu vuruş boş olduğu anlamına gelir:
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap 5 0 5 0 5 5 0 5 0
└───┼───┼─┘ │
└───┼─────┘
└───────>
Çok Katlı Hokkabazlık
Bu sorun olsa vanilya siteswap ile biraz çok basit olurdu. Çoğullama desenleri girin! Multiplex hokkabazlık aynı anda bir elden birden fazla top atmanız anlamına gelir. Örneğin, yukarıdaki 3 top kaskadında, eğer her üç vuruşta iki ek bir top atarsanız, desen olur [33]33
ve şöyle görünür:
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap [33] 3 3 [33] 3 3 [33] 3 3
└┴──┼─┼──┴┘ │ │
└─┼──────┘ │
└────────┘
Burada, multipleks atışın iki farklı yüksekliğe / uzunluğa sahip olduğu başka bir örnek var. Ya olarak ifade edilebilir [34]11
ya da [43]11
:
Beat 1 2 3 4 5 6 7 8 9
Hand L R L R L R L R L
Siteswap [43] 1 1 [43] 1 1 [43] 1 1
││ └─┴──┘│ │
│└────────┘ │
└────────────┘
(Bu Not 1
yendi atılan 2
ritmi arazilerde 3
ve hemen başka şekilde (yine atılır 1
) araziye ritmi de 4
ve ikinci multipleks atmak parçası olmak.)
Bu yazının başlangıcında animasyon için site değişikliği yapıldı [53]15121
.
Desen Geçerliliği
Bir desenin anlamsal olarak geçerli olması için, bir eldeki topların sayısı her zaman o vuruşta belirtilen atış sayısına karşılık gelmelidir. Bu, a ile bir vuruşta topların toplanmaması, 0
diğer herhangi bir tek basamaklı bir vuruşta sadece bir topun inmesi ve n'nin basamak sayısı olduğu çok katlı bir vuruşta n topun toplanması gerektiği anlamına gelir . bu çoklu atışta. Desen ayrıca sorunsuz bir şekilde tekrarlanabilmelidir.
Geçersiz modellerine örnekler 543
, (bütün topları aynı ritmi iniş olurdu) 240
( 2
iniş olurdu 0
dövmek) ya da 33[24]
(Multiplex atışı hiçbir topun ancak iki top diğer iki atım hem iniş).
Meydan okuma
Joker karakterler içeren bir sitewap deseni alır ve joker karakterler doldurulmuş olarak geçerli bir desen çıkarırsınız.
Olarak al (stdin, komut satırı argümanı, dosya veya fonksiyon parametresi aracılığıyla) girişi formatının bir dize
n s
Burada n
kullanılacak topların sayısını belirten bir tamsayıdır ve s
(a siteswap desen olmayan boşluk). Sözdizimsel olarak doğru olduğunu varsayabilirsiniz - tüm köşeli parantezler eşleşir ve iç içe değildir ve beklenmedik karakterler yoktur. Tüm atışlar tek haneli atışlar ( 0
- 9
) olacaktır. Bununla birlikte , bazı atımlar sadece _
çıkış olarak tek veya çok katlı bir atışla doldurulacak olan a olarak belirtilebilir .
Not: Böyle bir şey [_3]
olacak değil girişin parçası olmak. Ya tüm vuruş eksik ya da tüm vuruş verildi.
Verilen sayıda topla hokkabazlık edilebilecek ve belirtilen tüm atımlarda giriş paterni ile anlaşılabilecek geçerli bir patern verin. Verilen girişlerle geçerli bir düzen mümkün değilse, çıktı alın !
. Çıktı ayrıca stdout aracılığıyla, bir dosyaya veya işlev dönüş değeri olarak olacaktır.
Not: Çıktıda gereksiz köşeli parantez veya multipleks atışlarda sıfır bulunmamalıdır. Bu nedenle, içeren [3]
veya [03]
kabul edilmeyen çıktılar, 3
bunun yerine çıktı almanız gerekir . Mültipleks atıştaki rakamların sırası ilgili değildir.
Not: Sen edebilir halkalı permütasyon altında aynısı olan desenleri ihmal. Örneğin, giriş için 3 __
(iki joker karaktere dikkat edin), ikisi de geçerlidir 42
ve 24
(diğerlerinin yanı sıra) geçerli cevaplardır, ancak aslında aynı modeli tanımlarlar. Her ikisini de ya da sadece birini çıktısını alabilirsiniz, ancak bunu tutarlı bir şekilde yapmanız gerekir.
Bu kod golf , en kısa kod kazanır (sorunun altında listelenen bonuslara tabi).
JugglingLab'ı , geçerli olup olmadıklarını ve neye benzediklerini görmek için desenlerle oynamak için kullanabilirsiniz .
Örnekler
Input Possible Outputs Comments
3 _ 3
[21]
[111]
3 4_3 423
4 4_2 4[51]2
4[42]2
4[321]2
3 _23_ 6231
4233
323[31]
2235
223[41]
0237
023[43]
[42]231
[32]23[11]
4 5_3 ! 5 and 3 will both land at the third beat, but
there is only a single throw at that beat. This
cannot be fixed with any throw in the blank.
2 5_4 ! Any possible throw in the wildcard (including a
0) will make a pattern for at least 3 balls.
3 54_ ! The only solution that would correspond to a
3-ball pattern is 540, which is not semantically
valid because the 5 and 4 both land at beat 3.
There are valid solutions, but they require at
least 4 balls.
Bonuslar
- Cevabınız, harflerle (10 = A, 11 = B, ...) belirtilen 35'e kadar "rakamları" işleyebiliyorsa, 20 karakter çıkarın . Bu harflerin büyük, küçük veya büyük / küçük harfe duyarlı olmayacağına karar verebilirsiniz. (Bazı çılgın kalıplara bakmak istiyorsanız, JugglingLab bunları küçük harflerle işleyebilir.)
- Cevabınız tüm geçerli çözümleri verirse , 20 karakter çıkarın .