Existem 88 teclas em um piano padrão e 95 caracteres ascii imprimíveis (códigos hexadecimais 20 a 7E):
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
('caractere' refere-se a qualquer caractere ASCII imprimível a partir de agora)
Em deste jsFiddle eu tomei vantagem disso e fez uma sintaxe simples que gera melodias de piano usando AudioSynth . (Se alguém puder me direcionar para um conjunto vinculável de sons reais de notas de piano, ficarei grato.)
Cada caractere na sequência de entrada () 01+-
corresponde a uma tecla do 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
Assim, RPNPRRR
reproduz os primeiros 7 notas de Mary Had a Little Lamb utilizando os parâmetros predefinidos que você pode ver na jsFiddle.
Espaço ( ) representa um descanso musical que dura um intervalo de uma nota.
RPNPRRR PPP RUU
Toca assim as primeiras 13 notas de Mary Had a Little Lamb com descansos em seus devidos lugares.
Se qualquer caractere adicional ()01
for prefixado por uma sequência de 0
's 1
' (regex [01]+
), essa sequência será lida como um número binário b , e o caractere será substituído por b cópias de si mesmo. Assim, 101A11 10+1-0B01C
torna-se AAAAA ++-C
pois 101
= 5, 11
= 3, etc. (Uma sequência de 0
's e 1
' s no final da cadeia de caracteres tem nenhum efeito).
Parênteses correspondentes ( ()
) têm duas finalidades:
- Se o conteúdo deles não terminar com uma sequência de
0
'e1
', todas as notas serão tocadas ao mesmo tempo que um acorde (que, caso contrário, não será diferente de uma nota). O mesmo(NQU)
ocorre com um acorde C menor na oitava 4.
Se houver notas duplicadas, o som também será duplicado. Então,(NN)
e(NNN)
soa diferente. - Se o seu conteúdo faz final com uma sequência de
0
's e1
' s, essa sequência é lido como um número binário b , e os parênteses e o seu conteúdo são substituídos com b cópias do conteúdo. Assim,(NQU11)
torna-se 9 notas individuais:NQUNQUNQU
.
Detalhes dos parênteses:
- Aninhar parênteses de replicação (finalidade 2) é bom:
(N(QU10)11)
→(NQUQU11)
→NQUQUNQUQUNQUQU
. - Aninhar parênteses não replicantes (finalidade 1) é bom, mas não tem efeito:
(A((+)C))
é o mesmo que(A+C)
. - Você também pode combinar os dois:
((N(QU10))11)
→(NQUQU)(NQUQU)(NQUQU)
. - Uma sequência de
0
'e1
' antes de parênteses não replicantes os repete da mesma maneira que caracteres individuais são repetidos. Assim10(NQU)
se torna(NQU)(NQU)
. - Uma sequência de
0
'e1
' antes de replicar parênteses não tem efeito. (
deve sempre ter uma correspondência)
, mas não vice-versa: por exemplo,N)
é válido.
Mais ( +
) e menos ( -
) aumentam e diminuem respectivamente a duração das notas ou o intervalo de tempo entre as notas, dependendo do seu contexto:
- Quando no interior de nao reprodução parênteses, eles imediatamente aumentar ou diminuir a duração variável nota por algum número pré-definido de milissegundos (ver jsFiddle ). Então,
(++)N
vai jogarN
em uma duração mais longa do que o normal. - Quando estão fora dos parênteses não replicantes, eles aumentam ou diminuem o intervalo entre o início da próxima nota e a nota após (e cada intervalo subsequente) em um número predefinido de milissegundos. Portanto, no
++NP
intervalo entreN
eP
é maior que o normal.
A duração das notas e o intervalo de tempo entre elas não podem cair abaixo de 0.
Desafio
Eu escolhi intencionalmente () 01+-
os 7 caracteres especiais porque eles podem ser colocados inocentemente em muitos contextos em muitas linguagens de programação.
Sua tarefa é escrever um quine em 512 bytes ou menos que produza a melhor melodia quando o próprio código é usado como a string de entrada no JSFiddle .
Você pode escolher qualquer valor inicial (números inteiros não negativos) para os 4 parâmetros de intervalo / duração, mas sua música não deve durar mais que 10 minutos. Você também deve nos dizer se a sua música soa melhor em um instrumento específico.
Regras
- Somente guias, novas linhas e ASCII imprimível são permitidas no seu código. Todo ASCII não imprimível é ignorado pelo criador da melodia.
- A saída pode ir para um arquivo ou stdout ou a alternativa mais próxima (por exemplo, alerta JS). Não há entrada.
- Nenhuma leitura do código fonte. Deve ser uma verdadeira solução.
- A remoção de quaisquer três caracteres de origem contíguos deve fazer com que o programa não funcione mais como um quine. Isso é para garantir que as pessoas não escrevam uma boa música em uma string e que tenham uma pequena porção de quine para produzi-la.
- Então, se o seu programa foi
MYCODE
, em seguidaMYC
,MYE
,MDE
eODE
todos devem não ser quines (eles podem erro ou saída de qualquer outra coisa).
- Então, se o seu programa foi
Este é um concurso de popularidade, com a resposta mais votada.
Atualização: última regra relaxada.
fonte
Respostas:
C
Decidi que gostei do baixo ruído estridente gerado pela string,
/**/
que não é por acaso o caminho para abrir e fechar um comentário em C. A única outra parte interessante aqui é que34
para a"
é substituído por35-1
(Terminando1
intencionalmente) para evite acordes terríveis. Eu também tentei fazer o final parecer dramático. Eu realmente fiz. Pretendo editá-lo posteriormente para torná-lo um pouco melhor.Para meu entendimento das regras, as seções comentadas ainda passam a regra final porque sua remoção resulta em uma falha na solução.
fonte
J
Sim, acho que você pode adivinhar como isso vai acontecer.
É difícil fazer algo legal em J sem parênteses, e como você raramente pode terminá-los com 0s e 1s, a maioria das coisas soa como alguém sentado nas metades alta e baixa do teclado ao mesmo tempo. Eu tentei o meu melhor, você vai saber.
Aqui está uma linha de base descolada para piano, eu acho. Eu realmente não sei a primeira coisa sobre composição, eu apenas peguei um quine e girei os números um pouco.
E, apenas por diversão, jogue este como EDM. Eu chamo de Japhex Twin .
Você pode confirmar o quineiness desses finos trechos de código em tryj.tk .
fonte
Musique Concreto com Python
Hoje não tenho muito tempo, mas queria obter uma resposta. O gênero é uma desculpa para não parecer nada. Talvez um efeito sonoro em um videogame?
fonte
C
Dividido com quebras de linha apenas para fins de apresentação; isso é apenas um quine (e só atende aos requisitos de comprimento) se novas linhas forem removidas.
A declaração printf foi necessária para compilar
(printf)
./*(*/
e/*)*/
foram usados para combinar parênteses no código, enquanto uma mistura de parênteses e o operador de vírgula foram usados para formar acordes a partir dosprintf
parâmetros.Editar: Encurtado para atender aos requisitos de tamanho e tornar a peça um pouco mais rápida.
Isso soa melhor no piano.
fonte
Esquema
Isso pode não ser particularmente melódico (na verdade, parece que alguém jogou um porco morto em um bebê grande), mas pelo menos é uma peça curta de música. Seria difícil criar algo muito mais longo ou menos no estilo de porco voador morto.
fonte
Para Golfscript
Isso satisfaz a letra da regra de não remoção de três cartas consecutivas, embora não seja a intenção, pelo que entendi.
fonte
Cobra / lote
Tecnicamente, não é um problema no Lote (ele lê sua própria fonte). No entanto, é um problema em Cobra.
Soa melhor com o modo piano, um pouco como a música no nível fantasma de um videogame da era Super Mario World.
fonte
Pyth
Melhor reproduzido com a quarta configuração (quantidade + e - intervalo de mudança) em torno de 20, permanecendo nos padrões. Soa melhor no piano.
fonte
Haskell
(Não tenho certeza se o nome da variável viola a última regra.)
Melhor tocada no piano com duração de 1000 milissegundos e intervalo de 250 milissegundos, com valores padrão + e -.
fonte