Musical Quines บนเปียโน ASCII


22

มี 88 ปุ่มบนเปียโนมาตรฐานและ 95 ตัวอักษรพิมพ์ได้ (รหัสฐานสิบหก 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 Had a Little Lambโดยใช้พารามิเตอร์การกำหนดเวลาล่วงหน้าที่คุณสามารถดูได้ใน JSFiddle

Space ( ) หมายถึงที่พักดนตรีที่มีระยะเวลาหนึ่งช่วงเวลาโน้ต ดังนั้นจึงRPNPRRR PPP RUUเล่นโน้ต 13 ตัวแรกของ Mary Had a Little Lamb พร้อมวางในตำแหน่งที่เหมาะสม

หากอักขระใด ๆ ที่()01อยู่ข้างหน้าถูกนำหน้าด้วยลำดับของ0's และ1' s (regex [01]+) ลำดับนั้นจะถูกอ่านเป็นเลขฐานสองและอักขระจะถูกแทนที่ด้วยสำเนาbของตัวเอง ดังนั้น101A11 10+1-0B01Cจะกลายเป็นAAAAA ++-Cเพราะ101= 5, 11= 3, ฯลฯ (ลำดับของ0's และ1' ที่ส่วนท้ายของสตริงไม่มีผล)

วงเล็บที่ตรงกัน ( ()) ทำหน้าที่สองประการ:

  1. หากเนื้อหาของพวกเขาไม่ได้ลงท้ายด้วยลำดับของ0และ1บันทึกทั้งหมดจะถูกเล่นในเวลาเดียวกันกับคอร์ด (ซึ่งไม่แตกต่างจากโน้ต) ดังนั้น(NQU)เป็นคอร์ด C เล็ก ๆ น้อย ๆเกี่ยวกับคู่ 4.
    หากบันทึกที่ซ้ำกันที่มีอยู่เสียงของพวกเขายังซ้ำ ดังนั้น(NN)และ(NNN)เสียงที่แตกต่าง
  2. หากเนื้อหาของพวกเขาจะจบลงด้วยการลำดับของ0'และ1' s ที่ลำดับอ่านเป็นเลขฐานสองและวงเล็บและเนื้อหาของพวกเขาจะถูกแทนที่ด้วยสำเนาของเนื้อหา ดังนั้น(NQU11)จะกลายเป็น 9 NQUNQUNQUบันทึกบุคคล:

รายละเอียดวงเล็บ:

  • รังจำลองวงเล็บ (วัตถุประสงค์ 2) ดี: (N(QU10)11)→การ→การ(NQUQU11)NQUQUNQUQUNQUQU
  • รังไม่ใช่จำลองวงเล็บ (วัตถุประสงค์ 1) เป็นดี แต่ไม่มีผล: เป็นเช่นเดียวกับ(A((+)C))(A+C)
  • นอกจากนี้คุณยังสามารถรวมทั้ง: →((N(QU10))11)(NQUQU)(NQUQU)(NQUQU)
  • ลำดับของ0'และ1' ก่อนวงเล็บที่ไม่ทำซ้ำจะทำซ้ำในลักษณะเดียวกับที่อักขระแต่ละตัวซ้ำกัน ดังนั้นจะกลายเป็น10(NQU)(NQU)(NQU)
  • ลำดับของ0'และ1' ก่อนที่จะจำลองแบบวงเล็บจะไม่มีผลใด ๆ
  • (ต้องมีการจับคู่เสมอ)แต่ไม่กลับกัน: เช่นN)ถูกต้อง

บวก ( +) และลบ ( -) ตามลำดับเพิ่มและลดระยะเวลาของบันทึกหรือช่วงเวลาระหว่างบันทึกย่อขึ้นอยู่กับบริบท:

  • เมื่ออยู่ในวงเล็บที่ไม่ทำซ้ำพวกมันจะเพิ่มหรือลดตัวแปรระยะเวลาบันทึกทันทีด้วยจำนวนมิลลิวินาทีที่กำหนดไว้ล่วงหน้า (ดูJSFiddle ) ดังนั้น(++)Nจะเล่นNในระยะเวลานานกว่าปกติ
  • เมื่ออยู่นอกวงเล็บที่ไม่ใช่การจำลองข้อมูลพวกเขาจะเพิ่มหรือลดช่วงเวลาระหว่างการเริ่มต้นของบันทึกย่อถัดไปและบันทึกหลังจากนั้น (และแต่ละช่วงเวลาถัดมา) ตามจำนวนที่กำหนดไว้ล่วงหน้าเป็นมิลลิวินาที ดังนั้นใน++NPช่วงเวลาระหว่างNและPยาวกว่าปกติ

ระยะเวลาของบันทึกและช่วงเวลาระหว่างพวกเขาไม่สามารถลดลงต่ำกว่า 0

ท้าทาย

ฉันตั้งใจเลือก() 01+-ให้เป็นอักขระพิเศษ 7 ตัวเพราะพวกเขาสามารถวางในบริบทต่าง ๆ ในภาษาการเขียนโปรแกรมจำนวนมาก

งานของคุณคือการเขียนควินใน 512 ไบต์หรือน้อยกว่าที่ก่อให้เกิดการปรับแต่งที่ทำให้เกิดเสียงที่ดีที่สุดเมื่อรหัสตัวเองจะถูกนำมาใช้เป็นสายป้อนในJSFiddle

คุณสามารถเลือกค่าเริ่มต้นใด ๆ (จำนวนเต็มไม่เป็นลบ) สำหรับพารามิเตอร์ช่วงเวลา / ระยะเวลา 4 ตัว แต่การปรับค่าของคุณต้องไม่เกิน 10 นาที คุณควรบอกเราด้วยว่าการปรับแต่งเสียงของคุณดีที่สุดในเครื่องดนตรีชิ้นใด

กฎระเบียบ

  • แท็บบรรทัดใหม่และ ASCII ที่พิมพ์ได้เท่านั้นที่ได้รับอนุญาตในรหัสของคุณ ASCII ที่ไม่สามารถพิมพ์ได้ทั้งหมดจะถูกละเว้นโดยผู้สร้างปรับแต่ง
  • ผลลัพธ์อาจไปที่ไฟล์หรือ stdout หรือทางเลือกที่ใกล้เคียงที่สุด (เช่นการแจ้งเตือน JS) ไม่มีอินพุต
  • ไม่มีการอ่านซอร์สโค้ด มันจะต้องเป็นควินจริง
  • การลบอักขระแหล่งที่มาต่อเนื่อง 3 ตัวใด ๆจะต้องทำให้โปรแกรมไม่สามารถทำงานได้เหมือน quine นี่คือเพื่อให้แน่ใจว่าคนไม่ได้เขียนเพลงที่ดีในสายแล้วมีส่วนควินินเล็ก ๆ เพื่อส่งออก
    • ดังนั้นหากโปรแกรมของคุณเป็นMYCODEตอนนั้นMYC, MYEและMDE, ODEทั้งหมดไม่ควรเป็น quines (มันอาจผิดพลาดหรือเอาท์พุทอย่างอื่น)

นี่คือการประกวดความนิยมคำตอบที่ได้รับคะแนนสูงสุดชนะ

อัปเดต:ผ่อนคลายกฎล่าสุด


3
คุณสามารถเล่น Mary Had a Little Lamb บนแป้นโทรศัพท์ได้เช่นกัน: 3212333 222 399 (ลองเลยมันออกมาได้อย่างสมบูรณ์แบบ)
Level River St

มี soundfonts ฟรีมากมายสำหรับเปียโน ยังดี JSFiddle!
qwr

ฉันไม่เคยเห็นกฎข้อสุดท้ายในความท้าทายใด ๆ มาก่อนฉันคิดว่ามีประสิทธิภาพตามที่คาดไว้
justhalf

@qwr คุณรู้หรือไม่ว่าชุดคีย์ 88 ตัวใด ๆ ที่สามารถเชื่อมโยงโดยตรงในแบบนี้ ? ฉันดูเล็กน้อย แต่หาไม่เจอ
งานอดิเรกของ Calvin

คำตอบ:


6

C

ฉันตัดสินใจว่าฉันชอบเสียงก้องกังวานต่ำที่เกิดจากสตริง/**/ซึ่งไม่ใช่วิธีบังเอิญในการเปิดและปิดความคิดเห็นใน C. บิตที่น่าสนใจอื่น ๆ ที่นี่คือแทนที่34a (สิ้นสุดใน เจตนา) หลีกเลี่ยงคอร์ดที่น่ากลัว ฉันพยายามทำให้เสียงตอนจบดูน่าทึ่ง ฉันทำจริงๆ ฉันตั้งใจจะแก้ไขในภายหลังเพื่อให้เสียงดีขึ้นเล็กน้อย"35-11

/**/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
Alex A.

@AlexA กว่าหนึ่งปีแล้ว!
wizzwizz4

5

J

ใช่ฉันคิดว่าคุณสามารถเดาได้ว่าสิ่งนี้จะไป

เป็นการยากที่จะทำสิ่งเจ๋ง ๆ ให้เสร็จโดยที่ไม่ต้อง parens และเนื่องจากคุณแทบจะไม่สามารถปิดท้ายด้วย 0s และ 1s ได้สิ่งต่าง ๆ ส่วนใหญ่ฟังดูเหมือนใครบางคนนั่งอยู่บนคีย์บอร์ดครึ่งบนและล่างในเวลาเดียวกัน ฉันพยายามอย่างดีที่สุดฉันจะให้คุณรู้

ฉันคิดว่านี่เป็นพื้นฐานที่ขี้ขลาดสำหรับเปียโน ฉันไม่รู้สิ่งแรกเกี่ยวกับการแต่งเพลงฉันเพิ่งคว้าควินินและทวีจำนวนตัวเลขประมาณสองสามรอบ

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

และเพื่อความสนุกเล่นเป็น EDM ผมเรียกมันว่าJaphex แฝด

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

คุณสามารถยืนยัน quineiness เหล่านี้ตัวอย่างที่ดีของรหัสที่tryj.tk


1
สิ่งนี้อาจส่งผ่านดนตรีได้จริง ที่ดี! :)
Emil

4

Musique Concrete กับ Python

ฉันไม่ได้มีเวลามากในวันนี้ แต่ฉันต้องการที่จะได้คำตอบประเภทเป็นข้ออ้างที่ไม่ฟังดูเหมือนอะไร อาจเป็นเสียงประกอบในวิดีโอเกมใช่ไหม

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

จริงๆแล้วมันฟังดูไม่เลวเลย!
Claudiu

ทุกอัลบั้มของ Yoko Ono
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)

เลิกกับตัวแบ่งบรรทัดเพื่อวัตถุประสงค์ในการนำเสนอเท่านั้น นี่เป็นเพียงควิน (และตรงตามข้อกำหนดด้านความยาว) หากมีการลบบรรทัดใหม่

ประกาศ printf (printf)เป็นสิ่งที่จำเป็นในการรวบรวม /*(*/และ/*)*/ถูกใช้เพื่อจับคู่วงเล็บในรหัสในขณะที่ผสมวงเล็บและตัวดำเนินการเครื่องหมายจุลภาคถูกใช้เพื่อจัดรูปแบบคอร์ดจากprintfพารามิเตอร์

แก้ไข: ย่อขนาดให้พอดีกับข้อกำหนดด้านขนาดและทำให้ชิ้นส่วนนั้นเร็วขึ้น

ฟังดูดีที่สุดบนเปียโน


2
ฉันชอบมัน! มันเริ่มต้นช้าชนิด แต่ทุกอย่างตั้งแต่โทเค็น 130 เป็นต้นไปกำลังหลอกหลอนอย่างมีอำนาจ คุณใช้ความกรีดร้องเพื่อประโยชน์ของคุณ
งานอดิเรกของ Calvin

คนนี้สามารถผ่านไปสำหรับ Fantasy for Orchestra! : P
Soham Chowdhury

2
ฉันชอบเวอร์ชั่นเก่ามากกว่า แต่นี่ก็ยังเป็นเพลงโปรดของฉันที่นี่ ฉันกำลังพยายามมอบเงินรางวัลให้คุณ แต่ด้วยเหตุผลบางอย่างที่ไม่ได้ผล ดู meta: meta.codegolf.stackexchange.com/questions/2263/…
งานอดิเรกของ Calvin

3

โครงการ

นี่อาจจะไม่ไพเราะโดยเฉพาะ (จริง ๆ แล้วดูเหมือนว่ามีคนทิ้งหมูตายลงไปในทารกที่ยิ่งใหญ่) แต่อย่างน้อยมันก็เป็นเพลงสั้น ๆ มันจะเป็นการยากที่จะสร้างอะไรที่ยาวกว่าหรือน้อยกว่า - เหมือนหมูที่ตายในโครงการ

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

1
เป็นไงบ้างหูของฉัน ....
Claudiu

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

ในทางเทคนิคไม่ใช่ควินในแบตช์ อย่างไรก็ตามมันเป็นควินในงูเห่า

ฟังดูดีที่สุดเมื่อใช้โหมดเปียโนเหมือนกับเพลงระดับผีจากวิดีโอเกมยุคซูเปอร์มาริโอเวิร์ลด์


1

Pyth

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

เล่นได้ดีที่สุดด้วยการตั้งค่าที่สี่ (จำนวน + และ - เปลี่ยนช่วงเวลา) ที่ประมาณ 20 พักที่ค่าเริ่มต้น ฟังดูดีที่สุดบนเปียโน


0

Haskell

(ฉันไม่แน่ใจว่าชื่อตัวแปรละเมิดกฎล่าสุดหรือไม่)

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

เล่นได้ดีที่สุดบนเปียโนที่มีระยะเวลาบันทึก 1,000 มิลลิวินาทีและช่วงเวลาบันทึก 250 มิลลิวินาทีพร้อมค่ามาตรฐาน + และ -

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.