Nhạc cụ trên đàn piano ASCII


22

Có 88 phím trên đàn piano tiêu chuẩn và 95 ký tự ascii có thể in được (mã hex 20 đến 7E):

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

('Ký tự' đề cập đến bất kỳ ký tự ASCII có thể in nào từ đây về sau)

Trong JSFiddle này, tôi đã tận dụng điều đó và tạo một cú pháp đơn giản để tạo ra các giai điệu piano bằng AudioSynth . (Nếu bất cứ ai có thể hướng tôi đến một tập hợp các âm thanh ghi chú piano thực sự có thể liên kết, tôi sẽ rất biết ơn.)

Mỗi ký tự trong chuỗi đầu vào bên cạnh () 01+-tương ứng với một phím đàn piano:

 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

Vì vậy, hãy RPNPRRRchơi 7 nốt đầu tiên của Mary Had a Little Lamb bằng cách sử dụng các tham số thời gian định sẵn mà bạn có thể thấy trong JSFiddle.

Space ( ) đại diện cho phần còn lại âm nhạc kéo dài trong một khoảng thời gian ghi chú. Vì vậy, RPNPRRR PPP RUUchơi 13 nốt đầu tiên của Mary Had a Little Lamb với phần còn lại ở những nơi thích hợp.

Nếu bất kỳ ký tự nào bên cạnh ()01được tiền tố bởi một chuỗi 0'và 1(regex [01]+), thì chuỗi đó được đọc dưới dạng số nhị phân b và ký tự được thay thế bằng b bản sao của chính nó. Vì vậy, 101A11 10+1-0B01Ctrở thành AAAAA ++-Cbởi vì 101= 5, 11= 3, v.v. (Một chuỗi 0's và 1' ở cuối chuỗi không có hiệu lực.)

Các dấu ngoặc đơn ( ()) phục vụ hai mục đích:

  1. Nếu nội dung của chúng không kết thúc bằng một chuỗi 0's và 1', tất cả các nốt được phát cùng lúc với một hợp âm (nếu không thì không khác gì một nốt). Vì vậy, (NQU)một hợp âm C nhỏ trên quãng tám 4.
    Nếu có các nốt trùng lặp, âm thanh của chúng cũng bị trùng lặp. Vì vậy (NN)(NNN)âm thanh khác nhau.
  2. Nếu nội dung của họ không kết thúc với một chuỗi các 0's và 1' s, chuỗi được đọc như một số nhị phân b , và các dấu ngoặc đơn và nội dung của họ được thay thế bằng b bản sao của nội dung. Vì vậy, (NQU11)trở thành 9 ghi chú cá nhân : NQUNQUNQU.

Chi tiết dấu ngoặc đơn:

  • Các dấu ngoặc lặp lồng nhau (mục đích 2) là tốt: (N(QU10)11)(NQUQU11)NQUQUNQUQUNQUQU.
  • Các dấu ngoặc đơn không sao chép lồng nhau (mục đích 1) là tốt nhưng không có tác dụng: (A((+)C))giống như (A+C).
  • Bạn cũng có thể kết hợp cả hai: ((N(QU10))11)(NQUQU)(NQUQU)(NQUQU).
  • Một chuỗi 0's và 1' s trước không sao chép ngoặc lặp đi lặp lại chúng trong cùng một cách nhân vật cá nhân được lặp đi lặp lại. Vì vậy, 10(NQU)trở thành (NQU)(NQU).
  • Một chuỗi các 0dấu và 1trước khi sao chép dấu ngoặc đơn không có hiệu lực.
  • (phải luôn có kết quả khớp ), nhưng không phải ngược lại: vd N)là hợp lệ.

Cộng ( +) và trừ ( -) tương ứng tăng và giảm thời lượng của ghi chú hoặc khoảng thời gian giữa các ghi chú, tùy thuộc vào ngữ cảnh của chúng:

  • Khi bên trong dấu ngoặc đơn không sao chép, chúng ngay lập tức tăng hoặc giảm biến thời lượng ghi chú theo một số mili giây đặt trước (xem JSFiddle ). Vì vậy, (++)Nsẽ chơi Nvới thời gian dài hơn bình thường.
  • Khi bên ngoài dấu ngoặc đơn không sao chép, chúng tăng hoặc giảm khoảng giữa thời điểm bắt đầu của ghi chú tiếp theo và ghi chú sau nó (và mỗi khoảng tiếp theo) theo một số mili giây đặt trước. Vì vậy, trong ++NPkhoảng giữa NPdài hơn bình thường.

Thời lượng của ghi chú và khoảng thời gian giữa chúng không thể giảm xuống dưới 0.

Thử thách

Tôi cố tình chọn () 01+-trở thành 7 nhân vật đặc biệt bởi vì chúng có thể được đặt một cách vô hại trong nhiều bối cảnh trong nhiều ngôn ngữ lập trình.

Nhiệm vụ của bạn là viết một quine trong 512 byte hoặc ít hơn để tạo ra giai điệu âm thanh tốt nhất khi chính mã được sử dụng làm chuỗi đầu vào trong JSFiddle .

Bạn có thể chọn bất kỳ giá trị ban đầu nào (số nguyên không âm) cho 4 tham số khoảng thời gian / thời lượng, nhưng giai điệu của bạn không được kéo dài quá 10 phút. Bạn cũng nên cho chúng tôi biết nếu giai điệu của bạn nghe tốt nhất trong một nhạc cụ cụ thể.

Quy tắc

  • Chỉ các tab, dòng mới và có thể in-ASCII được cho phép trong mã của bạn. Tất cả ASCII không thể in được bỏ qua bởi người tạo giai điệu.
  • Đầu ra có thể đi đến một tệp hoặc thiết bị xuất chuẩn hoặc thay thế gần nhất (ví dụ: cảnh báo JS). Không có đầu vào.
  • Không đọc mã nguồn. Nó phải là một quine thực sự.
  • Việc loại bỏ 3 ký tự nguồn liền kề phải làm cho chương trình không còn hoạt động như một quine. Điều này là để đảm bảo mọi người không viết một bài hát hay trong một chuỗi sau đó có một phần nhỏ để tạo ra nó.
    • Vì vậy, nếu chương trình của bạn là MYCODEsau đó MYC, MYE, MDE, và ODEnên tất cả không quines (họ có thể lỗi hoặc đầu ra cái gì khác).

Đây là một cuộc thi phổ biến, câu trả lời được bình chọn cao nhất chiến thắng.

Cập nhật: Thư giãn quy tắc cuối cùng.


3
Bạn cũng có thể chơi Mary Had a Little Lamb trên bàn phím điện thoại: 3212333 222 399 (hãy thử, nó xuất hiện hoàn hảo.)
Level River St

Có rất nhiều âm thanh miễn phí cho piano. Ngoài ra, JSFiddle tốt đẹp!
qwr

Tôi chưa bao giờ thấy quy tắc cuối cùng trong bất kỳ thử thách nào trước đây, khá hiệu quả như dự định, tôi nghĩ vậy.
vừa qua

@qwr Bạn có biết bất kỳ bộ nào trong tất cả 88 khóa có thể được liên kết trực tiếp theo kiểu này không? Tôi nhìn một chút nhưng không thể tìm thấy.
Sở thích của Calvin

Câu trả lời:


6

C

Tôi quyết định rằng tôi thích thấp ầm ầm tiếng ồn tạo ra bởi các chuỗi /**/mà không phải là-cái tình cờ cách để mở và đóng một bình luận trong C. Các chỉ chút thú vị khác ở đây là 34cho một "được thay thế bằng 35-1(Kết thúc năm một 1 cố ý) để tránh các hợp âm thần khủng khiếp. Tôi cũng đã cố gắng để làm cho âm thanh kết thúc ấn tượng. Tôi thực sự đã làm. Tôi dự định sẽ chỉnh sửa nó sau để làm cho âm thanh tốt hơn một chút.

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

Theo hiểu biết của tôi về các quy tắc, các phần nhận xét vẫn vượt qua quy tắc cuối cùng vì việc loại bỏ chúng dẫn đến một kết quả không thành công.


3
"Tôi dự định chỉnh sửa điều này sau để làm cho âm thanh tốt hơn một chút." Đã gần một năm. Tôi bắt đầu nghĩ rằng bạn sẽ không chỉnh sửa điều này sau để làm cho âm thanh hay hơn. : P
Alex A.

@AlexA. Hơn một năm nay!
wizzwizz4

5

J

Vâng, tôi nghĩ bạn có thể đoán điều này sẽ diễn ra như thế nào.

Thật khó để có được bất cứ điều gì hay ho trong J mà không có parens, và vì bạn hiếm khi có thể kết thúc chúng bằng 0 và 1, hầu hết mọi thứ nghe giống như ai đó ngồi trên nửa bàn phím cao và thấp cùng một lúc. Tôi đã cố gắng hết sức, tôi sẽ có bạn biết.

Đây là một đường cơ sở thú vị cho piano, tôi nghĩ vậy. Tôi thực sự không biết điều đầu tiên về bố cục, tôi chỉ nắm lấy một câu đố và xoay tròn các con số xung quanh một chút.

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

Và, chỉ để giải trí, hãy chơi bản này dưới dạng EDM. Tôi gọi nó là Japhex Twin .

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

Bạn có thể xác nhận quineiness những đoạn Phạt tiền mã tại tryj.tk .


1
Điều này thực sự có thể vượt qua cho âm nhạc. Tuyệt quá! :)
Emil

4

Bê tông Musique với Python

Hôm nay tôi không có nhiều thời gian nhưng tôi muốn nhận được câu trả lời. Thể loại này là một cái cớ để không nghe giống như bất cứ điều gì. Có lẽ một hiệu ứng âm thanh trong một trò chơi video?

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

Thật ra nghe không tệ lắm!
Claudiu

Mỗi album Ono của Yoko từng có
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)

Chia tay với ngắt dòng chỉ nhằm mục đích trình bày; đây chỉ là một quine (và chỉ đáp ứng yêu cầu về độ dài) nếu dòng mới bị xóa.

Khai báo printf là cần thiết để biên dịch (printf). /*(*//*)*/được sử dụng để khớp với dấu ngoặc trong mã, trong khi hỗn hợp dấu ngoặc đơn và toán tử dấu phẩy được sử dụng để tạo hợp âm từ các printftham số.

Chỉnh sửa: Rút ngắn để phù hợp với yêu cầu kích thước cũng như làm cho mảnh đi nhanh hơn một chút.

Điều này âm thanh tốt nhất trên piano.


2
Tôi thích nó! Nó bắt đầu khá chậm nhưng mọi thứ từ mã thông báo 130 trở đi đều ám ảnh mạnh mẽ. Bạn đã sử dụng sự rít lên để lợi thế của bạn.
Sở thích của Calvin

Điều này có thể vượt qua cho Fantasy cho dàn nhạc! : P
Soham Chowdhury

2
Tôi thích phiên bản cũ hơn nhưng đây vẫn là bài hát yêu thích của tôi ở đây. Tôi đang cố gắng đưa tiền thưởng cho bạn nhưng vì một số lý do không hiệu quả. Xem meta: meta.codegolf.stackexchange.com/questions/2263/ Kẻ
Sở thích của Calvin

3

Kế hoạch

Điều này có thể không đặc biệt du dương (thực ra nghe có vẻ như ai đó đã thả một con lợn chết vào một đứa bé), nhưng ít nhất nó là một bản nhạc ngắn. Sẽ rất khó để tạo ra bất cứ thứ gì dài hơn hoặc ít hơn giống như lợn bay trong kế hoạch.

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

1
Ow, tai tôi ....
Claudiu

2

Câu lạc bộ Für

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

Điều này thỏa mãn lá thư của quy tắc loại bỏ ba chữ cái liên tiếp, mặc dù không có ý định, tôi thu thập.


1

Rắn hổ mang / lô

@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

Về mặt kỹ thuật không phải là một quine trong Batch (nó đọc nguồn của chính nó). Tuy nhiên, đây là một câu đố trong Cobra.

Nghe có vẻ hay nhất với chế độ piano, hơi giống âm nhạc cấp độ ma từ một trò chơi video thời Super Mario World.


1

Bình

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

Chơi tốt nhất với cài đặt thứ tư (số tiền + và - khoảng thời gian thay đổi) vào khoảng 20, phần còn lại ở mặc định. Âm thanh tốt nhất trên đàn piano.


0

Haskell

(Tôi không chắc liệu tên biến có vi phạm quy tắc cuối cùng hay không.)

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

Chơi tốt nhất trên piano với thời lượng ghi chú 1000 mili giây và khoảng thời gian ghi chú 250 mili giây, với các giá trị + và - tiêu chuẩn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.