Sí, leíste bien el título. reproduce el sonido de pi.
Más específicamente, por cada dígito de pi en los primeros 1000, asigne una nota musical y envíe la melodía resultante a un archivo.
Básicamente, cada dígito se convierte en una nota en la escala C mayor (básicamente la escala normal). entonces 1 gira al Medio C, 2 vueltas a D4, 3 vueltas a E4, 9 vueltas a D5 y así sucesivamente.
Reglas
- Cada nota debe durar exactamente 0,5 segundos.
- La melodía debe contener los primeros 1000 dígitos de pi, incluidos los 3 iniciales.
- 1 a 7 representan C central a B4, 8 es C5, 9 es D5 y 0 es E5
- Se permiten todos los formatos de archivo compatibles, siempre que se hayan creado antes de este desafío.
- Es posible que no haya pausas en ningún lugar del archivo, incluidos el inicio y el final.
- El instrumento tocado no importa. Podría ser un piano, una onda sinusoidal, cualquier cosa, siempre y cuando el sonido correcto sea fácilmente escuchable.
- No debe recibir ninguna entrada y no producir ninguna salida, excepto el archivo. La lectura de otros archivos no está permitida.
- Las lagunas estándar están prohibidas.
Ejemplo de código matemático:
(*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];
Ejemplo de melodía que muestra los primeros 100 dígitos: http://vocaroo.com/i/s0cfEILwYb8M
Para su cordura, una tabla de tonos para cada nota y qué nota representa cada dígito:
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
fuente
fuente
4
octava octava. Además, en su tabla, ¿el dígito es el0
último (E5
)?Respuestas:
Mathematica,
10787 bytes¡Gracias a Martin Ender por guardar 20 bytes!
#&@@RealDigits[Pi,10,1000]
da la lista de los primeros 1000 dígitos de π.SoundNote[⌊12Mod[#,10,1]/7⌋-1
produce el número de tono correcto (donde 0 es C central por defecto) a partir de un dígito. LuegoSoundNote[...,.5]&/@
convierte ese nombre de tono en un objeto sonoro de duración 1/2 segundo, que seSound
reúne en un fragmento de audio real. Finalmente se"t.au"~Export~
exporta a un archivo de formato de audio Unix, principalmente porque la extensión es la más corta admitida, ¡pero también porque podemos hacer que el nombre de archivo sea una bofetada a π !Presentación previa:
fuente
Python 2, 182 bytes
`x`
Producirá31415926...20198L
. El seguimientoL
se utiliza para producir el byte del mensaje del canal final, a través de la asignación~ord(i)%29
.Emite un archivo Midi Tipo 1 de una sola pista, nombrado
p.mid
al directorio de trabajo actual.fuente
Rasguño , 530 bytes
Inspirado por la respuesta de BookOwl .
Demostración en línea . La reproducción comenzará de inmediato, presionespace para detener y restablecer. Haz clic en el gato para comenzar de nuevo.
Editar: golfed ligeramente hacia abajo. Encontré algunos consejos de golf en la wiki oficial .
Gráfico:
Utiliza la espita Rabinowitz Wagon para producir 4 dígitos a la vez.
fuente
R, 450 bytes
Utiliza el paquete
Rmpfr
para obtener la precisión correcta en los dígitos pi. Emite un.wav
archivo.Sangrado, con nuevas líneas y comentarios:
fuente
C (gcc) 572 bytes
Versión sin golf:
Explicación:
play(float freq)
La rutina toma la frecuencia como un parámetro de la nota (codificada) que desea reproducir y almacena una onda sinusoidal en un búfer.f()
, almacené las frecuencias correspondientes a las notas que van desde C4 a E5 en unnotes
matriz.pi
valor seguido de 1000 dígitos en un búfer. Para hacer esto, instalé elpi
paquete en mi máquina y solíapopen
leer el resultadopi 1000
y almacenarlo en unchar
búfer.for
bucle yswitch
llamé a laplay()
función para producir notas que corresponden a cada dígito en elpi
búfer. ,Uso:
./binary_name.o | aplay
en las distribuciones modernas de Linux, en las distribuciones más antiguas lo redirigiría a/dev/audio
fuente
switch(foo){...}
con algo comoplay(note[(foo-'1')%10])
. Además, lea los consejos para jugar golf en C