Este é o inverso da música: o que há nesse acorde? , que é imprimir as notas em um determinado acorde. Desta vez, a entrada é uma lista de notas em um acorde, e sua tarefa é produzir qual é o acorde.
Seu programa deve suportar os seguintes acordes triádicos. Exemplos são dados com a raiz C. Os acordes com outras raízes são os mesmos com todas as notas giradas para que C se torne essa nota raiz, por exemplo, Dmaj consiste em D, F # e A.
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
Cmaj C E G
Cm C D# G
Caug C E G#
Cdim C D# F#
Csus4 C F G
Csus2 C D G
Observe que Caug é o mesmo que Eaug e G # aug, e Csus4 é o mesmo que Fsus2. Você pode produzir qualquer um deles, mas há um bônus se produzir todos eles.
E os sétimos acordes para o bônus estão listados na tabela a seguir:
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
C7 C E G A#
Cm7 C D# G A#
Cmmaj7 C D# G B
Cmaj7 C E G B
Caug7 C E G# A#
Cdim7 C D# F# A
Regras
- Você pode escrever um programa completo ou uma função.
- A entrada é uma lista de notas, separadas por um espaço ou outro caractere conveniente. Também pode ser uma matriz de seqüências de caracteres (se receber entrada do argumento da função) ou a representação de sequência dessa matriz.
- A entrada não precisa estar em ordem específica.
- Pode haver notas duplicadas na entrada. Eles devem ser tratados da mesma maneira que existe apenas um deles.
- A saída é o nome do acorde. Caso ele produza vários nomes, a mesma regra para entrada se aplica.
- Se a entrada não for um acorde suportado, imprima as notas como estão. Seu programa também pode suportar outros acordes não listados nas tabelas acima (o que é válido, mas não possui bônus).
- Você pode usar outras notações listadas no artigo da Wikipedia . Porém, se você escolher
C
Dó maior, deverá adicionar um prefixo legível em ambos os casos para distinguir um acorde com uma única nota. - Você não pode usar funções internas para esta tarefa (se houver alguma).
- Isso é código-golfe. O menor código em bytes vence.
Exemplos
- Entrada:
C D# G
Saída:Cm
. - Entrada:
C Eb G
Saída:Cm
. - Entrada:
C Eb F#
Saída:Cdim
. - Entrada:
F A C#
Saída:Faug
,Aaug
,C#aug
,Dbaug
ouFaug Aaug C#aug
,Faug Aaug Dbaug
em qualquer ordem. - Entrada:
F D F F F F A A F
Saída:Dm
. - Entrada:
C D
Saída:C D
.
Bónus
- -30 se imprime todas, se houver mais de uma interpretação (para agosto, sus4 / sus2 e dim7).
- -70 se também suporta sétimos acordes.
- -200 se aceita entrada MIDI e imprime cada acorde que recebeu. Observe que as notas não precisam começar ou terminar ao mesmo tempo. Você decide o que acontece nos estados intermediários (desde que não trate ou pare de funcionar). Você pode assumir que não há notas nos canais de percussão (ou apenas um canal, se for conveniente). É recomendável também fornecer uma versão em texto (ou matriz) para teste, especialmente se for dependente da plataforma.
B#
,Cb
etc.Csus4 is the same as Gsus2
. Eu acho que você quer dizerCsus2 is the same as Gsus4
, não é?Respostas:
Caractere Pyth 190 - 30 - 70 = 90
Não estou realmente feliz com isso. Acordes codificados usados.
Uso:
Experimente aqui: Pyth Compiler / Executor . Desative o modo de depuração e use
"C D# G"
como entrada.Explicação:
Primeiro alguma preparação:
Em seguida, uma função que converte notas em número inteiro
Em seguida, para cada nota, mude a coord e procure-a em uma tabela
fonte
Perl 5: 183 - 100 = 83
Edit: Consegui cortar alguns caracteres extras, então também alterei os nomes dos acordes, como na solução Python, para poder fingir por um momento que estou liderando.
Exemplo:
fonte
Python 2, 335 bytes - 30 - 70 = 235
Primeira tentativa de um golfe um pouco mais longo, por isso posso estar perdendo alguns truques óbvios.
Comentários:
Saída de amostra
fonte