ASCII Piyanoda Müzikal Quines


22

Standart bir piyanoda 88 tuş ve 95 basılabilir ascii karakter vardır (onaltılık kodlar 20 ila 7E):

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

('karakter' bundan sonra yazdırılabilir ASCII karakterini ifade eder)

Gelen bu JSFiddle bunu yararlandı ve kullanma piyano melodileri üretir basit bir sözdizimi yaptık AudioSynth . (Biri beni bağlanabilir bir gerçek piyano nota sesleri grubuna yönlendirebilirse minnettar olacağım.)

Ayrıca giriş dizesindeki her karakter () 01+-bir piyano tuşuna karşılık gelir:

 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

Bu yüzden , JSFiddle'da görebileceğiniz önceden ayarlanmış zamanlama parametrelerini kullanarak Mary Had'in Küçük Bir KuzuRPNPRRR ilk 7 notunu çalar.

Boşluk ( ), bir nota aralığına dayanan müzikal dinlenmeyi temsil eder. Böylece RPNPRRR PPP RUU, Mary'nin Küçük Bir Kuzinin ilk 13 notasını çalıyor ve uygun yerlerde duruyor.

Herhangi bir karakter yanı sıra halinde ()01bir dizi öneki 0'in ve 1' nin (normal ifade [01]+), bu dizi, bir ikili sayı olarak okunur b ve karakter ile değiştirilir b kendisinin bir kopya. Böylece 101A11 10+1-0B01Colur AAAAA ++-Cçünkü 101= 5, 11= 3, vs. ( dizgenin sonundaki ' 0ve 1' dizilerinin etkisi yoktur.)

Eşleşen parantezler ( ()) iki amaca hizmet eder:

  1. İçerik varsa gelmez bir dizi ile sona 0'ler ve 1' ler, bütün notları (Aksi bir not farksız) bir akor ile aynı anda oynanır. Öyleyse oktav 4'teki (NQU)bir C küçük akor var
    . Yani (NN)ve (NNN)farklı geliyor.
  2. İçerik ise yapar bir dizisi ile son 0sitesindeki ve 1sitesindeki, bu dizi, bir ikili sayı olarak okunur b ve parantez ve içeriği ile değiştirilir b içeriği kopya. Yani (NQU11)9 ayrı notlar haline gelir: NQUNQUNQU.

Parantez Detayları:

  • Yuvalama çoğaltma parantezleri (amaç 2) gayet iyi: (N(QU10)11)(NQUQU11)NQUQUNQUQUNQUQU.
  • Yinelenmeyen parantezlerin iç içe geçmesi (amaç 1) gayet iyi ancak etkisiz: (A((+)C))aynı (A+C).
  • İkisini de birleştirebilirsiniz: ((N(QU10))11)(NQUQU)(NQUQU)(NQUQU).
  • Yinelenmeyen parantezlerden önceki 0's ve 1s ' dizileri, ayrı ayrı karakterlerin tekrarlandığı şekilde onları tekrar eder. Böylece 10(NQU)olur (NQU)(NQU).
  • Dizisi 0'nin ve 1parantez replike etkisizdir önce' s.
  • (her zaman bir eşleşmeye sahip olmalı ), ancak tersi olmamalıdır: örneğin N)geçerlidir.

Artı ( +) ve eksi ( -) sırasıyla içeriğine bağlı olarak notların süresini veya notlar arasındaki zaman aralığını artırır ve azaltır :

  • Zaman içinde parantez replike olmayan, hemen artırmak veya milisaniye (bakınız, bazı önceden belirlenmiş sayısına göre nota değişken azaltmak JSFiddle ). Bu yüzden normalden daha uzun bir süre (++)Noynayacak N.
  • Zaman dış parantez replike olmayan, artırmak veya milisaniye önceden belirlenmiş bazı sayısına göre (ve her bir takip eden zaman aralığında) sonraki not başlangıcı ve not arasındaki aralığı azaltmaktadır. Yani içinde ++NParasındaki aralık Nve Pher zamankinden daha uzundur.

Notların süresi ve aralarındaki zaman aralığı 0'ın altına düşemez.

Meydan okuma

Kasten () 01+-7 özel karakter olmayı seçtim çünkü birçok bağlamda birçok programlama dilinde masumca yerleştirilebilirler.

Göreviniz, kod JSFiddle'da giriş dizesi olarak kullanıldığında en iyi sondaj ayarını üreten 512 bayt veya daha kısa bir yazı yazmaktır .

4 aralık / süre parametresi için herhangi bir başlangıç ​​değerini (negatif tamsayı olmayan) seçebilirsiniz, ancak ayarınız 10 dakikadan fazla sürmemelidir. Ayrıca, ayarınızın belirli bir enstrümanda en iyi şekilde ses çıkardığını bize bildirmelisiniz.

kurallar

  • Kodunuzda yalnızca sekmelere, yeni satırlara ve yazdırılabilir ASCII'ye izin verilir. Yazdırılamayan tüm ASCII, ayar oluşturucu tarafından dikkate alınmaz.
  • Çıktı bir dosyaya veya stdout'a veya en yakın alternatife gidebilir (örn. JS uyarısı). Giriş yok.
  • Kaynak kodu okunmadı. Gerçek bir yüzgeç olmalı.
  • Bitişik 3 kaynak karakterin herhangi birinin kaldırılması , programın artık görevsiz kalmasını sağlamalıdır. Bu, insanların bir dizgede iyi bir şarkı yazmamasını sağlamak ve daha sonra çıktısını almak için küçük bir kuyruk kısmına sahip olmasını sağlamaktır.
    • Programınız olsaydı Yani MYCODEo zaman MYC, MYE, MDEve ODEtüm quines olmamalı (bunlar hata ya da başka bir çıktı üretir olabilir).

Bu bir popülerlik yarışması, en yüksek oyu alan cevap kazandı.

Güncelleme: Rahat son kural.


3
Mary Had A Little Lamb oyununu bir telefon tuş takımında da oynayabilirsiniz: 3212333 222 399 (dene, mükemmel çıkar).
Level River St

Piyano için bol miktarda ücretsiz ses kaynağı var. Ayrıca, güzel JSFiddle!
qwr

Sanırım, son kuralı daha önce herhangi bir mücadelede görmedim, beklenildiği kadar etkili.
justhalf

@qwr doğrudan bağlantılı olabilir tüm 88 anahtarlardan herhangi setleri biliyor musunuz Bu şekilde ? Biraz baktım ama bulamadım.
Calvin'in Hobileri

Yanıtlar:


6

C

Ben düşük gürültü dize tarafından oluşturulan Gümbürtü sevdim karar /**/burada sadece diğer ilginç biraz açık yolu ve C'de de yakın yorum değil-so-tesadüfen olduğunu 34bir için "değiştirilir 35-1(a içinde Bitiş 1 için kasıtlı) Allah'ın korkunç akorları kaçının. Ayrıca son sesini dramatik hale getirmeye çalıştım. Gerçekten yaptım. Sesi biraz daha iyi hale getirmek için daha sonra düzenlemek niyetindeyim.

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

Kuralları anladığım için, yorumlanan bölümler hala son kuralı geçiyor, çünkü kaldırılması başarısız bir sonuçla sonuçlanıyor.


3
“Sesi biraz daha iyi hale getirmek için daha sonra düzenlemek niyetindeyim.” Neredeyse bir yıl oldu. Sesi daha iyi hale getirmek için bunu daha sonra düzenlemeyeceğinizi düşünmeye başladım. : P
Alex A.

@AlexA. Şimdi bir yıldan fazla!
wizzwizz4

5

J

Evet, bunun nasıl gideceğini tahmin edebilirsin.

J'de parensiz bir şey yapmak çok zordur ve bunları nadiren 0s ve 1s ile sonlandırabildiğiniz için, çoğu şey aynı anda klavyenin yüksek ve alçak yarısında oturan biri gibi ses çıkarır. Elimden gelenin en iyisini yaptım, bilmeni isterim.

Sanırım piyano için korkak bir başlangıç. Kompozisyonla ilgili ilk şeyi gerçekten bilmiyorum, sadece bir kıskaç aldım ve sayıları bir miktar döndürdüm.

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

Ve sadece eğlence için, bunu EDM olarak oynayın. Ben buna Japhex Twin diyorum .

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

Tryj.tk adresinde bu ince kod snippet'lerinin kalitesini kontrol edebilirsiniz .


1
Bu aslında müzik için geçebilir. Harika! :)
Emil

4

Pitonlu Musique Beton

Bugün fazla vaktim yok ama cevap almak istedim. Tür, hiçbir şey gibi görünmemek için bir bahane. Belki bir video oyununda ses efekti?

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

Aslında çok kötü gelmiyor!
Claudiu

Şimdiye kadar yapılan her Yoko Ono albümü
William Barbosa

4

C

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)

Yalnızca sunum amacıyla satır sonları ile ayrıldı; Yeni satırlar kaldırılırsa bu yalnızca bir kuyruktur (ve yalnızca uzunluk gereksinimlerini karşılar).

Derleme için printf bildirisine ihtiyaç vardı (printf). /*(*/ve /*)*/koddaki parantezleri eşleştirmek için kullanılırken, parantez ve virgül operatörünün bir karışımı printfparametrelerden akorları oluşturmak için kullanıldı .

Düzenleme: Parçanın biraz daha hızlı gitmesinin yanı sıra boyut gereksinimlerine uyacak şekilde kısaltıldı.

Bu piyanoda en iyi geliyor.


2
Bunu sevdim! Yavaş yavaş başlar ama token 130'dan sonraki her şey güçlü bir şekilde rahatsız edicidir. Screechiness'i kendi yararına kullandın.
Calvin'in Hobileri

Bu, Orkestra için Fantasy için geçebilir! : P
Soham Chowdhury

2
Eski versiyonu daha çok sevdim ama bu hala en sevdiğim şarkı. Sana lütuf vermeye çalışıyorum ama nedense işe yaramadı. : Meta Bkz meta.codegolf.stackexchange.com/questions/2263/...
Calvin'in Hobiler

3

düzen

Bu özellikle melodik olmayabilir (aslında biri ölü bir domuzu bebek büyüklüğüne bırakmış gibi geliyor), ama en azından kısa bir müzik parçası. Planda çok daha uzun veya daha az ölü uçan domuz benzeri şeyler yapmak zor olurdu.

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

1
Ow, kulaklarım ....
Claudiu

2

Für Golfscript

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

Bu, ardışık olmayan üç harf kaldırma kuralının mektubunu karşılar, niyetim olmasa da, topladığım niyeti.


1

Kobra / Toplu

@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

Teknik olarak, Batch'ta bir kuyruk değil (kendi kaynağını okur). Bununla birlikte, Kobra'da bir sırttır.

Piyano modunda en iyisi, Süper Mario Dünyası bir video oyunundan hayalet seviyeli müzik gibi.


1

Pyth

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

En iyi dördüncü ayarda (miktar + ve - değişim aralığı) yaklaşık 20 civarında oynanır, varsayılan ayarlarda dinlenir. Piyanoda en iyi sesler.


0

Haskell

(Değişken adının son kuralı ihlal edip etmediğinden emin değilim.)

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

En iyi standart + ve - değerleri ile, 1000 milisaniye nota süresi ve 250 milisaniye nota aralığı ile piyanoda çalındı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.