Quiny muzyczne na fortepianie ASCII


22

Na standardowym pianinie jest 88 klawiszy i 95 znaków ascii do wydrukowania (kody szesnastkowe od 20 do 7E):

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

(„znak” odnosi się do dowolnego znaku ASCII do wydruku odtąd)

W tym JSFiddle skorzystałem z tego i stworzyłem prostą składnię, która generuje melodie fortepianowe przy użyciu AudioSynth . (Jeśli ktoś może skierować mnie do możliwego do połączenia zestawu prawdziwych dźwięków fortepianu, będę wdzięczny).

Oprócz każdego znaku w ciągu wejściowym () 01+-odpowiada jeden klawisz fortepianu:

 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

RPNPRRROdtwarza więc pierwsze 7 nut Mary Had a Little Lamb przy użyciu wstępnie ustawionych parametrów taktowania, które można zobaczyć w JSFiddle.

Spacja ( ) reprezentuje pauzę muzyczną, która trwa jeden interwał nut. Tak więc RPNPRRR PPP RUUgra 13 pierwszych nut Mary Had a Little Lamb z odpoczynkami w odpowiednich miejscach.

Jeśli jakikolwiek inny znak ()01jest poprzedzony sekwencją 0„i 1” (regex [01]+), sekwencja ta jest odczytywana jako liczba binarna b , a znak jest zastępowany przez b jego kopii. 101A11 10+1-0B01CStaje się tak, AAAAA ++-Cponieważ 101= 5, 11= 3 itd. (Sekwencja 0„i 1” na końcu ciągu nie ma żadnego efektu.)

Dopasowane nawiasy ( ()) służą dwóm celom:

  1. Jeśli ich treść nie kończy się sekwencją 0„i 1”, wszystkie nuty są odtwarzane w tym samym czasie co akord (który inaczej nie różni się niczym od nuty). Podobnie (NQU)jest akord c-moll w oktawie 4.
    Jeśli występują zduplikowane nuty, ich dźwięk również jest powielany. Więc (NN)i (NNN)dźwięk inaczej.
  2. Jeżeli zawartość nie koniec z serią 0„s i 1” s, że sekwencja jest odczytywane jako liczba binarna b i nawiasów i ich treści są zastępowane b kopii zawartości. Tak więc (NQU11)staje się 9 poszczególne nuty: NQUNQUNQU.

Szczegóły nawiasów:

  • Zagnieżdżanie nawiasów replikacyjnych (cel 2) jest w porządku: (N(QU10)11)(NQUQU11)NQUQUNQUQUNQUQU.
  • Zagnieżdżanie niereplikujących się nawiasów (cel 1) jest w porządku, ale nie ma efektu: (A((+)C))jest taki sam jak (A+C).
  • Możesz także łączyć oba: ((N(QU10))11)(NQUQU)(NQUQU)(NQUQU).
  • Sekwencja 0„i 1” przed niereplikującymi się nawiasami powtarza je w taki sam sposób, jak powtarzane są poszczególne znaki. Tak się 10(NQU)staje (NQU)(NQU).
  • Sekwencja 0„i 1” przed replikacją nawiasów nie ma żadnego efektu.
  • (musi zawsze mieć pasujące ), ale nie odwrotnie: np. N)jest poprawny.

Plus ( +) i minus ( -) odpowiednio zwiększają i zmniejszają czas trwania nut lub odstęp czasu między nutami, w zależności od ich kontekstu:

  • Gdy znajdują się w nawiasach niereplikujących się , natychmiast zwiększają lub zmniejszają zmienną czas trwania nuty o określoną liczbę milisekund (patrz JSFiddle ). (++)NBędzie więc grał Ndłużej niż zwykle.
  • Gdy znajdują się poza niereplikującymi się nawiasami, zwiększają lub zmniejszają odstęp między początkiem następnej nuty i nuty po niej (i każdym kolejnym interwale) o określoną liczbę milisekund. Więc w ++NPodstępie między Ni Pjest dłuższy niż zwykle.

Czas trwania notatek i odstęp czasu między nimi nie mogą spaść poniżej 0.

Wyzwanie

Celowo wybrałem () 01+-7 znaków specjalnych, ponieważ mogą być one niewinnie umieszczane w wielu kontekstach w wielu językach programowania.

Twoim zadaniem jest napisanie quinu w 512 bajtach lub mniej, który zapewnia najlepszą melodię, gdy sam kod jest używany jako ciąg wejściowy w JSFiddle .

Możesz wybrać dowolne wartości początkowe (nieujemne liczby całkowite) dla 4 parametrów przedziału / czasu trwania, ale melodia nie może trwać dłużej niż 10 minut. Powinieneś także powiedzieć nam, czy Twoja melodia najlepiej brzmi w danym instrumencie.

Zasady

  • W kodzie dozwolone są tylko tabulatory, znaki nowego wiersza i ASCII do wydruku. Wszystkie niedrukowalne ASCII są ignorowane przez twórcę melodii.
  • Dane wyjściowe mogą przejść do pliku lub standardowego wyjścia lub najbliższej alternatywy (np. Alert JS). Brak danych wejściowych.
  • Brak odczytu kodu źródłowego. To musi być prawdziwy quine.
  • Usunięcie 3 ciągłych znaków źródłowych musi spowodować, że program przestanie działać jako quine. Ma to na celu zapewnienie, że ludzie nie piszą dobrej piosenki w łańcuchu, a następnie mają niewielką część quine do jej wydania.
    • Więc jeśli program był MYCODEwtedy MYC, MYE, MDE, i ODEpowinny być quines (mogą błędu lub coś innego wyjścia).

To konkurs popularności, wygrywa najlepiej głosowana odpowiedź.

Aktualizacja: Zrelaksowana ostatnia reguła.


3
Możesz także zagrać w Mary Had a Little Lamb na klawiaturze telefonu: 3212333 222 399 (spróbuj, wyszło idealnie.)
Level River St

Istnieje wiele bezpłatnych dźwięków fortepianowych. Również miłe JSFiddle!
qwr

Nigdy wcześniej nie widziałem ostatniej reguły w żadnym wyzwaniu, jak sądzę, dość skutecznej zgodnie z zamierzeniami.
justhalf

@qwr Czy znasz jakieś zestawy wszystkich 88 kluczy, które można bezpośrednio połączyć w ten sposób ? Spojrzałem trochę, ale nie mogłem znaleźć.
Calvin's Hobbies

Odpowiedzi:


6

do

Uznałem, że podoba mi się niski hałas generowany przez ciąg znaków, /**/który nie jest przypadkiem sposobem otwierania i zamykania komentarza w C. Jedynym interesującym fragmentem jest to, że zamiast 34a "zastępuje się 35-1(kończąc 1 celowo) na unikajcie okropnych akordów. Starałem się również, aby zakończenie było dramatyczne. Naprawdę to zrobiłem. Zamierzam edytować to później, aby brzmiało to trochę lepiej.

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

W moim rozumieniu reguł skomentowane sekcje nadal przechodzą ostateczną regułę, ponieważ ich usunięcie skutkuje niepowodzeniem quine.


3
„Zamierzam edytować to później, aby brzmiało to trochę lepiej”. Minął prawie rok. Zaczynam myśleć, że nie będziesz go później edytować, aby brzmiał lepiej. : P
Alex A.

@AlexA. Już ponad rok!
wizzwizz4

5

jot

Tak, myślę, że możesz zgadnąć, jak to pójdzie.

Ciężko jest zrobić coś fajnego w J bez parenów, a ponieważ rzadko można zakończyć je zerami i zerami, większość rzeczy brzmi jak ktoś siedzący jednocześnie na wysokich i niskich połówkach klawiatury. Starałem się jak mógłbym, żebyś wiedział.

Oto funky, jak sądzę, na fortepian. Naprawdę nie wiem pierwszej rzeczy na temat kompozycji, po prostu chwyciłem quine i trochę pokręciłem liczbami.

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

I dla zabawy zagraj w EDM. Nazywam to Japhex Twin .

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

Można potwierdzić quineiness tych drobnych fragmentów kodu na tryj.tk .


1
To faktycznie może uchodzić za muzykę. Świetny! :)
Emil

4

Musique Concrete with Python

Nie mam dzisiaj dużo czasu, ale chciałem uzyskać odpowiedź. Gatunek jest pretekstem do tego, by nie brzmieć jak nic. Może efekt dźwiękowy w grze wideo?

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

Właściwie to nie brzmi źle!
Claudiu

Każdy album Yoko Ono kiedykolwiek
William Barbosa

4

do

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)

Podzielone z podziałem linii wyłącznie w celu prezentacji; jest to tylko quine (i spełnia wymagania dotyczące długości) tylko po usunięciu znaków nowej linii.

Deklaracja printf była potrzebna do kompilacji (printf). /*(*/i /*)*/zostały użyte do dopasowania nawiasów w kodzie, podczas gdy kombinacja nawiasów i operator przecinka zostały użyte do utworzenia akordów na podstawie printfparametrów.

Edycja: Skrócono, aby pasowała do rozmiaru, a także sprawiła, że ​​kawałek poszedł trochę szybciej.

Brzmi najlepiej na pianinie.


2
Lubię to! Zaczyna się trochę powolnie, ale wszystko, począwszy od tokena 130, jest potężnie nawiedzające. Wykorzystałeś skrzeczność na swoją korzyść.
Calvin's Hobbies

Ten można przekazać za Fantasy for Orchestra! : P
Soham Chowdhury

2
Bardziej podobała mi się stara wersja, ale to wciąż moja ulubiona piosenka tutaj. Próbuję dać ci nagrodę, ale z jakiegoś powodu to nie działa. Zobacz meta: meta.codegolf.stackexchange.com/questions/2263/…
Hobby Calvina

3

Schemat

To może nie być szczególnie melodyjne (w rzeczywistości brzmi to tak, jakby ktoś upuścił martwą świnię do wnuczka), ale przynajmniej jest to krótki kawałek muzyki. Trudno byłoby stworzyć coś znacznie dłuższego lub mniej martwego latającego świnia w schemacie.

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

1
Ow, moje uszy ....
Claudiu

2

Für Golfscript

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

Jest to zgodne z regułą usuwania listu z trzech kolejnych, choć nie intencją, jak rozumiem.


1

Cobra / Batch

@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

Technicznie nie jest to quine w Batch (czyta to własne źródło). Jest to jednak quine w Cobra.

Najlepiej brzmi w trybie fortepianu, trochę jak muzyka na poziomie ducha z gry wideo Super Mario World.


1

Pyt

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

Najlepiej grać z czwartym ustawieniem (kwota + i - zmiana interwału) na około 20, pozostałe wartości domyślne. Brzmi najlepiej na pianinie.


0

Haskell

(Nie jestem pewien, czy nazwa zmiennej narusza ostatnią regułę).

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

Najlepiej grać na fortepianie z czasem trwania nuty 1000 milisekund i interwałem nuty 250 milisekund, ze standardowymi wartościami + i -.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.