Écrivez le programme le plus court qui génère des tablatures de guitare pour les accords donnés en entrée.
Pour que les guitaristes parmi vous n'aient pas d'avantage, et pour le rendre déterministe (et probablement plus facile à coder), voici les seules formes d'accords autorisées:
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---
Notez que les 5 premiers accords et les 7 derniers accords de chaque série ont des formes différentes.
Tous les accords sont de simples accords majeurs ou mineurs (pas de 7e ou d'autres variantes).
Vous devez également prendre soin des appartements. Rappel:
A# = Bb
C# = Db
D# = Eb
F# = Gb
G# = Ab
B#, Cb, E# and Fb are not used
La sortie doit inclure la première colonne avec les noms des cordons, comme indiqué ci-dessus. Il n'est pas nécessaire d'inclure le nom de l'accord en haut. Les accords doivent être séparés par 3 -
comme indiqué ci-dessus. Les 3 derniers -
sont facultatifs.
L'entrée est une chaîne composée de noms d'accords, séparés par des espaces.
Un exemple d'entrée est:
Bm Gb A E G D Em F#
et la sortie correspondante est:
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---
Réponses:
JavaScript,
297277262235223 caractèresAucun retour de chariot dans la version golfée n'est significatif; ils ne sont là que pour rendre la réponse lisible. Les points-virgules sont importants.
Édition: remplacement de l'extérieur
map
par une boucle while et d'autres modifications. Enfin à l'intérieur de 2 × la taille de la version Golfscript (pour l'instant)!Edit: Remplacé le
indexOf
par des mathématiques, cassé la table de recherche, d'autres petites améliorations.Edit: Une autre
map
pourfor
et de mettre en finale\n
j'avais été inutilement manger. Enfin à l'intérieur de la version Python de Jules.La sortie ne profite plus de la fin
---
étant facultative car:la source
Golfscript, 136 caractères
Au total, 23 caractères (17,5%) traitent ces deux caractères au début de chaque ligne de sortie.
Exemple de sortie, test des cas de bord:
Je n'ai passé qu'une heure à ce sujet, donc il peut probablement être réduit de 5 à 10 caractères au moins. Sur le plan conceptuel, il s'avère être assez similaire à la solution de DocMax: table de recherche pour quatre cas, puis incrémenter d'un décalage et joindre les chaînes dans le bon ordre.
la source
Après avoir codé cela, j'ai réalisé que j'aurais pu le faire beaucoup plus intelligemment ... peut-être que je ferai une autre entrée. J'espère que j'obtiendrai juste des points pour être le plus rapide!
Quoi qu'il en soit, il y a 962 caractères de Perl.
Voici la sortie correspondante.
la source
Étant donné que des solutions plus courtes ont déjà été données (bon sang GolfScript!), Voici la mienne:
Python, 229 caractères
Sortie:
la source
Python, 449 caractères
la source
C99 - 231 caractères
Les accords sont donnés sur la ligne de commande, un argument par accord, et bien sûr il n'y a aucune validation d'entrée d'aucune sorte.
Exemple d'exécution:
Non golfé
C non standard - 206 caractères
Si nous ne nous soucions pas des spécifications de langage, GCC peut compiler le one-liner suivant dans un binaire fonctionnel, même s'il mélange des déclarations de variables C99 avec une déclaration d'argument de style K&R (et une déclaration implicite de printf).
la source
C ++, 432
Notez que cela nécessite l'accordage de la guitare comme premier paramètre. (La plupart des réglages non standard vous donneront des résultats ridicules, mais je suppose que vous vous contentez d'un réglage standard.)
Pour l'hôtel California, vous pouvez le faire
$./a.out EBGDAE Cbm Gb Bbb Fb G D Em F# Bm F# G## D## F## C## D##m E##
. Résultat:la source
390 345340 PostscriptSimplifié à une approche guitare-pragmatique (la forme E n'est qu'une variation de la forme A, décalée d'une chaîne, avec un changement de doigt). J'ai emprunté l'idée de chaîne codée aux autres réponses.
Précédemment:
450 442418 PostscriptJ'ai également corrigé le format de sortie avec celui-ci. (Les versions précédentes commençaient "E ---" plutôt que "e".)
Comment l'exécuter:
gsnd -q -- tab.ps Bm Gb A E G D Em F\#
(cacher le tranchant de la coquille).La version sans golf était presque plus difficile que la version avec golf. Mais j'ai essayé d'être minutieux. Edit: quelques commentaires supplémentaires sur les tricksy-bits.
Et que diriez -vous de House of the Rising Sun comme test?
la source