Contribution
Le symbole de tout accord triadique (voir http://en.wikipedia.org/wiki/Chord_(music)#Triads ).
Sortie
Les notes constituant l'accord donné.
Exemples
Entrée: AM
sortie:A C# E
Entrée: C#m
sortie:C# E G#
Entrée: Db+
sortie:C# F A
Entrée: C0
sortie:C D# F#
Bonus
-50 si vous pouvez également composer avec des accords septième
-150 pour jouer le son de l'accord
-150 pour utiliser des caractères imprimables pour montrer comment jouer l'accord sur un piano; exemple pour AM
:
┌─┬─┬┬─┬─┬─┬─┬┬─┲┱─┬─┬─┲━┱┬─┲━┱─┬─┬┬─┬┬─┬─┐
│ │ ││ │ │ │ ││ ┃┃ │ │ ┃ ┃│ ┃ ┃ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ┃┃ │ │ ┃ ┃│ ┃ ┃ │ ││ ││ │ │
│ │ ││ │ │ │ ││ ┃┃ │ │ ┃ ┃│ ┃ ┃ │ ││ ││ │ │
│ └┬┘└┬┘ │ └┬┘└┲┛┗┱┘ │ ┗┯┛└┲┛ ┃ └┬┘└┬┘└┬┘ │
│ │ │ │ │ ┃ ┃ │ │ ┃ ┃ │ │ │ │
└──┴──┴──┴──┴──┺━━┹──┴──┴──┺━━┹──┴──┴──┴──┘
-100 pour l'utilisation de caractères imprimables pour montrer comment jouer l'accord sur une guitare; exemple pour AM
:
x o o o o o
┌───┬───┬───┬───┬───┐
│ │ │ │ │ │
├───┼───┼───┼───┼───┤
│ │ │ │ │ │
├───┼───┼───┼───┼───┤
│ │ █ █ █ │
├───┼───┼───┼───┼───┤
│ │ │ │ │ │
(voir https://en.wikipedia.org/wiki/Box-drawing_character )
Règles
Le résultat doit être un programme ou un script en ligne de commande.
L'entrée et la sortie peuvent être sous n'importe quelle forme, dans la mesure où elles respectent une norme de notation musicale.
Une représentation de guitare ou de piano est considérée comme valide si et seulement si elle contient les trois notes (triadiques) ou quatre (septième) requises et rien d’autre. La même note peut être présente plusieurs fois dans l'accord.
Les bibliothèques externes ne sont pas autorisées, sauf pour la génération de son (dans ce cas
#include
, lesimport
directives , ... ne sont pas ajoutées au nombre de caractères).C'est le code golf, le code le plus court gagne!
Un peu de théorie musicale ...
Dans la musique tonale occidentale moderne, chaque octave est composée de douze notes successives, souvent notées:
A
A#
B
C
C#
D
D#
E
F
F#
G
G#
Ou:
La
La#
Si
Do
Do#
Re
Re#
Mi
Fa
Fa#
Sol
Sol#
Dans ce système, nous considérons que deux notes successives (par exemple, A
et A#
, ou E
et F
) sont séparées par un demi-ton. En outre, les notes sont en quelque sorte "en boucle": ce qui suit immédiatement G#
est A
.
Un accord est constitué de quelques notes (2, 3, 4, parfois plus) qui "sonnent bien ensemble". Par exemple, les accords triadiques contiennent trois notes différentes et les accords du septième, quatre notes différentes.
Définissons les quatre accords triadiques comme suit :
Triade majeure : contient la racine de l'accord (dans cette question, la note donnée en entrée), le tiers majeur de la racine (4 demi-tons plus haut que la racine) et le cinquième parfait pour la racine (7 demi-tons plus haut que la racine ) cela peut être symbolisé 0-4-7
Triade mineure , symbolisée 0-3-7
Triade augmentée , symbolisée 0-4-8
Triade diminuée , symbolisée 0-3-6
Ainsi , par exemple, si vous voulez faire une triade majeure C , noté C
, CM
, Cmaj
, vous aurez besoin de trois a noté:
- 0: la racine , dans ce cas un
C
- 4: le tiers mineur , 4 demi-tons plus haut que la racine; c'est un
E
- 7: le cinquième parfait , 7 demi-tons plus haut que la racine: a
G
C'est ce que 0-4-7
, 0-3-7
, 0-4-8
et les 0-3-6
notations utilisées ci - dessus moyenne! Pour les septièmes accords, utilisez le modèle suivant:
C'est tout pour aujourd'hui! Maintenant, étonnez-moi avec un code incroyable ... Si vous avez des questions, ajoutez quelques commentaires ci-dessous.
Db+
estDb F A
il n'y a pas D ou G # là - dedans. C'est peut-être un peu plus de théorie que nécessaire, les formules étaient la partie importante. Si vous voulez vraiment inclure les huit des sept accords listés dans wikipedia, vous devez spécifier l'entrée. Je suppose que la production artistique de piano et de guitare est flexible.Réponses:
BBC BASIC
Emulator sur bbcbasic.co.uk
Rev 1, 340 - 150 clavier - 150 en cours de jeu = 40
Voici la dernière version, dans laquelle j'ai réussi à inclure les améliorations suivantes tout en n'allongeant que de quelques caractères supplémentaires.
L'entrée peut être modifiée facilement à l'écran avant d'appuyer sur retour touche (J'utilisais auparavant GET $ pour obtenir des pressions uniques, car BBC Basic ne vous permet pas d'accéder à un seul caractère d'une chaîne comme si la chaîne était un tableau. fonction encombrante de MID $ pour extraire une chaîne d'un caractère à l'intérieur de la chaîne.
Les deux côtés du clavier sont affichés, ainsi que la ligne complète entre E et F.
Pour compenser les caractères ajoutés par ce qui précède, j'ai réorganisé le programme afin d'éliminer les instructions d'impression inutiles et j'ai supprimé des espaces qui, à première vue, semblaient ne pas pouvoir être supprimés. IN BBC Basic, toutes les fonctions intégrées sont des mots réservés. Vous pouvez leur attribuer un nom de variable sans espace entre eux. Les noms de variables ne sont pas autorisés à commencer par un mot réservé. Afin de rendre le programme moins compliqué à lire, j'ai changé toutes les variables en minuscules.
Bien que la présentation soit bien meilleure, le programme suivant est
déjà entièrement joué au golf.(Voir la correction ci-dessous.) En général, les nouvelles lignes et les deux points sont interchangeables, sauf lorsqu'une instruction IF est utilisée. Dans ce cas, toutes les instructions de la même ligne (séparées par des deux points) seront exécutées conditionnellement. Les instructions après la nouvelle ligne ne sont pas contrôlées par le SI et seront toujours exécutées.Programme rev 1 340 caractères
CORRECTION: BBC BASIC pour Windows de RT Russell vous permet d’éliminer certaines nouvelles lignes et deux points, ce qui ramène le total à 327, voir ci-dessous. En outre, il marque les mots-clés en caractères uniques avant de les enregistrer, ce qui les ramène à 279.
Sortie rev 1
Rev 0, 337 - 150 clavier - 150 en cours de jeu = 37C'est un concept similaire à ma réponse Arduino, mais j'ai toujours su que je pouvais battre ce nombre d'octets avec BBC Basic. Ne reconnaît que les dièses, mais considère que B # est invalide, vous devez mettre C. Ceci pourrait être résolu si cela était vraiment considéré comme important.
J'ai abandonné l'idée de la guitare et me suis concentré sur l'amélioration du clavier. Il va maintenant de C à B, et j'ai ajouté dans la partie gauche du clavier et la ligne entre E et F. Cela coûte 28 caractères. Le côté droit ne serait pas beaucoup plus.
Voici un exemple de sortie, un accord atténué A # (qui produit un son assez bizarre dans cette inversion) et un accord majeur en sol. Notez que l'entrée n'est pas renvoyée à l'écran. Conformément à la réponse Arduino, tournez l'écran dans le sens contraire des aiguilles d'une montre pour afficher.
Version non-golfée
la source
Comme vous pouvez le constater, je n'ai pas du tout essayé de jouer au golf. Je suis un geek de la musique, et ma bête noire est que les gens écrivent des choses en utilisant de mauvais enharmonics (par exemple, en disant qu'un accord diminué en C est CD # F # au lieu de C Eb Gb), j'ai donc écrit ce programme qui obtient les enharmonies droite. Pour ce faire, chaque note est représentée par le nombre de quintes parfaites supérieures à F.
Pour ce que cela vaut, si vous voulez distinguer les harmoniques, tout intervalle musical peut être bien représenté dans un programme informatique sous la forme d’un nombre de quintes parfait et d’un nombre d’octaves. Une quatrième augmentée, par exemple, correspond à 6 quintes parfaites et à -3 octaves, et une cinquième diminuée correspond à -6 quintes parfaites et 4 octaves.
Haskell, 441 caractères
Quelques exemples d'invocations:
la source
Arduino
Les entrées / sorties sont envoyées à / reçues de l’Arduino via un port COM. Un utilisateur peut interagir avec cela via un terminal ou le moniteur série de l'IDE Arduino. Comme vous l'avez peut-être deviné grâce à mon choix de plate-forme, j'ai l'intention d'inclure le jeu réel de l'accord (même si je ne l'ai pas encore fait.)
J'ai réussi à m'attaquer au bonus clavier et j'ai essayé de m'attaquer à la guitare, avec un succès limité.
La boîte à accords arrive à 130 octets, ce qui est trop long pour en valoir la peine. J'ai donc essayé d'une autre manière, en imprimant simplement le style de tabulation des numéros de frette. Il s’agit actuellement de 81 octets pour un bonus de 81-100 = -19. Si cette approche est jugée valide, je peux essayer de l’améliorer.
Les accords utilisés sont toutes des formes de type D avec la racine sur la 2ème corde, la cinquième sur la 3ème et la troisième sur les 1ère et 4ème cordes. Les 5ème et 6ème cordes ne sont pas utilisées et je la marque avec un X à droite du cadre des accords (la gauche serait plus habituelle, mais des exemples marqués à droite peuvent être trouvés.)
Parce que le programme considère que F est la note la plus basse (pour la compatibilité avec le clavier tout en évitant les frettes excessivement hautes avec cette forme d'accord), l'accord le plus élevé est un Mi (avec la racine sur la 17ème frette.) Voir l'exemple de sortie.
Le clavier a plus de succès en termes de golf. Il fonctionne à partir de FE plutôt que CB pour les raisons décrites ci-dessus. Vous devez l'afficher en tournant l'écran de 90% dans le sens inverse des aiguilles d'une montre, pour voir clairement les contours des notes noires et la démarcation entre les notes blanches
---
. La ligne entre B et C pourrait être étendue de____
quelques octets supplémentaires.Je vais essayer de jouer les notes ensuite. Ce sera intéressant car, bien que je pense que l’Arduino Uno a 3 timers internes, vous ne pouvez jouer qu’une note à la fois à l’aide de la commande de son intégrée. Il existe une fonction de bibliothèque externe qui utilise tous les minuteries matérielles (ce qui gâchera la série, mais elle ne sera de toute façon pas nécessaire à ce stade.) Sinon, je peux essayer de produire les tonalités en mode softare.
Si je réussis avec cela, je vais jouer au golf, mais je ne pense pas que ce sera le vainqueur final.
Code non-liquéfié
Exemple de sortie Plus l'espacement entre les lignes de texte est faible, meilleur sera l'apparence. Par conséquent, ça a l'air génial quand je suis en train de modifier le post, mais horrible dans la case grise après avoir posté. Au lieu de cela, j'ai posté une capture d'écran du moniteur série Arduino qui présente un espacement des lignes intermédiaire (et donc une qualité d'affichage).
la source
Python3 - 315 caractères
Première fois en codegolf! Ne supporte que les accords mineurs, majeurs, diminués et augmentés pour le moment.
la source
'C C# D D# E F F# G G# A A# B'.split(' ')
au lieu de votre tableau littéral pour enregistrer des octets.if('#'in a):j+=1
->if'#'in a:j+=1
= 2 caractères en moins pour chaque énoncé. Le passagey
à unerange()
expression enregistre également quelque chose. Bienvenue! (et rappelez-vous que les nouvelles lignes comptent aussi;))'C C# D D# E F F# G G# A A# B'.split()
;)y
le stockage[1,2,4,5,6]
, pourquoi ne pas simplement sauter lay
ligne 4 et la remplacer parfor i in[1,2,4,5,6]:
? Quoi qu'il en soit, bienvenue à codegolf et j'espère que vous vous amuserez ici.Python 506 (Unicode en 1 caractère) -150 (son) -150 (clavier) = 206
Pour jouer du son, il utilise
pygame.midi
. Notez que lapygame.midi.get_default_output_id()
méthode ne fonctionne pas très bien. Vous pouvez donc essayer de modifier la ligneo=Output(get_default_output_id())
eno=Output(1)
,o=Output(2)
etc. La valeur correcte est généralement comprise entre 0 et 5.Résultats
la source
J - 82 caractères
Autonome, lit depuis l'entrée de la console. Si vous avez besoin de stdin, changez la finale
1
en a3
. Ne réclamant aucun bonus, et ne couvrant que les triades.Au lieu d'une note aiguë,
C#
vous devez par exemple utiliser le nom à plat équivalentDb
. (Corriger cela gonflerait le code de plus d'un peu.) Les quatre types d'accords sont0
pour diminuer,m
pour mineur,M
pour majeur et+
pour augmenté.La logique est la suivante: nous utilisons le dernier caractère pour ajouter un décalage à la base 0-3-6, qui sélectionne le type de troisième et cinquième. Pendant ce temps, nous utilisons la note pour trouver où dans l’échelle tirer les notes. Les
;:
deux rendent la note compatible avec l'indexation dans la gamme au début, puis&.
transforment (par ) les notes extraites en une chaîne séparée par des espaces.Exemple d'utilisation:
la source
Javascript, 224 caractères
Ceci est mon premier code de golf. Je pense que cela peut être plus court, mais je ne trouve aucun octet à sauvegarder.
Supports principaux,
m
pour mineur,0
pour une diminution,+
pour augmentèrent, ou 37 octets pour plusdim
,aug
.la source
n[m]==0
peut être simplement!n[m]
. La même chose s'applique à un autre endroit. Total, vous pouvez facilement couper 6 caractères .n
string est une chaîne,n[m]==0
sera converti0
en"0"
, il est donc égal àn[m]=="0"
."0" == 0
est vrai, mais!"0"
est faux.AM
. Je peux me tromper aussi.Python (
143134 caractères)Mon premier défi de golf :), je ne sais pas si quelques octets supplémentaires peuvent être supprimés.
La notation utilisée ici est * août / + maj /, min / - dim
Je mérite un point bonus pour avoir la constante 42 dans le code: P
la source
n,q,a='A A# B C C# D D# E F F# G G#'.split(),[4,4,3,3],input();m,i=ord(a[-1])-42,n.index(a[:-1])
Python 3: 257 - 150 = 107
Juste 25 caractères trop long pour battre la solution J! Tant pis. Il y a quelques bonnes idées ici, je pense.
La saisie ressemble aux exemples, bien que vous deviez utiliser des noms nets au lieu de noms simples. (par exemple, Gb doit être F #)
La sortie est une seule octave de piano, vue d'en haut et à gauche, avec des noms de notes superposés. Devrait être juste un petit effort d'imagination.
la source
CM
, on devrait pouvoir lireC E G
...bool(R)
parR|0
?bool(R)
vaut 1 (vrai) si non vide, et 0 (faux) si vide. L'|
opérateur ne fonctionne pas avec les listes ...Scala 537 caractères - 50
la source
Haskell, 273 caractères
Résultats
la source