Музичні квінти на фортепіано 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 нот Mary of Little Little Lamb, використовуючи задані параметри часу, які ви можете побачити в JSFiddle.

Пробіл ( ) являє собою музичний відпочинок, який триває один інтервал нот. Тож RPNPRRR PPP RUUграє перші 13 нот Мері Мало ягняти з упорами на своїх місцях.

Якщо будь-який символ крім ()01префіксується послідовністю 0's і 1s (regex [01]+), ця послідовність читається як двійкове число b , і символ замінюється b копіями самого себе. Так 101A11 10+1-0B01Cстає AAAAA ++-Cтому, що 101= 5, 11= 3 і т. Д. (Послідовність 01' 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).
  • Послідовність 01' s перед неповторюваними дужками повторює їх так само, як повторюються окремі символи. Так 10(NQU)стає (NQU)(NQU).
  • Послідовність 01' s перед реплікацією дужок не впливає.
  • (завжди має відповідати ), але не навпаки: наприклад, N)це дійсно.

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

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

Тривалість нотаток та часовий інтервал між ними не можуть опускатися нижче 0.

Виклик

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

Ваше завдання - написати quine в 512 байт або менше, що створює найкращу мелодію звучання, коли сам код використовується як вхідний рядок у JSFiddle .

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

Правила

  • У вашому коді дозволені лише вкладки, нові рядки та ASCII для друку. Створювач мелодії ігнорує всю ASCII, що не роздруковується.
  • Вихід може перейти у файл або stdout або найближчу альтернативу (наприклад, JS-попередження). Введення немає.
  • Немає читання вихідного коду. Це повинно бути справжньою королевою.
  • Видалення будь-яких 3 суміжних символів-джерела повинно змусити програму більше не функціонувати як ланцюжок. Це робиться для того, щоб люди не писали гарну пісню в рядку, а потім мали крихітну частину квітки, щоб вивести її.
    • Так що, якщо ваша програма була MYCODEтоді MYC, MYE, MDEі ODEвсі повинні бути не quines (вони можуть помилки або вивести що - то ще).

Це конкурс популярності, виграє найвища відповідь.

Оновлення: розслаблене останнє правило.


3
Ви можете пограти в Mary Had a Little Lamb на клавіатурі телефону: 3212333 222 399 (спробуйте, вона виходить ідеально.)
Level River St

Існує безліч безкоштовних звукових шрифтів для фортепіано. Також приємний JSFiddle!
qwr

Я ніколи не бачив останнього правила в жодному виклику раніше, досить ефективного, як задумано, я думаю.
justhalf

@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++;/**/}/**/

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


3
"Я маю намір відредагувати це пізніше, щоб це звучало трохи краще". Минув майже рік. Я починаю вважати, що ви не будете редагувати це пізніше, щоб покращити звучання. : P
Алекс А.

@AlexA. Вже понад рік!
wizzwizz4

5

J

Так, я думаю, ви можете здогадатися, як це піде.

Важко зробити що-небудь круте в J без паренів, і оскільки ви рідко можете закінчити їх з 0 і 1, більшість речей звучать так, як хтось сидить на високій і низькій половині клавіатури одночасно. Я постарався, я знаю, що ви знаєте.

Ось гарна базова лінія для фортепіано, я думаю. Я насправді не знаю першої речі про склад, я просто схопив королеву і трохи перекрутив цифри.

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

І, просто для розваги, грайте на цьому як EDM. Я називаю це Джафекс Близнюком .

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

Ви можете підтвердити quineiness цих дрібних фрагментів коду на tryj.tk .


1
Це насправді може перейти під музику. Чудово! :)
Еміль

4

Музичний бетон з Python

Сьогодні у мене мало часу, але я хотів отримати відповідь. Жанр - це привід для того, щоб не звучати як щось. Може бути, звуковий ефект у відеоігри?

BFIN10=r"print('BFIN10=r\"'+BFIN10+'\"'+'\nexec(BFIN10)')"
exec(BFIN10)

Насправді це не дуже погано звучить!
Клавдіу

Кожен альбом Yoko Ono коли-небудь
Вільям Барбоса

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параметрів.

Редагування: Скорочене, щоб відповідати вимогам до розміру, а також зробити деталь трохи швидшою.

Це найкраще звучить на фортепіано.


2
Мені це подобається! Це починається наче повільно, але все від лексеми 130 і далі сильно переслідує. Ви використали скрипкість на свою користь.
Захоплення Кальвіна

Цей міг би передати Фантазію для оркестру! : P
Soham Chowdhury

2
Мені подобалася стара версія краще, але це все одно моя улюблена пісня тут. Я намагаюся дати тобі винагороду, але чомусь це не працює. Дивіться мета: meta.codegolf.stackexchange.com/questions/2263/…
Хобі Кальвіна

3

Схема

Це може бути не особливо мелодійним (насправді це звучить так, ніби хтось кинув мертву свиню у немовляти), але принаймні це короткий музичний твір. Було б важко зробити щось набагато довше або менш мертве, що летить-свиня, як у схемі.

((lambda (x) (list x (list 'quote x))) '(lambda (x) (list x (list 'quote x))))

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

Технічно це не лайка в Batch (вона читає, що це власне джерело). Однак це котя в Кобри.

Це найкраще звучить у режимі фортепіано, дещо схоже на музику рівня привидів із відеоігри Супер Маріо світової епохи.


1

Піт

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

Найкраще грати з четвертим налаштуванням (сума + та - інтервал зміни) близько 20, відпочинок за замовчуванням. Найкраще звучить на фортепіано.


0

Хаскелл

(Я не впевнений, чи порушує ім'я змінної останнє правило.)

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

Найкраще відтворюється на фортепіано з тривалістю ноти 1000 мілісекунд та інтервалом нот 250 мілісекунд, зі стандартними значеннями + та -.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.