Музыкальные Quines на фортепиано ASCII

22

На стандартном пианино имеется 88 клавиш и 95 печатных символов ascii (шестнадцатеричные коды от 20 до 7E):

 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~

(«символ» относится к любому печатному символу ASCII с этого момента)

В этом JSFiddle я воспользовался этим и создал простой синтаксис, который генерирует мелодии для фортепиано с использованием AudioSynth . (Если кто-нибудь может направить меня на связываемый набор настоящих звуков фортепианной ноты, я буду благодарен.)

Каждый символ во входной строке, кроме того, () 01+-соответствует одной клавише пианино:

 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

Так RPNPRRRиграет первые 7 нот Мэри был барашек с использованием заданных параметров синхронизации вы можете увидеть в JSFiddle.

Пробел ( ) представляет музыкальный отдых, который длится один интервал нот. Так RPNPRRR PPP RUUзвучит первые 13 нот Марии «Ягненок» с остатками на своих местах.

Если какой-либо символ помимо этого ()01имеет префикс последовательности 0's и 1' (regex [01]+), эта последовательность читается как двоичное число b , и символ заменяется на b копий самого себя. Так 101A11 10+1-0B01Cстановится AAAAA ++-Cпотому, что 101= 5, 11= 3 и т. Д. (Последовательность 0's 1' и 's' в конце строки не имеет никакого эффекта.)

Соответствующие скобки ( ()) служат двум целям:

  1. Если их содержание не заканчивается последовательностью 0's' и 1's', все ноты воспроизводятся одновременно с аккордом (который в остальном не отличается от ноты). Так (NQU)что до минор 4 - до минор .
    Если присутствуют дублирующие ноты, их звук также дублируется. Так (NN)и (NNN)звучат по другому.
  2. Если их содержание делает конец с последовательностью 0«s и 1» s, эта последовательность считывается в виде двоичного числа б , и в скобках и их содержание заменяются б копии контента. Так (NQU11)становится 9 отдельных нот: NQUNQUNQU.

Детали круглых скобок:

  • Вложенные реплицирующие скобки (цель 2) - это хорошо: (N(QU10)11)(NQUQU11)NQUQUNQUQUNQUQU.
  • Вложенные неповторяющиеся скобки (цель 1) хороши, но не имеют никакого эффекта: (A((+)C))то же самое, что и (A+C).
  • Вы также можете комбинировать оба: ((N(QU10))11)(NQUQU)(NQUQU)(NQUQU).
  • Последовательность 0's' и 1's' перед неповторяющимися скобками повторяет их так же, как повторяются отдельные символы. Так 10(NQU)становится (NQU)(NQU).
  • Последовательность 0's' и 1's' перед копированием скобок не имеет никакого эффекта.
  • (всегда должен иметь соответствие ), но не наоборот: например N), допустимо.

Плюс ( +) и минус ( -) соответственно увеличивают и уменьшают продолжительность заметок или временной интервал между заметками, в зависимости от их контекста:

  • Находясь внутри неповторяющихся скобок, они немедленно увеличивают или уменьшают переменную длительности ноты на некоторое заданное количество миллисекунд (см. JSFiddle ). Так (++)Nбудет играть Nдольше, чем обычно.
  • Когда снаружи нереплицирующегося круглых скобки, они увеличивают или уменьшают интервал между началом следующей ноты и нотами после него (и каждого последующего интервала) с помощью некоторого заданного числа миллисекунд. Так что в ++NPпромежутке между Nи Pбольше, чем обычно.

Длительность нот и временной интервал между ними не могут быть ниже 0.

Вызов

Я намеренно выбрал () 01+-7 специальных символов, потому что они могут быть безобидно размещены во многих контекстах во многих языках программирования.

Ваша задача состоит в том, чтобы написать квинну в 512 байт или меньше, которая обеспечивает наилучшее звучание, когда сам код используется в качестве входной строки в JSFiddle .

Вы можете выбрать любые начальные значения (неотрицательные целые числа) для 4 параметров интервала / продолжительности, но ваша мелодия не должна длиться более 10 минут. Вы также должны сообщить нам, лучше ли звучит ваша мелодия на конкретном инструменте.

правила

  • В вашем коде разрешены только вкладки, переводы строк и printable-ASCII. Все непечатаемые ASCII игнорируются создателем мелодии.
  • Вывод может идти в файл или стандартный вывод или ближайшую альтернативу (например, предупреждение JS). Там нет ввода.
  • Нет чтения исходного кода. Должно быть, это настоящий куайн.
  • Удаление любых трех смежных исходных символов должно привести к тому, что программа больше не будет работать как квин. Это сделано для того, чтобы люди не написали хорошую песню в строке, а затем получили крошечную часть для вывода.
    • Так что, если ваша программа была MYCODEтогда MYC, MYE, MDEи ODEвсе должны быть не quines (они могут ошибки или вывести что - то еще).

Это конкурс популярности, за который проголосовал самый высокий голос.

Обновление: расслабленное последнее правило.

Кальвин Хобби
источник
3
Вы также можете сыграть в «Марию маленького ягненка» на клавиатуре телефона: 3212333 222 399 (попробуйте, все отлично).
Level River St
Есть много бесплатных звуковых шрифтов для фортепиано. Кроме того, хороший JSFiddle!
qwr
Я никогда не видел последнее правило в любом испытании раньше, я думаю, достаточно эффективно, как задумано.
Половина
@qwr Знаете ли вы какие-либо наборы всех 88 клавиш, которые могут быть напрямую связаны таким образом ? Я посмотрел немного, но не смог найти ни одного.
Увлечения Кэлвина

Ответы:

6

С

Я решил, что мне понравился низкий грохочущий шум, генерируемый строкой, /**/который, по совпадению, не является способом открытия и закрытия комментария в C. Единственный другой интересный момент здесь - это то, что 34для a "заменяется на 35-1(Завершение в 1 намеренном порядке) на избежать ужасных аккордов. Я также пытался сделать финал звучащим драматичным. Я действительно сделал. Я намерен отредактировать это позже, чтобы оно звучало немного лучше.

/**/char*p= "/**/char*p= %c%s%c; int main(){printf(p,34,p,35-1);p++;/**/}/**/";
int main(){printf(p,34,p,35-1);p++;/**/}/**/

Насколько я понимаю правила, прокомментированные разделы все еще проходят окончательное правило, потому что их удаление приводит к неудачной квине.

BrainSteel
источник
3
«Я намереваюсь отредактировать это позже, чтобы оно звучало немного лучше». Прошел почти год. Я начинаю думать, что вы не будете редактировать это позже, чтобы оно звучало лучше. : P
Алекс А.
@AlexA. Уже больше года!
wizzwizz4
5

J

Да, я думаю, вы можете догадаться, как это будет происходить.

Трудно сделать что-нибудь классное в J без паренов, и, поскольку вы редко можете заканчивать их нулями и единицами, большинство вещей звучат так, как будто кто-то сидит на высоких и низких половинах клавиатуры одновременно. Я старался изо всех сил, я тебя знаю.

Я думаю, что это классная основа для фортепиано. Я действительно не знаю ничего о композиции, я просто схватил квинну и немного перевернул числа.

(23 23,~,~i.124+-100){,'(23 23,~,~i.124+-100){,'''

И, просто для удовольствия, играйте как EDM. Я называю это Japhex Twin .

".s=:'''".s=:'',''''''''&,@(,&'''''''')@(#~>:@(=&''''''''))s'

Вы можете подтвердить quineiness этих мелких фрагментов кода на tryj.tk .

algorithmshark
источник
1
Это на самом деле может сойти за музыку. Большой! :)
Эмиль
4

Музыкальный бетон с питоном

У меня сегодня не так много времени, но я хотел получить ответ. Жанр - это оправдание тому, что ты ничего не говоришь. Может быть, звуковой эффект в видеоигре?

BFIN10=r"print('BFIN10=r\"'+BFIN10+'\"'+'\nexec(BFIN10)')"
exec(BFIN10)
qwr
источник
На самом деле звучит не так уж плохо!
Клавдиу
Каждый альбом Йоко Оно когда-либо
Уильям Барбоза
4

С

int(printf)(char*,...); (main)(){char*b=",*",i=(34),*m=("int(printf)(char*,...); (main)(){char*b="),
*z="%s%c%s%c,i=(34),*m=(%c%s%c)%sz=%c%s%c,*B=%c%s%c,*f=(%c%s%c)%s(/*)*/%s/*(*/);}//(+++fim)",*B="(f,
i,m,z),(i,z,m),(m,i),(f,b),(m,i),(m,i),(f,z,m),(m,i),(f,z,b),(m,i),(b,z),(B,i),(38,i),(29,B),(26,i),
(26,i),(B,f),(42,i),(i,m,f),B",*f=(";(printf)");(printf)(/*)*/(f,i,m,z),(i,z,m),(m,i),(f,b),(m,i),(m
,i),(f,z,m),(m,i),(f,z,b),(m,i),(b,z),(B,i),(38,i),(29,B),(26,i),(26,i),(B,f),(42,i),(i,m,f),B/*(*/)
;}//(+++fim)

Разрывается с переносами строк только в целях презентации; это только квинна (и только соответствует требованиям к длине), если переводы строк удалены.

Декларация printf была необходима для компиляции (printf). /*(*/и /*)*/использовались для сопоставления скобок в коде, в то время как сочетание скобок и оператора запятой использовалось для формирования аккордов из printfпараметров.

Редактировать: укороченный, чтобы соответствовать требованиям к размеру, а также сделать кусок быстрее.

Это звучит лучше всего на пианино.

es1024
источник
2
Мне это нравится! Все начинается медленно, но все, начиная с токена 130 и далее, сильно преследует. Вы использовали визг в своих интересах.
Увлечения Кэлвина
Это может сойти за Fantasy для оркестра! : P
Сохам Чоудхури,
2
Мне больше понравилась старая версия, но это все еще моя любимая песня здесь. Я пытаюсь дать вам награду, но по какой-то причине это не работает. См. Meta
Увлечения Кэлвина
3

Схема

Это не может быть особенно мелодичным (на самом деле это звучит так, будто кто-то бросил мертвую свинью в детскую бабушку), но, по крайней мере, это короткий музыкальный фрагмент. Было бы трудно сделать что-нибудь намного более длинное или менее похожее на летучую свинью.

((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))
Penguino
источник
1
Ой, мои уши ....
Клавдиу
2

Für Golfscript

":H;GHGHCFDA;[34]H+2*{-};":H;GHGHCFDA;[34]H+2*{-};

Это удовлетворяет букве правила «не три последовательных удаления букв», хотя и не намерение, я понимаю.

Клаудиу
источник
1

Кобра / Партия

@number float# 2>nul||@echo off
/# 2>nul
for /f "delims=" %%a in (%0) do echo %%a
#/# 2>nul
class P# 2>nul
    def main# 2>nul
        r="# 2>nul"# 2>nul
        s="@number float{3}||@echo off{2}/{3}{2}for /f {1}delims={1} %%a in (%0) do echo %%a{2}#/{3}{2}class P{3}{2}    def main{3}{2}      r={1}{3}{1}{3}{2}       s={1}{0}{1}{3}{2}       Console.write(s,s,34to char,10to char){3}"# 2>nul
        Console.write(s,s,34to char,10to char,r)# 2>nul

Технически это не quine в Batch (он читает свой собственный источник). Это однако Quine в Кобре.

Лучше всего звучит в режиме пианино, что-то вроде музыки на уровне призраков из видеоигры эпохи Супер Марио.

Οurous
источник
1

Pyth

J"+K+N+J+N+\K+N+K+NJ"K"J"+K+N+J+N+\K+N+K+NJ

Лучше всего играть с четвертой настройкой (сумма + и - интервал изменения) около 20, остальные по умолчанию. Лучше всего звучит на пианино.

isaacg
источник
0

Haskell

(Я не уверен, нарушает ли имя переменной последнее правило.)

main=putStr$  jjlmjiebab ++ {--} show jjlmjiebab;jjlmjiebab = "main=putStr$  jjlmjiebab ++ {--} show jjlmjiebab;jjlmjiebab = "

Лучше всего играть на фортепиано с длительностью ноты 1000 миллисекунд и интервалом ноты 250 миллисекунд, со стандартными значениями + и -.

archaephyrryx
источник