Sua tarefa é pegar uma sequência de caracteres (a música) como entrada (em uma função ou programa) e imprimir (ou retornar) a música como seria em uma caixa de música.
Você receberá apenas os caracteres ABCDEFG.()como entrada, e a entrada nunca estará vazia. Você também pode receber as letras em minúsculas, se desejar.
Esta é uma caixa de música vazia, de tamanho 3:
.......
.......
.......
Como você pode ver, as linhas têm 7 caracteres e, como o comprimento da caixa de música é 3, temos 3 linhas. Existem apenas .s aqui, pois a caixa de música está vazia. Vamos colocar música nele!
Primeiro, criamos a caixa de música. Neste exemplo, a entrada será CDAG.DAG.
O comprimento de CDAG.DAGé 8, por isso precisamos de uma caixa de música com o comprimento 8:
.......
.......
.......
.......
.......
.......
.......
.......
Em seguida, lemos a entrada, um caractere de cada vez, e colocamos um Oem sua respectiva posição.
O primeiro caractere é Ce a localização de cada nota é equivalente a isso (adicionei espaços para maior clareza):
A B C D E F G
. . . . . . .
. . . . . . .
(and so on)
Se o caractere de entrada for a ., basta imprimir uma linha vazia.......
Então, o Cseria o terceiro personagem junto. Vamos colocá-lo em nossa caixa de música no topo:
..O....
.......
.......
.......
.......
.......
.......
.......
Repetiremos esse processo para todos os outros caracteres (o texto entre parênteses é apenas para mostrar a nota, você não deve produzir isso):
..O.... (C)
...O... (D)
O...... (A)
......O (G)
....... (.)
...O... (D)
O...... (A)
......O (G)
Por causa de como as caixas de música funcionam, se usarmos um caractere diferente de O, .e <insert newline here>, como um espaço, em nossa saída, ele não tocará a música correta!
Este é um acorde:
(ACE)
Esse acorde está nos instruindo a tocar as notas A, Ce E, ao mesmo tempo. Nunca haverá uma pausa (ou seja, a .) em um acorde.
É assim que seria escrito:
O.O.O...
E é assim que pode aparecer na música: B(ACE)D
Você nunca receberá um acorde em um acorde, ou seja, isso não será válido: (AB(CD)EF)ou isso A(B()):, e o acorde não estará vazio, ou seja, isso não será válido:A()B
Você nunca receberá uma entrada inválida.
Exemplos:
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.
Espaço em branco à esquerda / à direita na saída é permitido.
Como se trata de código-golfe , o código mais curto vence!
()duas vezes (por exemploAB(CD)E(FG):) ??