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 O
em sua respectiva posição.
O primeiro caractere é C
e 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 C
seria 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
, C
e 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)
:) ??