Tugas Anda adalah untuk menghasilkan pola juggling yang valid dengan melengkapi templat yang diberikan. Tapi pertama-tama, Anda mungkin perlu tahu bagaimana pola tersebut dilambangkan.
Pengantar Siteswap
Siteswap adalah notasi yang ditetapkan untuk pola juggling. Ini bekerja dengan membagi pola menjadi ketukan. Di setiap ketukan, tangan kiri dan kanan Anda bergantian melempar bola. Setiap lemparan (yaitu setiap ketukan) dilambangkan dengan angka yang menunjukkan kapan bola dilemparkan berikutnya - ini berhubungan langsung dengan ketinggian lemparan.
Mari kita lihat beberapa contoh. Lihat animasi semua ini di sini .
Cascade 3-Bola
Pola 3 bola yang paling sederhana. Setiap bola dilemparkan pada setiap ketukan ketiga (tangan bergantian). Menuliskan ketukan seperti ini (garis ASCII menghubungkan dua ketukan di mana bola yang sama dilemparkan):
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
└─┼─┼─┘ │ │
└─┼───┘ │
└─────┘
Perhatikan bagaimana setiap bola dilemparkan pada L
ketukan, dilemparkan berikutnya pada suatu R
ketukan. Pola-pola tapak ulang diulang secara implisit, sehingga pola ini biasanya dilambangkan sebagai 333
, meskipun sederhananya 3
juga cukup.
441
Berikut adalah contoh yang sedikit lebih rumit dengan situswap 441 :
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
│ │ └─┘ │ │
└─┼─────┘ │
└───────┘
Perhatikan bagaimana lemparan bernomor genap pergi ke tangan yang sama dengan yang mereka lemparkan, sedangkan lemparan bernomor ganjil pergi ke tangan lain.
423
Terkadang Anda hanya ingin memegang bola melalui ketukan alih-alih melemparkannya. Semua itu berarti, bahwa bola ini dilemparkan pada saat giliran tangan ini - yaitu 2 ketukan kemudian. Jadi memegang bola sama dengan a 2
di dalam pola:
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
A 0
berarti tangan saat ini kosong pada ketukan itu, karena pola ini menunjukkan:
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
└───┼───┼─┘ │
└───┼─────┘
└───────>
Juggling Multipleks
Masalah ini akan sedikit terlalu sederhana dengan vanwap siteswap. Masukkan pola multipleks! Juggling multipleks berarti Anda melemparkan beberapa bola dari satu tangan pada saat yang bersamaan. Misalnya, dalam cascade 3-bola di atas, jika Anda berdua melemparkan bola tambahan pada setiap ketukan ketiga, polanya akan menjadi [33]33
dan terlihat seperti ini:
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
└┴──┼─┼──┴┘ │ │
└─┼──────┘ │
└────────┘
Berikut adalah contoh lain, di mana lemparan multipleks memiliki dua ketinggian / panjang yang berbeda. Hal ini dapat dilambangkan sebagai baik [34]11
atau [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
││ └─┴──┘│ │
│└────────┘ │
└────────────┘
(Perhatikan bahwa 1
lemparan pada beat 2
mengalahkan 3
dan segera dilemparkan lagi (seperti yang lain 1
) untuk mendarat pada beat 4
dan menjadi bagian dari lemparan multipleks kedua.)
Tautan situs untuk animasi pada awal posting ini adalah [53]15121
.
Validitas Pola
Agar suatu pola berlaku secara semantik , jumlah bola di tangan harus selalu sesuai dengan jumlah lemparan yang ditunjukkan pada ketukan itu. Ini berarti, tidak boleh ada bola mendarat pada ketukan dengan 0
, harus ada hanya satu bola mendarat pada ketukan dengan digit tunggal lainnya, dan harus ada n bola mendarat pada ketukan multipleks, di mana n adalah jumlah digit dalam lemparan multipleks. Pola tersebut juga harus dapat diulang dengan mulus.
Contoh pola yang tidak valid adalah 543
(semua bola akan mendarat pada ketukan yang sama), 240
( 2
akan mendarat pada 0
ketukan) atau 33[24]
(tidak ada bola mendarat pada ketukan multipleks, tetapi dua bola mendarat pada kedua ketukan lainnya).
Tantangan
Anda akan mengambil pola wap situs yang berisi wildcard dan menghasilkan pola yang valid, dengan wildcard yang diisi.
Ambil sebagai input (melalui stdin, argumen baris perintah, parameter file atau fungsi) string format
n s
Di mana n
bilangan bulat menunjukkan jumlah bola yang akan digunakan, dan s
merupakan pola situswap ( tanpa spasi). Anda dapat berasumsi bahwa itu benar secara sintaksis - semua tanda kurung siku cocok dan tidak bersarang, dan tidak ada karakter yang tidak terduga. Semua lemparan akan menjadi lemparan satu digit ( 0
- 9
). Namun , beberapa ketukan mungkin hanya dilambangkan sebagai _
, yang harus diisi dengan lemparan tunggal atau multipleks pada output.
Catatan: sesuatu seperti tidak[_3]
akan menjadi bagian dari input. Entah seluruh ketukan hilang atau seluruh ketukan diberikan.
Keluarkan pola yang valid, yang dapat disulap dengan jumlah bola yang diberikan dan setuju dengan pola input di semua ketukan yang ditentukan. Jika tidak ada pola yang valid dengan input yang diberikan, output !
. Output juga akan melalui stdout, ke file atau sebagai nilai pengembalian fungsi.
Catatan: Output tidak boleh mengandung tanda kurung atau nol yang tidak perlu dalam lemparan multipleks. Jadi output yang mengandung [3]
atau [03]
tidak diterima, Anda harus output 3
sebagai gantinya. Urutan digit dalam lemparan multipleks tidak relevan.
Catatan: Anda dapat menghilangkan pola yang duplikat di bawah permutasi siklik. Misalnya untuk input 3 __
(perhatikan dua wildcard), keduanya 42
dan 24
merupakan jawaban yang valid (antara lain), tetapi mereka sebenarnya menggambarkan pola yang sama. Anda dapat menampilkan keduanya atau hanya salah satunya, tetapi Anda harus melakukannya secara konsisten.
Ini golf kode , kode terpendek menang (tergantung pada bonus yang tercantum di bagian bawah pertanyaan).
Anda dapat menggunakan JugglingLab untuk bermain-main dengan pola untuk melihat apakah mereka valid dan seperti apa mereka.
Contohnya
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.
Bonus
- Jika jawaban Anda dapat menangani "digit" hingga 35, dilambangkan dengan huruf (10 = A, 11 = B, ...), kurangi 20 karakter . Anda dapat memutuskan apakah huruf-huruf tersebut harus huruf besar, huruf kecil atau peka huruf besar-kecil. (JugglingLab dapat menangani mereka dalam huruf kecil jika Anda ingin melihat beberapa pola gila.)
- Jika jawaban Anda menghasilkan semua solusi yang valid, kurangi 20 karakter .
L*n^(n*choose(n+11,n+2))
manan
jumlah wildcard danL
jumlah karakter dalam polanya. Tidak persis efisien.3 __
setiap hasil dua kali, dengan ketukan ditukar), tapi saya kira itu salah saya karena tidak menentukan itu. Saya akan menambahkan klausa untuk memperbolehkan menghapusnya jika itu membantu menghemat byte.