Hay 88 teclas en un piano estándar y 95 caracteres ascii imprimibles (códigos hexadecimales 20 a 7E):
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
('carácter' se refiere a cualquier carácter ASCII imprimible de aquí en adelante)
En este JSFiddle , aproveché eso e hice una sintaxis simple que genera melodías de piano usando AudioSynth . (Si alguien puede dirigirme a un conjunto enlazable de sonidos de notas de piano reales , lo agradeceré).
Cada carácter en la cadena de entrada además () 01+-
corresponde a una tecla 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
Entonces RPNPRRR
toca las primeras 7 notas de Mary Had a Little Lamb usando los parámetros de tiempo preestablecidos que puedes ver en el JSFiddle.
El espacio ( ) representa un descanso musical que dura un intervalo de nota. Entonces
RPNPRRR PPP RUU
toca las primeras 13 notas de Mary Had a Little Lamb con restos en sus lugares apropiados.
Si cualquier carácter además ()01
está prefijado por una secuencia de 0
'sy 1
' s (expresión regular [01]+
), esa secuencia se lee como un número binario b , y el carácter se reemplaza con b copias de sí mismo. Entonces se 101A11 10+1-0B01C
vuelve AAAAA ++-C
porque 101
= 5, 11
= 3, etc. (Una secuencia de 0
'sy 1
' s al final de la cadena no tiene ningún efecto).
Los paréntesis coincidentes ( ()
) tienen dos propósitos:
- Si su contenido no termina con una secuencia de
0
'sy1
', todas las notas se tocan al mismo tiempo que un acorde (que de lo contrario no es diferente a una nota). Entonces,(NQU)
es un acorde de Do menor en la octava 4.
Si hay notas duplicadas, su sonido también se duplica. Así(NN)
y(NNN)
suena diferente. - Si su contenido hace extremo con una secuencia de
0
's y1
' s, esa secuencia se lee como un número binario b , y los paréntesis y su contenido son reemplazados con b copias del contenido. Así(NQU11)
se convierte en 9 notas individuales:NQUNQUNQU
.
Detalles de paréntesis:
- Anidar paréntesis de replicación (propósito 2) está bien:
(N(QU10)11)
→(NQUQU11)
→NQUQUNQUQUNQUQU
. - Anidar paréntesis no replicantes (propósito 1) está bien pero no tiene ningún efecto:
(A((+)C))
es lo mismo que(A+C)
. - También puede combinar ambos:
((N(QU10))11)
→(NQUQU)(NQUQU)(NQUQU)
. - Una secuencia de
0
'sy1
' antes de los paréntesis no replicantes los repite de la misma manera que se repiten los caracteres individuales. Así se10(NQU)
convierte(NQU)(NQU)
. - Una secuencia de
0
'sy1
' antes de replicar paréntesis no tiene ningún efecto. (
siempre debe tener una coincidencia)
, pero no al revés: por ejemplo,N)
es válido.
Más ( +
) y menos ( -
) aumentan y disminuyen respectivamente la duración de las notas o el intervalo de tiempo entre las notas, según su contexto:
- Cuando están dentro de paréntesis que no se replican, aumentan o disminuyen inmediatamente la variable de duración de la nota en un número predeterminado de milisegundos (ver JSFiddle ). Por
(++)N
lo tanto , jugaráN
a una duración más larga de lo normal. - Cuando se encuentran fuera del paréntesis no replicativo, aumentan o disminuyen el intervalo entre el inicio de la siguiente nota y la nota siguiente (y cada intervalo posterior) en un número predeterminado de milisegundos. Entonces, en
++NP
el intervalo entre elN
yP
es más largo de lo habitual.
La duración de las notas y el intervalo de tiempo entre ellas no puede caer por debajo de 0.
Reto
Elegí intencionalmente () 01+-
ser los 7 caracteres especiales porque se pueden colocar de forma inocuo en muchos contextos en muchos lenguajes de programación.
Su tarea es escribir una quine en 512 bytes o menos que produzca la mejor melodía de sonido cuando el código en sí se utiliza como la cadena de entrada en el JSFiddle .
Puede elegir cualquier valor inicial (enteros no negativos) para los 4 parámetros de intervalo / duración, pero su melodía no debe durar más de 10 minutos. También debe decirnos si su melodía suena mejor en un instrumento en particular.
Reglas
- Solo se permiten pestañas, líneas nuevas y ASCII imprimible en su código. El creador de melodías ignora todos los ASCII no imprimibles.
- La salida puede ir a un archivo o stdout o la alternativa más cercana (por ejemplo, alerta JS). No hay entrada
- Sin lectura del código fuente. Debe ser una verdadera quine.
- La eliminación de los 3 caracteres de origen contiguos debe hacer que el programa ya no funcione como una quine. Esto es para garantizar que las personas no escriban una buena canción en una cadena y luego tengan una pequeña porción de quine para emitirla.
- Así que si su programa era
MYCODE
entoncesMYC
,MYE
,MDE
, yODE
todos deben ser quines no (pueden error o una salida de otra cosa).
- Así que si su programa era
Este es un concurso de popularidad, gana la respuesta más votada.
Actualización: última regla relajada.
fuente
Respuestas:
do
Decidí que me gustaba el bajo ruido retumbante generado por la cadena,
/**/
que no es casualidad la forma de abrir y cerrar un comentario en C. El único otro aspecto interesante aquí es que34
para un"
se reemplaza por35-1
(Terminando1
intencionalmente) para evita acordes horribles. También intenté hacer que el final sonara dramático. Realmente lo hice. Tengo la intención de editar esto más tarde para que suene un poco mejor.A mi entender de las reglas, las secciones comentadas aún pasan la regla final porque su eliminación da como resultado una falla fallida.
fuente
J
Sí, creo que puedes adivinar cómo va a ir esto.
Es difícil hacer algo genial en J sin parens, y dado que rara vez puedes terminar con 0s y 1s, la mayoría de las cosas suenan como alguien sentado en las mitades altas y bajas del teclado al mismo tiempo. Hice mi mejor esfuerzo, quiero que lo sepas.
Aquí hay una línea de base funky para piano, creo. Realmente no sé lo primero sobre la composición, simplemente agarré una quine y giré un poco los números.
Y, solo por diversión, juega este como EDM. Yo lo llamo Japhex Twin .
Se puede confirmar la quineiness de estos fragmentos finos de código en tryj.tk .
fuente
Musique Hormigón con Pitón
Hoy no tengo mucho tiempo, pero quería obtener una respuesta. El género es una excusa para no sonar a nada. ¿Quizás un efecto de sonido en un videojuego?
fuente
do
Romper con saltos de línea solo para fines de presentación; esto es solo una quine (y solo cumple con los requisitos de longitud) si se eliminan las nuevas líneas.
La declaración printf era necesaria para compilar
(printf)
./*(*/
y/*)*/
se usaron para hacer coincidir los paréntesis en el código, mientras que una combinación de paréntesis y el operador de coma se usaron para formar acordes a partir de losprintf
parámetros.Editar: acortado para adaptarse a los requisitos de tamaño, así como para que la pieza vaya un poco más rápido.
Esto suena mejor en el piano.
fuente
Esquema
Esto puede no ser particularmente melódico (en realidad, parece que alguien dejó caer un cerdo muerto en un baby-grand), pero al menos es una pequeña pieza musical. Sería difícil hacer algo mucho más largo o menos esqueleto como un cerdo volador muerto.
fuente
Für Golfscript
Esto satisface la letra de la regla de eliminación de tres letras consecutivas, aunque no la intención, entiendo.
fuente
Cobra / Lote
Técnicamente no es una quine en Batch (lee su propia fuente). Sin embargo, es una quine en Cobra.
Suena mejor con el modo de piano, algo así como la música de nivel fantasma de un videojuego de la era mundial Super Mario.
fuente
Pyth
Se juega mejor con el cuarto ajuste (cantidad + y - intervalo de cambio) alrededor de 20, descansa en los valores predeterminados. Suena mejor en el piano.
fuente
Haskell
(No estoy seguro de si el nombre de la variable viola la última regla).
Se toca mejor en piano con una duración de nota de 1000 milisegundos y un intervalo de nota de 250 milisegundos, con valores estándar + y -.
fuente