Escreva o programa mais curto que gere guias de guitarra para os acordes dados como entrada.
Para que os guitarristas não tenham uma vantagem, e para torná-la determinística (e provavelmente mais fácil de codificar), aqui estão as únicas formas de acordes autorizadas:
Major chords:
E F F# G G# A A# B C C# D D#
e 0---1---2---3---4---0---1---2---3---4---5---6---
B 0---1---2---3---4---2---3---4---5---6---7---8---
G 1---2---3---4---5---2---3---4---5---6---7---8---
D 2---3---4---5---6---2---3---4---5---6---7---8---
A 2---3---4---5---6---0---1---2---3---4---5---6---
E 0---1---2---3---4---0---1---2---3---4---5---6---
Minor chords:
Em Fm F#m Gm G#m Am A#m Bm Cm C#m Dm D#m
e 0---1---2---3---4---0---1---2---3---4---5---6---
B 0---1---2---3---4---1---2---3---4---5---6---7---
G 0---1---2---3---4---2---3---4---5---6---7---8---
D 2---3---4---5---6---2---3---4---5---6---7---8---
A 2---3---4---5---6---0---1---2---3---4---5---6---
E 0---1---2---3---4---0---1---2---3---4---5---6---
Observe que os 5 primeiros acordes e os 7 últimos acordes de cada série têm formas diferentes.
Todos os acordes são simples ou maiores (sem sétima ou outras variações).
Você deve cuidar de apartamentos também. Lembrete:
A# = Bb
C# = Db
D# = Eb
F# = Gb
G# = Ab
B#, Cb, E# and Fb are not used
A saída deve incluir a primeira coluna com os nomes dos cabos, como mostrado acima. Ele não precisa incluir o nome do acorde na parte superior. Os acordes devem ser separados por 3, -
como mostrado acima. Os 3 finais -
são opcionais.
Entrada é uma sequência que consiste em nomes de acordes, separados por espaços.
Um exemplo de entrada é:
Bm Gb A E G D Em F#
e a saída correspondente é:
e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---
Respostas:
JavaScript,
297277262235223 caracteresNenhum retorno de carro na versão golfed é significativo; eles estão lá apenas para tornar a resposta legível. O ponto e vírgula é significativo.
Editar: Substituiu o exterior
map
por um loop while e outras edições. Finalmente, dentro de 2 × o tamanho da versão Golfscript (por enquanto)!Edit: Substituído o
indexOf
com matemática, quebrou a tabela de pesquisa, outras pequenas melhorias.Edit: Outro
map
parafor
e colocar em uma final\n
eu estava comendo desnecessariamente. Finalmente dentro da versão Python de Jules.A saída não aproveita mais o fato de o final
---
ser opcional como:fonte
Golfscript, 136 caracteres
Totalmente 23 caracteres (17,5%) lidam com esses dois caracteres no início de cada linha de saída.
Exemplo de saída, testando os casos extremos:
Eu gastei apenas cerca de uma hora nisso, então provavelmente pode ser reduzido em 5 a 10 caracteres, pelo menos. Conceitualmente, é bastante semelhante à solução da DocMax: tabela de pesquisa para quatro casos, depois incrementa em um deslocamento e une as strings na ordem correta.
fonte
Depois de codificar isso, percebi que poderia ter feito isso de maneira muito mais inteligente ... talvez eu faça outra entrada. Espero conseguir apenas pontos por ser o mais rápido!
De qualquer forma, existem 962 caracteres do Perl.
Aqui está a saída correspondente.
fonte
Como soluções mais curtas já foram fornecidas (maldito GolfScript!), Aqui está a minha:
Python, 229 caracteres
Saída:
fonte
Python, 449 caracteres
fonte
C99 - 231 caracteres
Os acordes são dados na linha de comando, um argumento por acorde e, é claro, não há validação de entrada de nenhum tipo.
Exemplo de execução:
Sem golfe
C fora do padrão - 206 caracteres
Se não nos importamos com as especificações de linguagem, o GCC pode compilar a seguinte linha em um binário funcional, mesmo que misture declarações de variáveis C99 com uma declaração de argumento de estilo K&R (e uma declaração implícita de printf).
fonte
C ++, 432
Observe que isso precisa do ajuste da guitarra como o primeiro parâmetro. (A maioria das afinações fora do padrão fornecerá resultados ridículos de quebrar os dedos, mas acho que você está satisfeito com a afinação padrão.)
Para o Hotel California, você pode fazer
$./a.out EBGDAE Cbm Gb Bbb Fb G D Em F# Bm F# G## D## F## C## D##m E##
. Resultado:fonte
390 345340 PostscriptSimplificado para uma abordagem pragmática da guitarra (a forma E é apenas uma variação da forma A, deslocada para baixo de uma corda, com uma mudança de dedo). Emprestou a idéia de cadeia codificada das outras respostas.
Anteriormente:
450 442418 PostscriptCorrigi o formato de saída com este também. (As versões anteriores começaram "E ---" em vez de "e".)
Como executá-lo:
gsnd -q -- tab.ps Bm Gb A E G D Em F\#
(esconda o afiado da concha).A versão sem golfe era quase mais difícil do que a versão com golfe. Mas eu tentei ser completo. Edit: mais alguns comentários sobre os truques.
E quanto à Casa do Sol Nascente como teste?
fonte