Oui, vous avez bien lu le titre. jouer le son de pi.
Plus spécifiquement, pour chaque chiffre de pi dans les 1000 premiers, mappez-le sur une note de musique et sortez la mélodie résultante dans un fichier.
Fondamentalement, chaque chiffre se transforme en une note sur l'échelle de do majeur (essentiellement l'échelle normale). donc 1 tour au milieu C, 2 tours au D4, 3 tours au E4, 9 tours au D5 et ainsi de suite.
Règles
- Chaque note doit durer exactement 0,5 seconde.
- La mélodie doit contenir les 1000 premiers chiffres de pi, y compris les 3 premiers.
- 1 à 7 représente le milieu C à B4, 8 est C5, 9 est D5 et 0 est E5
- Tous les formats de fichiers bien pris en charge sont autorisés, tant qu'ils ont été créés avant ce défi.
- Il ne peut y avoir de pause nulle part dans le fichier, y compris le début et la fin.
- L'instrument joué n'a pas d'importance. Ce pourrait être un piano, une onde sinusoïdale, n'importe quoi vraiment, tant que le son correct est facilement audible.
- Il ne doit prendre aucune entrée et ne produire aucune sortie à l'exception du fichier. La lecture à partir d'autres fichiers n'est pas autorisée.
- Les failles standard sont interdites.
Exemple de code mathématique:
(*please forgive me for this horrible, horrible mess of code*)
digits = RealDigits[Pi, 10, 1000][[1]] /. {0 -> 10};
weights = {0, 2, 4, 5, 7, 9, 11, 12, 14, 16};
melody = {};
For[i = 1, i < 1001, i++, melody = {melody , Sound[SoundNote[weights[[digits[[i]]]], 0.5]]}]
final = Sound[Flatten[melody]];
Export["C:\\Mathematica Shenanigans\\pi.wav", final];
Exemple de mélodie montrant les 100 premiers chiffres: http://vocaroo.com/i/s0cfEILwYb8M
Pour votre santé mentale, un tableau des hauteurs pour chaque note et quelle note chaque chiffre représente:
Digit 1: C: 261.63 Hz
Digit 2: D: 293.66 Hz
Digit 3: E: 329.63 Hz
Digit 4: F: 349.23 Hz
Digit 5: G: 392.00 Hz
Digit 6: A: 440.00 Hz
Digit 7: B: 493.88 Hz
Digit 8: C5: 523.25 Hz
Digit 9: D5: 587.33 Hz
Digit 0: E5: 659.25 Hz
code-golf
kolmogorov-complexity
pi
audio
sagiksp
la source
la source
4
-ième octave. De plus, dans votre tableau, le chiffre0
vient-il en dernier (E5
)?Réponses:
Mathematica,
10787 octetsMerci à Martin Ender d'avoir économisé 20 octets!
#&@@RealDigits[Pi,10,1000]
donne la liste des 1000 premiers chiffres de π.SoundNote[⌊12Mod[#,10,1]/7⌋-1
produit le numéro de hauteur correct (où 0 est le milieu C par défaut) à partir d'un chiffre.SoundNote[...,.5]&/@
Transforme ensuite ce nom de hauteur en un objet sonore d'une durée de 1/2 seconde, qui seSound
rassemble en un véritable extrait audio. Enfin,"t.au"~Export~
exporte vers un fichier au format audio Unix, principalement parce que l'extension est la plus courte prise en charge, mais aussi parce que nous arrivons à faire du nom de fichier une gifle en face à π !Soumission précédente:
la source
Python 2, 182 octets
`x`
va produire31415926...20198L
. La finL
est utilisée pour produire l'octet de message de canal final, via le mappage~ord(i)%29
.Génère un fichier Midi Type 1 à piste unique, nommé
p.mid
dans le répertoire de travail actuel.la source
Scratch , 530 octets
Inspiré par la réponse de BookOwl .
Démonstration en ligne . La lecture commencera immédiatement, appuyez sur spacepour arrêter et réinitialiser. Cliquez sur le chat pour recommencer.
Edit: légèrement golfé. J'ai trouvé quelques astuces de golf sur le wiki officiel .
Graphique:
Utilise l'embout Rabinowitz Wagon pour produire 4 chiffres à la fois.
la source
R, 450 octets
Utilise le package
Rmpfr
pour obtenir la précision correcte sur les chiffres pi. Sort un.wav
fichier.En retrait, avec de nouvelles lignes et commentaires:
la source
C (gcc) 572 octets
Version non golfée:
Explication:
play(float freq)
la routine prend la fréquence comme paramètre de la note (codée en dur) que vous voulez jouer et stocke une onde sinusoïdale dans un tampon.f()
, j'ai stocké les fréquences correspondant aux notes allant de C4 à E5 dans unnotes
tableau.pi
valeur suivie de 1000 chiffres dans un tampon.Pour ce faire, j'ai installé lepi
package sur ma machine, et utilisépopen
pour lire la sortie depi 1000
et le stocker dans unchar
tampon.for
boucle,switch
j'ai appelé laplay()
fonction pour produire des notes qui correspondent à chaque chiffre dupi
tampon. ,Utilisation:
./binary_name.o | aplay
sur les distributions Linux modernes, sur les distributions plus anciennes, vous le redirigeriez vers/dev/audio
la source
switch(foo){...}
par quelque chose commeplay(note[(foo-'1')%10])
. Lisez également les conseils pour jouer au golf en C