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

4octava 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⌋-1produce 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 seSoundreú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 seguimientoLse 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.midal 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
Rmpfrpara obtener la precisión correcta en los dígitos pi. Emite un.wavarchivo.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 unnotesmatriz.pivalor seguido de 1000 dígitos en un búfer. Para hacer esto, instalé elpipaquete en mi máquina y solíapopenleer el resultadopi 1000y almacenarlo en uncharbúfer.forbucle yswitchllamé a laplay()función para producir notas que corresponden a cada dígito en elpibúfer. ,Uso:
./binary_name.o | aplayen las distribuciones modernas de Linux, en las distribuciones más antiguas lo redirigiría a/dev/audiofuente
switch(foo){...}con algo comoplay(note[(foo-'1')%10]). Además, lea los consejos para jugar golf en C