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