Escriba el programa más corto que genera tablaturas de guitarra para los acordes dados como entrada.
Para que los guitarristas entre ustedes no tengan una ventaja, y para que sea determinista (y probablemente más fácil de codificar), estas son las únicas formas de los acordes autorizados:
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---
Tenga en cuenta que los 5 primeros acordes y los 7 últimos acordes de cada serie tienen formas diferentes.
Todos los acordes son simples acordes mayores o menores (sin séptima u otras variaciones).
También debes cuidar los pisos. Recordatorio:
A# = Bb
C# = Db
D# = Eb
F# = Gb
G# = Ab
B#, Cb, E# and Fb are not used
La salida debe incluir la primera columna con los nombres de los cables, como se muestra arriba. No , no tiene que incluir el nombre del acorde en la parte superior. Los acordes deben estar separados por 3 -
como se muestra arriba. Los 3 últimos -
son opcionales.
La entrada es una cadena que consiste en nombres de acordes, separados por espacios.
Un ejemplo de entrada es:
Bm Gb A E G D Em F#
y la salida correspondiente es:
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---
Respuestas:
JavaScript,
297277262235223 caracteresNingún retorno de carro en la versión de golf es significativo; solo están ahí para que la respuesta sea legible. Los punto y coma son significativos.
Editar: reemplazó el exterior
map
con un bucle while y otras ediciones. ¡Finalmente dentro de 2 × el tamaño de la versión Golfscript (por ahora)!Editar: Reemplazó
indexOf
con matemáticas, desglosó la tabla de búsqueda, otras pequeñas mejoras.Editar: Otra
map
defor
y poner en una final\n
que había sido innecesariamente comiendo. Finalmente dentro de la versión Python de Jules.La salida ya no se aprovecha de que el final
---
sea opcional como:fuente
Golfscript, 136 caracteres
Totalmente 23 caracteres (17.5%) tratan con esos dos caracteres al comienzo de cada fila de salida.
Salida de muestra, probando los casos extremos:
Solo he pasado aproximadamente una hora en esto, por lo que probablemente se pueda reducir de 5 a 10 caracteres al menos. Conceptualmente resulta ser bastante similar a la solución de DocMax: tabla de búsqueda para cuatro casos, luego se incrementa en un desplazamiento y une las cadenas en el orden correcto.
fuente
Después de codificar esto, me di cuenta de que podría haber hecho esto mucho más inteligente ... tal vez haré otra entrada. ¡Espero obtener puntos por ser el más rápido!
De todos modos, hay 962 personajes de Perl.
Aquí está la salida correspondiente.
fuente
Como ya se han dado soluciones más cortas (¡maldito GolfScript!), Aquí está la mía:
Python, 229 caracteres
Salida:
fuente
Python, 449 caracteres
fuente
C99 - 231 caracteres
Los acordes se dan en la línea de comando, un argumento por acorde y, por supuesto, no hay validación de entrada de ningún tipo.
Ejecución de muestra:
Sin golf
No estándar C - 206 caracteres
Si no nos interesan las especificaciones del lenguaje, GCC puede compilar la siguiente línea en un binario funcional, a pesar de que combina declaraciones de variables C99 con una declaración de argumento de estilo K&R (y una declaración implícita de printf).
fuente
C ++, 432
Tenga en cuenta que esto necesita la afinación de la guitarra como primer parámetro. (La mayoría de las afinaciones no estándar le darán resultados ridículos de desgarro de dedos, pero supongo que está contento con la afinación estándar).
Para el Hotel California, puedes hacerlo
$./a.out EBGDAE Cbm Gb Bbb Fb G D Em F# Bm F# G## D## F## C## D##m E##
. Resultado:fuente
390345340PostdataSimplificado a un enfoque pragmático de guitarra (la forma E es solo una variación de la forma A, desplazada hacia abajo por una cuerda, con un cambio de un dedo). Tomó prestada la idea de la cadena codificada de las otras respuestas.
Previamente:
450 442418 PostdataTambién arreglé el formato de salida con este. (Las versiones anteriores comenzaron con "E ---" en lugar de "e".)
Cómo ejecutarlo:
gsnd -q -- tab.ps Bm Gb A E G D Em F\#
(ocultar el filo del caparazón).La versión sin golf fue casi más difícil que la de golf. Pero intenté ser minucioso. Editar: algunos comentarios más sobre los trucos engañosos.
¿Y qué hay de la Casa del Sol Naciente como prueba?
fuente