Ваша задача - создать правильный шаблон жонглирования, заполнив данный шаблон. Но сначала вам, вероятно, нужно знать, как обозначается такой шаблон.
Введение в Siteswap
Siteswap - установленная нотация для схем жонглирования. Это работает, разделяя образец в ударах. При каждом ударе ваша левая и правая рука чередуются при броске мяча. Каждый бросок (т. Е. Каждый удар) обозначается числом, которое указывает, когда этот мяч будет брошен следующим - это напрямую соответствует высоте броска.
Давайте посмотрим на некоторые примеры. Смотрите анимацию всего этого здесь .
3-шаровой каскад
Самый простой 3-мя шариками. Каждый мяч бросается при каждом третьем ударе (чередование рук). Запись ударов выглядит следующим образом (линии ASCII соединяют два удара, в которые бросается один и тот же шар):
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
└─┼─┼─┘ │ │
└─┼───┘ │
└─────┘
Обратите внимание, как каждый шар, брошенный в L
такт, бросается следующим в R
такте. Паттерны смены сайтов повторяются неявно, поэтому этот паттерн обычно обозначается как 333
, хотя просто 3
также будет достаточно.
441
Вот немного более сложный пример с siteswap 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
│ │ └─┘ │ │
└─┼─────┘ │
└───────┘
Обратите внимание, как броски с четными номерами идут в ту же руку, из которой они были брошены, в то время как броски с нечетными номерами переходят в другую руку.
423
Иногда вы просто хотите провести мяч, а не бросать его. Все это означает, что этот мяч бросается в следующий раз, когда наступает его ход, то есть через 2 удара. Таким образом, удержание мяча эквивалентно a 2
в шаблоне:
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
означает , что текущая рука пуста в том такте, так как это показывает шаблон:
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
└───┼───┼─┘ │
└───┼─────┘
└───────>
Мультиплекс жонглирование
Эта проблема была бы слишком проста с использованием ванильных сайтов. Введите мультиплексные шаблоны! Мультиплексное жонглирование означает, что вы бросаете несколько шаров из одной руки одновременно. Например, в приведенном выше каскаде из 3 шаров, если бы вам было по два, бросайте дополнительный шар при каждом третьем ударе, паттерн [33]33
получился бы следующим образом:
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
└┴──┼─┼──┴┘ │ │
└─┼──────┘ │
└────────┘
Вот еще один пример, где бросок мультиплекса имеет две разные высоты / длины. Это может быть обозначено как [34]11
или [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
││ └─┴──┘│ │
│└────────┘ │
└────────────┘
(Обратите внимание, что бросок 1
в ударе 2
приземляется в ударе 3
и сразу же бросается снова (как другой 1
), чтобы приземлиться в ударе 4
и стать частью второго мультиплексного броска.)
Смена мест для анимации в начале этого поста была [53]15121
.
Закономерность
Для того, чтобы шаблон был семантически действительным, количество шаров в руке должно всегда соответствовать количеству бросков, указанному в этом такте. Это означает, что не должно быть шаров, приземляющихся в такт с ударом 0
, должен быть только один мяч, приземляющийся в такт с любой другой одной цифрой, и должно быть n шаров, приземляющихся в многократном ударе, где n - количество цифр в этом мультиплексном броске. Шаблон также должен иметь возможность повторяться без проблем.
Примерами недопустимых паттернов являются 543
(все шары будут приземляться в одном и том же такте), 240
(тот 2
будет приземляться в 0
такте) или 33[24]
(ни один шар не приземлится в мультиплексном такте, но два шара приземляются в обоих из двух других ударов).
Соревнование
Вы возьмете шаблон sitewap, который содержит символы подстановки, и выведете правильный шаблон с заполненными подстановочными знаками.
Принимать в качестве входных данных (через стандартный ввод, аргумент командной строки, файл или параметр функции) строку формата
n s
Где n
- целое число, обозначающее количество используемых шариков, и s
шаблон изменения мест ( без пробелов). Вы можете предположить, что это синтаксически правильно - все квадратные скобки совпадают и не являются вложенными, и в них нет неожиданных символов. Все броски будут однозначными ( 0
- 9
). Тем не менее , некоторые доли могут быть обозначены как a _
, который должен быть заполнен одним или мультиплексным броском в выходных данных.
Примечание: что - то вроде [_3]
будет не быть частью ввода. Или весь удар отсутствует, или весь удар дан.
Выведите действительный паттерн, который можно манипулировать с заданным количеством шаров и согласует с входным паттерном во всех указанных битах. Если с данными входами невозможен допустимый шаблон, выведите !
. Вывод также будет через стандартный вывод, в файл или как возвращаемое значение функции.
Примечание: выходные данные не должны содержать ненужных квадратных скобок или нулей в мультиплексных бросках. Поэтому выходные данные, содержащие [3]
или [03]
не принятые, вы должны 3
вместо этого выводить . Порядок цифр в броске мультиплекса не имеет значения.
Примечание: Вы можете опустить шаблоны, которые являются дубликатами при циклических перестановках. Например, для ввода 3 __
(обратите внимание на два подстановочных знака), оба 42
и 24
являются допустимыми ответами (среди прочих), но на самом деле они описывают один и тот же шаблон. Вы можете выводить оба или только один из них, но вам придется делать это последовательно.
Это код гольф , выигрывает самый короткий код (с учетом бонусов, указанных в нижней части вопроса).
Вы можете использовать JugglingLab, чтобы поиграть с шаблонами, чтобы увидеть, являются ли они действительными и как они выглядят.
Примеры
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.
Бонусы
- Если ваш ответ может обрабатывать «цифры» до 35, обозначенные буквами (10 = A, 11 = B, ...), вычтите 20 символов . Вы можете решить, должны ли эти буквы быть прописными, строчными или регистронезависимыми. (JugglingLab может обрабатывать их в нижнем регистре, если вы хотите посмотреть на некоторые безумные шаблоны.)
- Если ваш ответ выводит все правильные решения, вычтите 20 символов .
L*n^(n*choose(n+11,n+2))
гдеn
число подстановочных знаков иL
количество символов в шаблоне. Не совсем эффективно.3 __
имеет каждый результат дважды, с заменой тактов), но я полагаю, что это скорее моя вина, что я не указал это. Я добавлю предложение, чтобы пропустить его, если это поможет сохранить байты.