Ваша задача - взять последовательность символов (музыку) в качестве входных данных (в функции или программе) и напечатать (или вернуть) музыку так, как она выглядит в музыкальной шкатулке.
Вы получите только символы в ABCDEFG.()
качестве входных данных, а ввод никогда не будет пустым. Вы также можете получать буквы в нижнем регистре, если вы этого хотите.
Это пустая музыкальная шкатулка длиной 3:
.......
.......
.......
Как видите, длина строки составляет 7 символов, а поскольку длина музыкальной шкатулки равна 3, у нас есть 3 строки. Здесь есть только .
s, так как музыкальная шкатулка пуста. Давайте добавим немного музыки в это!
Сначала мы создаем музыкальную шкатулку. В этом примере вход будет CDAG.DAG
.
Длина CDAG.DAG
8, поэтому нам нужна музыкальная шкатулка длиной 8:
.......
.......
.......
.......
.......
.......
.......
.......
Затем мы читаем ввод, по одному символу за раз, и помещаем O
его в соответствующую позицию.
Первый символ C
, и расположение каждой заметки эквивалентно этому (я добавил пробелы для ясности):
A B C D E F G
. . . . . . .
. . . . . . .
(and so on)
Если входной символ является .
, то мы просто печатаем пустую строку.......
Таким образом, C
будет 3-й персонаж. Давайте поместим это в нашу музыкальную шкатулку наверху:
..O....
.......
.......
.......
.......
.......
.......
.......
Мы повторим этот процесс для всех остальных символов (текст в скобках просто для того, чтобы показать вам примечание, вы не должны выводить это):
..O.... (C)
...O... (D)
O...... (A)
......O (G)
....... (.)
...O... (D)
O...... (A)
......O (G)
Из-за того, как работают музыкальные шкатулки, если мы используем символ, отличный от O
, .
и <insert newline here>
, например, пробел, в нашем выводе, он не будет воспроизводить правильную музыку!
Это аккорд:
(ACE)
Этот аккорд инструктирует нас играть ноты A
, C
и E
в то же время. Там никогда не будет паузы (то есть .
) в аккорде.
Вот как это будет написано:
O.O.O...
И вот как это может выглядеть в музыке: B(ACE)D
Вы никогда не получите аккорд в аккорде, т.е. это не будет действительным: (AB(CD)EF)
или this:, A(B())
и аккорд не будет пустым, т.е. это не будет действительным:A()B
Вы никогда не получите неверный ввод.
Примеры:
B(ACE)D
.O.....
O.O.O..
...O...
B
.O.....
GGABC
......O
......O
O......
.O.....
..O....
...
.......
.......
.......
A..F.C(DA).
O......
.......
.......
.....O.
.......
..O....
O..O...
.......
.(ABCDEF)
.......
OOOOOO.
Конечный / ведущий пробел на выходе разрешен.
Поскольку это код-гольф , выигрывает самый короткий код!
()
дважды (напримерAB(CD)E(FG)
:)?