Tạo tab guitar?


24

Viết chương trình ngắn nhất tạo ra các tab guitar cho các hợp âm được đưa ra làm đầu vào.

Vì vậy, các nghệ sĩ guitar trong số bạn không có lợi thế và để làm cho nó có tính quyết định (và có thể dễ viết mã hơn), đây là các hình thức hợp âm duy nhất được ủy quyền:

Major chords:

  E   F   F#  G   G#  A   A#  B   C   C#  D   D#
e 0---1---2---3---4---0---1---2---3---4---5---6---
B 0---1---2---3---4---2---3---4---5---6---7---8---
G 1---2---3---4---5---2---3---4---5---6---7---8---
D 2---3---4---5---6---2---3---4---5---6---7---8---
A 2---3---4---5---6---0---1---2---3---4---5---6---
E 0---1---2---3---4---0---1---2---3---4---5---6---

Minor chords:

  Em  Fm  F#m Gm  G#m Am  A#m Bm  Cm  C#m Dm  D#m
e 0---1---2---3---4---0---1---2---3---4---5---6---
B 0---1---2---3---4---1---2---3---4---5---6---7---
G 0---1---2---3---4---2---3---4---5---6---7---8---
D 2---3---4---5---6---2---3---4---5---6---7---8---
A 2---3---4---5---6---0---1---2---3---4---5---6---
E 0---1---2---3---4---0---1---2---3---4---5---6---

Lưu ý rằng 5 hợp âm đầu tiên và 7 hợp âm cuối cùng của mỗi chuỗi có các hình thức khác nhau.

Tất cả các hợp âm là các hợp âm chính hoặc phụ đơn giản (không có biến thể thứ 7 hoặc khác).

Bạn nên chăm sóc căn hộ quá. Nhắc nhở:

A# = Bb
C# = Db
D# = Eb
F# = Gb
G# = Ab

B#, Cb, E# and Fb are not used

Đầu ra phải bao gồm cột đầu tiên với tên dây, như được hiển thị ở trên. Nó không phải bao gồm tên hợp âm trên đầu. Hợp âm phải cách nhau 3 -như hình trên. 3 cuối cùng -là tùy chọn.

Đầu vào là một chuỗi bao gồm các tên hợp âm, cách nhau bởi khoảng trắng.

Một ví dụ đầu vào là:

Bm Gb A E G D Em F#

và đầu ra tương ứng là:

e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

... Và câu hỏi phụ: bài hát ví dụ là gì? :)
Jules Olléon

5
Khách sạn California: P
Matthew Đọc

Đúng, bạn thắng! :)
Jules Olléon

Ý tưởng tuyệt vời. Chúc tôi có thời gian chơi!
Igby Largeeman

Câu trả lời:


9

JavaScript, 297 277 262 235 223 ký tự

Không có lợi nhuận vận chuyển trong phiên bản golf là đáng kể; họ ở đó chỉ để làm cho câu trả lời có thể đọc được. Dấu chấm phẩy có ý nghĩa.

Chỉnh sửa: Thay thế bên ngoài mapbằng một vòng lặp while và các chỉnh sửa khác. Cuối cùng bên trong kích thước 2 × kích thước của phiên bản Golfscript (bây giờ)!

Chỉnh sửa: Thay thế indexOfbằng toán học, phá vỡ bảng tra cứu, các cải tiến nhỏ khác.

Chỉnh sửa: Một maptới forvà đặt trong một trận chung kết \ntôi đã ăn không cần thiết. Cuối cùng bên trong phiên bản Python của Jules.

i=prompt(o='').split(' ');for(r=6;o+=' EADGBe'[r]+' ',r--;o+='\n')
for(j=0;n=i[j++];o+=(([84,13,52,5][2*/m/.test(n)+x]*8>>2*r&3)+y-7*x)+'---')
y=n.charCodeAt(0),y=(2*y-(y>66)-(y>69)+(n[1]<'$')-(n[1]=='b')+2)%12,x=y>6;alert(o)

Đầu ra không còn tận dụng lợi thế của trailing ---là tùy chọn như:

e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

Chết tiệt, tôi nghĩ rằng tôi đã ghen tị với javascript. Hoàn thành tốt
kekekela

7

Golfscript, 136 ký tự

[["eBGDAE"{[]+" "+}/]]\" "/{.-2\{"bm#A B C D E F G"?.)!!*(+}/14%.3>-.8>-.7/@109?0>2*+[963 780 882 753]{3base(;}%=\7%{+'---'+}+%}%+zip n*

Toàn bộ 23 ký tự (17,5%) xử lý hai ký tự đó ở đầu mỗi hàng đầu ra.

Đầu ra mẫu, kiểm tra các trường hợp cạnh:

$ golfscript.rb tabs.gs <<<"E G# Ab A Db D# Em G#m Abm Am D#m"
e 0---4---4---0---4---6---0---4---4---0---5---
B 0---4---4---2---6---8---0---4---4---1---6---
G 1---5---5---2---6---8---0---4---4---2---7---
D 2---6---6---2---6---8---2---6---6---2---7---
A 2---6---6---0---4---6---2---6---6---0---5---
E 0---4---4---0---4---6---0---4---4---0---5---

Tôi chỉ dành khoảng một giờ cho việc này, vì vậy nó có thể giảm ít nhất 5 đến 10 ký tự. Về mặt khái niệm, nó hóa ra khá giống với giải pháp của DocMax: bảng tra cứu cho bốn trường hợp, sau đó tăng thêm một giá trị bù và nối các chuỗi theo đúng thứ tự.


+1: Người đàn ông tôi yêu Golfscript! Một vài lần hôm nay tôi đã tìm thấy những nơi để cắt mã của mình, nhưng không phải là 50%! Tôi không có trình thông dịch tiện dụng: nó có trả về D # cho Eb không?
DocMax

BTW, ghi chú cuối cùng trong mẫu của bạn khớp với C # m mặc dù dòng lệnh hiển thị D # m. Typo hay lỗi?
DocMax

@DocMax, lỗi. Tôi không hiểu tại sao nó chỉ ảnh hưởng đến D # m chứ không phải D # - điều này sẽ rất thú vị để gỡ lỗi. Tôi sắp xếp lại mọi thứ bởi vì nó thuận tiện để có khối 7 trước, vì vậy Eb không thực sự là một trường hợp cạnh.
Peter Taylor

Hóa ra cái cuối cùng được bao gồm một \ n, không nằm trong bảng tra cứu đã kéo giá trị xuống tương đương với một chữ cái.
Peter Taylor

4

Sau khi mã hóa nó, tôi nhận ra rằng tôi có thể đã làm điều này thông minh hơn rất nhiều ... có lẽ tôi sẽ thực hiện một mục khác. Hy vọng tôi sẽ nhận được điểm vì là người nhanh nhất!

Dù sao, có 962 ký tự của Perl.

%c =(B=>{E=>0,F=>1,Gb=>2,G=>3,Ab=>4,A=>2,Bb=>3,B=>4,C=>5,Db=>6,D=>7,Eb=>8,Em=>0,Fm=>1,Gbm=>2,Gm=>3,Abm=>0,Am=>1,Bbm=>2,Bm=>3,Cm=>4,Dbm=>5,Dm=>6,Ebm=>7},G=>{E=>1,F=>2,Gb=>3,G=>4,Ab=>5,A=>2,Bb=>3,B=>4,C=>5,Db=>6,D=>7,Eb=>8,Em=>0,Fm=>1,Gbm=>2,Gm=>3,Abm=>4,Am=>2,Bbm=>3,Bm=>4,Cm=>5,Dbm=>6,Dm=>7,Ebm=>8},D=>{E=>2,F=>3,Gb=>4,G=>5,Ab=>6,A=>2,Bb=>3,B=>4,C=>5,Db=>6,D=>7,Eb=>8,Em=>2,Fm=>3,Gbm=>4,Gm=>5,Abm=>6,Am=>2,Bbm=>3,Bm=>4,Cm=>5,Dbm=>6,Dm=>7,Ebm=>8},A=>{E=>2,F=>3,Gb=>4,G=>5,Ab=>6,A=>0,Bb=>1,B=>2,C=>3,Db=>4,D=>5,Eb=>6,Em=>2,Fm=>3,Gbm=>4,Gm=>5,Abm=>6,Am=>0,Bbm=>1,Bm=>2,Cm=>3,Dbm=>4,Dm=>5,Ebm=>6},E=>{E=>0,F=>1,Gb=>2,G=>3,Ab=>4,A=>0,Bb=>1,B=>2,C=>3,Db=>4,D=>5,Eb=>6,Em=>0,Fm=>1,Gbm=>2,Gm=>3,Abm=>4,Am=>0,Bbm=>1,Bm=>2,Cm=>3,Dbm=>4,Dm=>5,Ebm=>6});
%b=('A#'=>'Bb','C#'=>'Db','D#'=>'Eb','F#'=>'Gb','G#'=>'Ab');
foreach(qw(e B G D A E)){p($_,@ARGV)}
sub p{$s = shift;print "$s ";$s = uc($s);foreach(@_){while(($h,$f)=each(%b)){s/$h/$f/}print "$c{$s}->{$_}---"}print "\n"}

Đây là đầu ra tương ứng.

dhrasmus:Desktop standage$ perl guitar Bm Gb A E G D Em F#
e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

4

Vì các giải pháp ngắn hơn đã được đưa ra (chết tiệt bạn GolfScript!), Đây là của tôi:

Python, 229 ký tự

s=[("E EmF FmF#GbG GmG#AbA AmA#BbB BmC CmC#DbD DmD#Eb".find("%-02s"%s[:2])/4,s[-1]!='m')for s in raw_input().split()]
for c in range(6):
 l='eBGDAE'[c]+' '
 for(i,M)in s:x=i>4;l+=`i-5*x+2*(2<c+x<5)+(M+x)*(c==2-x)`+"---"
 print l

Đầu ra:

> echo "Bm Gb A E G D Em F#" | python guitar.py
e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

3

Python, 449 ký tự

z=int
f=str
r=range
j=''.join
n='E F F# G G# A A# B C C# D D#'.split()
n+=[x+'m'for x in n]
c=[j([f(z(x)+i)for x in'001220'])for i in r(5)]+[j([f(z(x)+i)for x in'022200'])for i in r(7)]
c+=[x[:2]+f(z(x[2])-1)+x[3:]for x in c[:5]]+[x[0]+f(z(x[1])-1)+x[2:]for x in c[5:]]
a=[c[n.index((chr(ord(i[0])-1)+'#'+i[2:]).replace('@','G')if len(i)-1 and i[1]=='b'else i)]for i in raw_input().split()] 
for i in r(6):print'eBGDAE'[i],j([x[i]+'-'*3 for x in a])

3

C99 - 231 ký tự

Các hợp âm được đưa ra trên dòng lệnh, một đối số cho mỗi hợp âm và tất nhiên không có xác nhận đầu vào dưới bất kỳ hình thức nào.

#include<stdio.h>
int main(int c,char**v){for(char*o="e0)B2)G2*D2+A0+E0)",i,m;*o;o+=3,v-=c,puts(""))for(printf("%c ",*o);*++v;printf("%c---",i-(i>2)-i/9+o[1+i/8]-(*o-66-i/8*5?0:m?m+2[*v]>99:0)))m=1[*v],i=(**v*2-4+m/35-m/98*3)%14;}

Chạy mẫu:

$ ./a.out Bm Gb A E G D Em F#
e 2---2---0---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---

Không chơi gôn

#include<stdio.h>
int main(int c,char**v){
     // o points to three characters per output line:
     //   string name, number for A, adjusted number for E (ASCII code minus 7)
     char* o="e0)B2)G2*D2+A0+E0)",
          i, // chord: A=0, A#=1, ..., G#=13, allowing also 3="E#" and 9="B#"
          m; // second character in chord name
     for (; *o; o+=3) {
          printf("%c ", *o);
          for (; *++v; ) {
               m = 1[*v],
               i = (**v*2-4+m/35-m/98*3)%14; // parse & adjust for sharp, flat
               printf("%c---",
                      i-(i>2)-i/9 // eliminate "E#", "B#"
                      +o[1+i/8] // get the number for a major chord
                      // adjust for minor...
                      -(*o-66-i/8*5
                        ? 0
                        : m ? m+2[*v]>99 : 0));
          }
          v -= c; // rewind argument pointer
          puts("");
     }
}

C không chuẩn - 206 ký tự

Nếu chúng ta không quan tâm đến thông số kỹ thuật ngôn ngữ, GCC có thể biên dịch một lớp lót sau thành nhị phân chức năng, mặc dù nó trộn lẫn các khai báo biến C99 với khai báo đối số kiểu K & R (và khai báo ngầm định của printf).

main(c,v)char**v;{for(char*o="e0)B2)G2*D2+A0+E0)",i,m;*o;o+=3,v-=c,puts(""))for(printf("%c ",*o);*++v;printf("%c---",i-(i>2)-i/9+o[1+i/8]-(*o-66-i/8*5?0:m?m+2[*v]>99:0)))m=1[*v],i=(**v*2-4+m/35-m/98*3)%14;}

2

C ++, 432

#include <cmath>
#include <iostream>
F(int c){c-=65;return c*1.6+sin(c/5.+.3);}
T(int a,int s){if(s)return(a=(T(a,s-1)+2)%3)-=(a==1&s>2);return(a<7)*2;}
#define c(a,b) while(*(++j)==a)b;--j; 
#define O std::cout<<
main(int a,char*p[]){
int P=2;for(int i=-1;++i<6;P=2){O p[1][i];O" ";while(P<a){char*j=p[P++];
int f=F(*j);c('#',++f)c('b',--f)
int t=T(f,i)*3.5;if(*(++j)!='m'){--j;t+=(t==3);}
O(f-F(p[1][i])+t+24)%12;O"---";
}O'\n';}}

Lưu ý rằng điều này cần điều chỉnh guitar là tham số đầu tiên. (Hầu hết các điều chỉnh không chuẩn sẽ mang lại cho bạn kết quả đột phá vô lý, nhưng tôi đoán bạn hài lòng với điều chỉnh tiêu chuẩn.)

Đối với khách sạn California, bạn có thể làm $./a.out EBGDAE Cbm Gb Bbb Fb G D Em F# Bm F# G## D## F## C## D##m E##. Kết quả:

E 2---2---0---0---3---5---0---2---2---2---5---0---3---5---0---2---
B 3---2---2---0---3---7---0---2---3---2---5---0---3---7---0---2---
G 4---3---2---1---4---7---0---3---4---3---6---1---4---7---0---3---
D 4---4---2---2---5---7---2---4---4---4---7---2---5---7---2---4---
A 2---4---0---2---5---5---2---4---2---4---7---2---5---5---2---4---
E 2---2---0---0---3---5---0---2---2---2---5---0---3---5---0---2---

Điều chỉnh bốn chuỗi trên thành một phần ba nhỏ giúp dễ dàng chơi các hợp âm ba và bốn chuỗi trong nhiều lần đảo ngược, không có chuỗi mở và không phải đặt ngón tay "đè" một chuỗi mà không chạm vào nó. Sử dụng chuỗi DFG # B, một chuỗi hợp âm như "Bbm F Bbm Gb Db Ebm Db F Bbm F F7 Bbm" (Bài hát Nàng tiên cá) hoạt động rất dễ dàng. Chỉ cần thay đổi lên xuống một lần. Có một bước trao đổi nửa bước, nhưng điều đó chỉ có nghĩa là di chuyển lên một băn khoăn. Mặc dù vậy, chúng tôi chưa tìm ra cách tốt nhất để làm với hai chuỗi còn lại.
supercat

@supercat: thật thú vị, tôi sẽ thử cái này trên cây đàn guitar của tôi vào ngày mai ...
đã ngừng quay ngược lại vào

Tôi muốn nghe những gì bạn nghĩ. Tôi đã nhặt một cây đàn guitar cách nhau vài năm, và tiếp tục bỏ cuộc vì những ngón tay có vẻ vừa độc đoán vừa vụng về. Sau đó, tôi đã suy nghĩ về những gì điều chỉnh sẽ cho phép ngón tay đơn giản. Vì các hợp âm dạng đóng có các khoảng từ một phần ba nhỏ đến một phần tư hoàn hảo, điều chỉnh các chuỗi thành một phần ba nhỏ có nghĩa là mỗi chuỗi sẽ được làm ẩm tại một điểm không thấp hơn chuỗi bên dưới. Nếu tôi có thể thử một cây guitar thuận tay trái, tôi có thể thử những đoạn thứ tư hoàn hảo với thứ tự chuỗi bị đảo ngược, vì nó sẽ tương tự.
supercat

Như vậy, điều chỉnh đến một phần ba nhỏ có nghĩa là với mỗi vị trí của ngón đầu tiên trên chuỗi thấp nhất, sẽ có ba lần đảo ngược hợp âm chính và ba lần đảo ngược hợp âm nhỏ có sẵn. Người ta cũng có thể chơi hợp âm thứ bảy bằng cách đặt ngón tay thứ hai trên ba dây trên cùng. Đối với Nàng tiên cá, bắt đầu vào băn khoăn thứ ba và chơi F-Bb-DF (với các ngón tay 1-3-3-4). Khi đó F là FACF (1-2-2-4). Gb đang băn khoăn, ngón tay 1-2-2-4 (như F). Db trở lại băn khoăn, 1-3-4-4. Ebm đã sao lưu, 1-2-4-4.
supercat

Tôi chỉ mất vài giờ để đi đến điểm mà tôi có thể chơi một số bản nhạc một cách trơn tru (bao gồm cả Bài hát Nàng tiên cá đã nói ở trên) sau khi làm việc với sự trợ giúp của bàn phím, những nốt hợp âm phù hợp nên là gì. Khi tôi đã thử phong cách này, nó cảm thấy rất tự nhiên và tôi thực sự thích cách người ta có thể sử dụng cả ba nghịch đảo của mỗi hợp âm chính và phụ. Nếu người ta chỉ muốn các hợp âm chính và phụ, một điều chỉnh như F-Ab-B-Eb-Gb-D về mặt lý thuyết có thể cho phép các hợp âm chính và phụ sáu ngón với ngón tay dễ dàng (1-2-2-3-4-4 hoặc 1 -1-2-3-3-4) nhưng không có nghịch đảo.
supercat

2

390 345 340 Bản tin

Đơn giản hóa theo cách tiếp cận thực dụng guitar (hình chữ E chỉ là một biến thể của hình chữ A, chuyển xuống một chuỗi, với một ngón tay thay đổi). Mượn ý tưởng chuỗi được mã hóa từ các câu trả lời khác.

[/p{print}/x{exch}/e{cvx exec}/d{dup 0
get}/f{forall}(A0#1B2C3D5E7F8G:b;){}forall/m{dup
4 2 copy get 1 sub put}109{m 48}/+{[3 1 roll x{1
index add x}f]}/*{[0 0 2 2 2 0 0]x{load e 48 sub
+}f d 12 gt{-12 +}if d 6 gt{m -7 + 1}{0}ifelse 6
getinterval}>>begin[ARGUMENTS{*}f][(E)(A)(D)(G)(B)(e)]6{[x
e p( )p]x[x{[x e( )cvs p(---)p]}f]x()=}repeat

Trước đây:

450 438 418 Bài viết

Tôi cũng đã sửa định dạng đầu ra với cái này. (Các phiên bản trước đã bắt đầu "E ---" thay vì "e".)

<</i{index}/a{add}/p{pop}/x{exch}/g{getinterval}/r{print}/f{forall}/e{exec}>>begin<<65[0
2 3 5 -5 -4 -2]{1 i 1 a}f p 35{1 a}98{1 sub}109{x dup
4 20 put x}>>begin[ARGUMENTS{[x[0 5 12 17 21 24 29
0]x{load e}f x{1 i a x}f]dup 0 get 0 ge{0}{1}ifelse 7
g[0 -5 -10 -15 -19 -24 -29]0 1 6{2 copy get 3 i 2 i
get a 3 copy put p p}for x p 0 6
g}f][(E)(A)(D)(G)(B)(e)]6{[x cvx e r( )r]x[x{[x cvx
e( )cvs r(---)r]}f]x(\n)r}repeat

Cách chạy nó: gsnd -q -- tab.ps Bm Gb A E G D Em F\#(ẩn phần sắc nét khỏi vỏ).

Các un-golfed phiên bản gần như khó khăn hơn so với cái golfed. Nhưng tôi đã cố gắng kỹ lưỡng. Chỉnh sửa: thêm một vài bình luận về các bit-tricky.

%!PS
<<    %axioms and operations
/t{2 2 1}    %major tetrachord
/m{t t 2}    %mixolydian mode
/u{2 1 2}    %minor tetrachord
/a{u u}      %aolian mode
/s{m m t}    %2.5-octave mixolydian intervals
/r{3 1 roll}
/${[exch 0 exch{1 index add}forall]}    %running sum: convert (relative)intervals to (abstract)fretstops
/+{[r exch{1 index add exch}forall pop]}    %scale array by scalar
/@{[r{2 copy get r pop}forall pop]}    %select array elements from array of indices
/&{0 1 3 index length 1 sub{    %array2 += array1
    2 copy get 3 index 2 index get add 3 copy put pop pop}for exch pop}
>>begin<<    %map ascii values to scaling functions
65[a]$    %generate fretstops of the A aolian scale to assign scalars to note names
[0 0 0 0 -12 -12 -12]&    %drop E F and G down an octave
{[exch/+ cvx]cvx 1 index 1 add}forall pop    %generate the pairs 'A'->{0 +}, 'B'->{2 +}
35{1 +}     %'#'-> scale up by one
98{-1 +}    %'b'-> scale down by one
109{dup 4 2 copy get 1 sub put}     %'m'-> tweak the 'third' down by one
%generate chord pattern from (string)
/*{[s]$       %generate fretstops of the E mixolydian scale
  [1 4 8 11 13 15 18]    %A-shape figured bass: IV chord of E mixolydian
  -1 +       %convert scale degrees to array indices
  @       %generate chord template by selecting indices from mixolydian scale
  exch{load exec}forall       %execute ascii values, scaling the pattern
  dup 0 get 0 ge{0}{1}ifelse 6 getinterval    %discard first note if it has fallen off the bottom
  [0 -5 -10 -15 -19 -24]&}    %subtract the string offsets
>>begin    %activate definitions
%(A)* pstack()= clear    %[0 0 2 2 2 0]
%(B)* pstack()= clear    %[2 2 4 4 4 2]
%(F#)* pstack()= clear    %[2 4 4 3 2 2]
%(Abm)* pstack()=    %[4 6 6 4 4 4]
[ARGUMENTS{*}forall]    %convert array of strings to array of patterns
[(E)(A)(D)(G)(B)(e)]    %array of string names
6{    %for each "string"
    [exch cvx exec print( )print]    %pop string name and print with space
    exch       %put names behind numbers
    [exch{     %for each "chord"
        [exch cvx exec( )cvs print(---)print]    %pop number, convert, print with trailing hyphens
    }forall]    %zip up chord array for next iteration
    ()=         %print a newline
    exch        %put numbers behind names
}repeat

Và làm thế nào về House of the Rising Sun như một bài kiểm tra?

04:51 PM:~ 0> gsnd -q -- tabb.ps Em G A C Em G B B Em G A C Em B Em B|sed 's/^/    /'
e 0---3---0---3---0---3---2---2---0---3---0---3---0---2---0---2---
B 0---3---2---5---0---3---4---4---0---3---2---5---0---4---0---4---
G 0---4---2---5---0---4---4---4---0---4---2---5---0---4---0---4---
D 2---5---2---5---2---5---4---4---2---5---2---5---2---4---2---4---
A 2---5---0---3---2---5---2---2---2---5---0---3---2---2---2---2---
E 0---3---0---3---0---3---2---2---0---3---0---3---0---2---0---2---

Tôi đã viết một bình luận về mã này trong một câu trả lời khác ở đây .
kẻ lừa đảo
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.