Il y a 88 touches sur un piano standard et 95 caractères ascii imprimables (codes hexadécimaux 20 à 7E):
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
('caractère' fait référence à tout caractère ASCII imprimable à partir d'ici)
Dans ce JSFiddle, j'ai profité de cela et créé une syntaxe simple qui génère des morceaux de piano à l'aide d' AudioSynth . (Si quelqu'un peut me diriger vers un ensemble liable de réel sons de notes de piano , je serai reconnaissant.)
Chaque caractère de la chaîne d'entrée () 01+-
correspond en outre à une touche de piano:
CHARACTER: ! " # $ % & ' * , . / 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~
KEY NUMBER: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
NOTE: A A# B C C# D D# E F F# G G# A A# B C C# D D# E F F# G G# A A# B C C# D D# E F F# G G# A A# B C C# D D# E F F# G G# A A# B C C# D D# E F F# G G# A A# B C C# D D# E F F# G G# A A# B C C# D D# E F F# G G# A A# B C
OCTAVE: 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 5 5 5 5 5 5 5 5 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 8
RPNPRRR
Joue donc les 7 premières notes de Mary Had a Little Lamb en utilisant les paramètres de timing prédéfinis que vous pouvez voir dans le JSFiddle.
L'espace ( ) représente un repos musical qui dure pendant un intervalle de note.
RPNPRRR PPP RUU
Joue donc les 13 premières notes de Mary Had a Little Lamb avec des restes à leur place.
Si un caractère en plus ()01
est préfixé par une séquence de 0
'et 1
' (regex [01]+
), cette séquence est lue comme un nombre binaire b , et le caractère est remplacé par b copies de lui-même. Devient 101A11 10+1-0B01C
ainsi AAAAA ++-C
parce que 101
= 5, 11
= 3, etc. (Une séquence de 0
'et 1
' à la fin de la chaîne n'a aucun effet.)
Les parenthèses appariées ( ()
) remplissent deux fonctions:
- Si leur contenu ne se termine pas par une séquence de
0
'et1
', toutes les notes sont jouées en même temps qu'un accord (qui autrement n'est pas différent d'une note). Il en(NQU)
va de même d'un accord en do mineur sur l'octave 4.
Si des notes en double sont présentes, leur son est également dupliqué. Donc(NN)
et(NNN)
sonner différemment. - Si leur contenu ne fin avec une séquence de
0
« s et1
d », cette séquence est lue comme un nombre binaire b , et les parenthèses et leur contenu sont remplacés par b copies du contenu. Donc ,(NQU11)
devient 9 notes individuelles:NQUNQUNQU
.
Détails entre parenthèses:
- L'imbrication des répliques de parenthèses (objectif 2) est correcte:
(N(QU10)11)
→(NQUQU11)
→NQUQUNQUQUNQUQU
. - L'imbrication de parenthèses non réplicatives (objectif 1) est correcte mais n'a aucun effet:
(A((+)C))
est identique à(A+C)
. - Vous pouvez également combiner les deux:
((N(QU10))11)
→(NQUQU)(NQUQU)(NQUQU)
. - Une séquence de
0
«et1
» avant les parenthèses non réplicables les répète de la même manière que les caractères individuels sont répétés. Ainsi10(NQU)
devient(NQU)(NQU)
. - Une séquence de
0
«et1
» avant de répliquer les parenthèses n'a aucun effet. (
doit toujours avoir une correspondance)
, mais pas l'inverse: par exempleN)
est valide.
Plus ( +
) et moins ( -
) augmentent et diminuent respectivement la durée des notes ou l'intervalle de temps entre les notes, selon leur contexte:
- À l' intérieur de parenthèses non réplicatives, elles augmentent ou diminuent immédiatement la variable de durée de note d'un certain nombre de millisecondes prédéfini (voir JSFiddle ). Alors ,
(++)N
va jouerN
à une durée plus longue que la normale. - En dehors des parenthèses non réplicatives, elles augmentent ou diminuent l'intervalle entre le début de la note suivante et la note qui la suit (et chaque intervalle suivant) d'un certain nombre prédéfini de millisecondes. Donc, dans
++NP
l'intervalle entre leN
etP
est plus long que d'habitude.
La durée des notes et l'intervalle de temps entre elles ne peuvent pas descendre en dessous de 0.
Défi
J'ai intentionnellement choisi () 01+-
d'être les 7 caractères spéciaux car ils peuvent être placés de manière inoffensive dans de nombreux contextes dans de nombreux langages de programmation.
Votre tâche consiste à écrire un quine en 512 octets ou moins qui produit la meilleure mélodie sonore lorsque le code lui-même est utilisé comme chaîne d'entrée dans le JSFiddle .
Vous pouvez choisir toutes les valeurs initiales (entiers non négatifs) pour les 4 paramètres d'intervalle / durée, mais votre morceau ne doit pas durer plus de 10 minutes. Vous devriez également nous dire si votre morceau sonne le mieux dans un instrument particulier.
Règles
- Seuls les onglets, les nouvelles lignes et les caractères ASCII imprimables sont autorisés dans votre code. Tout ASCII non imprimable est ignoré par le créateur de la mélodie.
- La sortie peut aller vers un fichier ou une sortie standard ou l'alternative la plus proche (par exemple, alerte JS). Il n'y a aucune entrée.
- Pas de lecture du code source. Ce doit être une vraie quine.
- La suppression de 3 caractères source contigus doit faire en sorte que le programme ne fonctionne plus comme un quine. C'est pour s'assurer que les gens n'écrivent pas une bonne chanson dans une chaîne, puis qu'ils ont une petite portion de quine pour la sortir.
- Donc , si votre programme était
MYCODE
alorsMYC
,MYE
,MDE
etODE
devrait ne pas être tout Quines (ils peuvent erreur ou quelque chose de sortie autre).
- Donc , si votre programme était
Il s'agit d'un concours de popularité, la réponse la plus votée l'emporte.
Mise à jour: dernière règle détendue.
la source
Réponses:
C
J'ai décidé que j'aimais le faible bruit de grondement généré par la chaîne,
/**/
ce qui n'est pas une coïncidence pour ouvrir et fermer un commentaire en C. Le seul autre élément intéressant ici est que34
pour un"
est remplacé par35-1
(Fin1
intentionnellement) pour éviter les accords horribles. J'ai également essayé de rendre le son final dramatique. Je l'ai vraiment fait. J'ai l'intention de le modifier plus tard pour le rendre un peu meilleur.À ma connaissance des règles, les sections commentées transmettent toujours la règle finale car leur suppression entraîne l'échec d'un quine.
la source
J
Ouais, je pense que vous pouvez deviner comment ça va se passer.
Il est difficile de faire quelque chose de cool en J sans parens, et comme vous pouvez rarement les terminer avec des 0 et des 1, la plupart des choses ressemblent à quelqu'un assis sur les moitiés hautes et basses du clavier en même temps. J'ai fait de mon mieux, je te le ferai savoir.
Voici une ligne de base géniale pour le piano, je pense. Je ne connais vraiment pas la première chose à propos de la composition, j'ai juste saisi une quine et tourné un peu les chiffres.
Et, juste pour le plaisir, jouez celui-ci en tant qu'EDM. Je l'appelle Japhex Twin .
Vous pouvez confirmer la quineiness de ces beaux extraits de code à tryj.tk .
la source
Musique Concrete avec Python
Je n'ai pas beaucoup de temps aujourd'hui mais je voulais obtenir une réponse. Le genre est une excuse pour ne pas ressembler à rien. Peut-être un effet sonore dans un jeu vidéo?
la source
C
Découpé avec des sauts de ligne à des fins de présentation uniquement; ce n'est qu'une quine (et ne répond aux exigences de longueur) que si les sauts de ligne sont supprimés.
La déclaration printf était nécessaire pour la compilation
(printf)
./*(*/
et/*)*/
ont été utilisés pour faire correspondre les parenthèses dans le code, tandis qu'un mélange de parenthèses et l'opérateur virgule ont été utilisés pour former des accords à partir desprintf
paramètres.Édition: raccourci pour s'adapter aux exigences de taille et rendre la pièce un peu plus rapide.
Cela sonne mieux au piano.
la source
Schème
Ce n'est peut-être pas particulièrement mélodique (en fait, on dirait que quelqu'un a fait tomber un cochon mort dans un baby-grand), mais au moins c'est un court morceau de musique. Il serait difficile de faire quelque chose de beaucoup plus long ou moins semblable à un cochon volant mort.
la source
Für Golfscript
Cela satisfait la lettre de la règle de non-suppression de trois lettres consécutives, mais pas l'intention, je suppose.
la source
Cobra / Lot
Techniquement pas un quine dans Batch (il lit sa propre source). C'est cependant une quine chez Cobra.
Cela sonne mieux avec le mode piano, un peu comme la musique de niveau fantôme d'un jeu vidéo de l'ère Super Mario World.
la source
Pyth
Meilleur jeu avec le quatrième réglage (quantité + et - intervalle de changement) à environ 20, reste aux valeurs par défaut. Sonne mieux au piano.
la source
Haskell
(Je ne sais pas si le nom de la variable viole la dernière règle.)
Meilleur jeu au piano avec une durée de note de 1000 millisecondes et un intervalle de notes de 250 millisecondes, avec des valeurs standard + et -.
la source