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
RPNPRRR
Odtwarza 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 RUU
gra 13 pierwszych nut Mary Had a Little Lamb z odpoczynkami w odpowiednich miejscach.
Jeśli jakikolwiek inny znak ()01
jest 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-0B01C
Staje się tak, AAAAA ++-C
ponieważ 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:
- Jeśli ich treść nie kończy się sekwencją
0
„i1
”, 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. - Jeżeli zawartość nie koniec z serią
0
„s i1
” 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
„i1
” 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
„i1
” 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 ).
(++)N
Będzie więc grałN
dł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
++NP
odstępie międzyN
iP
jest 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ł
MYCODE
wtedyMYC
,MYE
,MDE
, iODE
powinny być quines (mogą błędu lub coś innego wyjścia).
- Więc jeśli program był
To konkurs popularności, wygrywa najlepiej głosowana odpowiedź.
Aktualizacja: Zrelaksowana ostatnia reguła.
źródło
Odpowiedzi:
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 zamiast34
a"
zastępuje się35-1
(kończąc1
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.W moim rozumieniu reguł skomentowane sekcje nadal przechodzą ostateczną regułę, ponieważ ich usunięcie skutkuje niepowodzeniem quine.
źródło
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.
I dla zabawy zagraj w EDM. Nazywam to Japhex Twin .
Można potwierdzić quineiness tych drobnych fragmentów kodu na tryj.tk .
źródło
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?
źródło
do
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 podstawieprintf
parametrów.Edycja: Skrócono, aby pasowała do rozmiaru, a także sprawiła, że kawałek poszedł trochę szybciej.
Brzmi najlepiej na pianinie.
źródło
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.
źródło
Für Golfscript
Jest to zgodne z regułą usuwania listu z trzech kolejnych, choć nie intencją, jak rozumiem.
źródło
Cobra / Batch
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.
źródło
Pyt
Najlepiej grać z czwartym ustawieniem (kwota + i - zmiana interwału) na około 20, pozostałe wartości domyślne. Brzmi najlepiej na pianinie.
źródło
Haskell
(Nie jestem pewien, czy nazwa zmiennej narusza ostatnią regułę).
Najlepiej grać na fortepianie z czasem trwania nuty 1000 milisekund i interwałem nuty 250 milisekund, ze standardowymi wartościami + i -.
źródło