গিটার নোটে নম্বর জোড়া অনুবাদ করুন Translate


18

একটি গিটার ফ্রেটবোর্ড চিত্রটি দেখতে এরকম দেখাচ্ছে:

  0  1  2  3  4  5  6  7  8  9 10 11 12   <- Fret number (0 means it's open)
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E
|-B--C--C#-D--D#-E--F--F#-G--G#-A--A#-B 
|-G--G#-A--A#-B--C--C#-D--D#-E--F--F#-G
|-D--D#-E--F--F#-G--G#-A--A#-B--C--C#-D
|-A--A#-B--C--C#-D--D#-E--F--F#-G--G#-A
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E

আপনি দেখতে পাচ্ছেন, প্রথম স্ট্রিংটি (উপরে থেকে) খোলার একটি E। প্রথম স্ট্রিংয়ের প্রথম ফ্রেটটি হ'ল একটি F। তৃতীয় স্ট্রিংয়ের চতুর্থ ফ্রেটটি হ'ল ক B। মনে রাখবেন যে প্রথম নোটটি জিরোথ ফ্রেট, প্রথমটি নয়।

এটি বিন্যাসে সংখ্যা সহ লেখা যেতে পারে string, fret। স্ট্রিংগুলি উপরে থেকে নীচে 1 থেকে 6 পর্যন্ত সংখ্যাযুক্ত। ফ্রেটগুলি বাম থেকে ডানে 0 থেকে 12 পর্যন্ত গণনা করা হয়। প্রথমটি Eতাই 1, 0। আরও কয়েকটি উদাহরণ:

1, 0 --> E
1, 1 --> F
3, 5 --> C
5, 1 --> A# 
6, 6 --> A#

চ্যালেঞ্জ:

Nসংখ্যার জোড় ( sএবং f) নিন এবং একটি সীমিত নোট উত্তরসূচি আউটপুট।

  • ইনপুটটি কোনও উপযুক্ত বিন্যাসে থাকতে পারে। টিপলস, 2 ডি-ম্যাট্রিক্স, দুটি পৃথক তালিকা, একটি আন্তঃবিযুক্ত তালিকা (স্ট্রিং, ফ্রেট, স্ট্রিং, ফ্রেট ...) ইত্যাদি
  • আউটপুট স্বনটি পৃথক করা উচিত, তবে ডিলিমিটারটি alচ্ছিক (কমা, স্থান, ড্যাশ ...)। আউটপুট উচ্চতর বা নিম্নতর ক্ষেত্রে হতে পারে।
  • s(স্ট্রিংয়ের জন্য) সীমার মধ্যে থাকবে [1, 6](আপনি i 0-indexed বেছে নিতে পারেন)
  • f (fret জন্য) পরিসীমা হবে [0, 12]

পরীক্ষার কেস এবং উদাহরণ:

1 4 5 2 1 3   <- String
4 2 6 3 5 1   <- Fret
G# E D# D A G#

6 2 3 1 4 2 3 2 2 2 6 5 2
0 1 2 3 4 5 6 7 8 9 10 11 12
E C A G F# E C# F# G G# D G# B  

3 3 3 3 3 3 3 3 3 3 3 3 3   <- String
0 3 5 0 3 6 5 0 3 5 3 0 0   <- Fret
G A# C G A# C# C G A# C A# G G     

// The same test case, but different input and output format:
(3,0)(3,3)(3,5)(3,3)(3,6)(3,5)(3,0)(3,3)(3,5)(3,3)(3,0)(3,0)    
G,A#,C,G,A#,C#,C,G,A#,C,A#,G,G     

শুভকামনা, এবং শুভ গল্ফিং!


গিটারিস্ট নয় (এমনকি কোনও শালীন সংগীতশিল্পীও নয়), তবে আপনি যদি এখানে স্বীকৃত সুরেরূপে আউটপুট আশা করে থাকেন তবে এখানে কি কোনও উল্লেখযোগ্য বাদ নেই? এটি হ'ল নোটের সময়কাল - পুরো, অর্ধ, ত্রৈমাসিক নোট এবং সি।
jamesqf

1
@ জামেস্কেফ না, আপনি যতক্ষণ গানটি জানেন ততক্ষণ এটি পুরোপুরি ঠিক আছে। এটি বর্তমানে চূড়ান্ত-গিটার ডটকমের সর্বাধিক জনপ্রিয় গান । পরিচয় দেখুন।
স্টিভি গ্রিফিন

উত্তর:


4

05AB1E , 48 47 43 40 বাইট

ব্যবহার সিপি-1252 এনকোডিং।

উভয় স্ট্রিং এবং ফ্রেট 0-ভিত্তিক।

v7YT5¾7)y`Šè+•™ÎÚ,Ülu•žh'#A«‡•7V3•3BS£è,

ব্যাখ্যা

v                                # for each pair in input
 7YT5¾7)                         # the list [7,2,10,5,0,7]
 y`                              # flatten the pair [string, fret] and places on stack
 Šè                              # index into the list above using the string
 +                               # add the fret
 •™ÎÚ,Ülu•žh'#A«‡•7V3•3BS£       # list of accords
 è                               # index into the string using the number calculated above
 ,                               # print

এটি অনলাইন চেষ্টা করুন!

আদনানকে ধন্যবাদ 7 বাইট সংরক্ষণ করা


1
বাগগুলি অনুসন্ধান করা খুব গোল্ফ! .-)
লুইস মেন্ডো

"AA#BCC#DD#EFF#GG#"•7V3•3BS£পরিবর্তে "A A# B C C# D D# E F F# G G#"#কয়েক বাইট সংক্ষিপ্ত :)।
আদনান

@ আদনান: ওহ, সুন্দর বেস-পরিবর্তন :)
এমিগানা ২

এছাড়াও "AA#BCC#DD#EFF#GG#"স্ট্রিংয়ের একটি সংকুচিত সংস্করণ : •™ÎÚ,Ülu•žh'#A«‡(যেহেতু ছোট হাতের অনুমতি দেওয়া হয়েছে: পি)।
আদনান

9

জাভাস্ক্রিপ্ট (ES6), 79 70 বাইট

a=>a.map(([s,f])=>"AA#BCC#DD#EFF#GG#".match(/.#?/g)[(s*7+(s>2)+f)%12])

1-ভিত্তিক স্ট্রিংগুলির প্রয়োজন। সম্পাদনা: @ নিমির পুরানো উত্তরের উপর ভিত্তি করে সরাসরি স্ট্রিংটি ফ্রেট রূপান্তর করতে গণনা করে 9 বাইট সংরক্ষণ করা হয়েছে।


@ আরনাউল্ড ধন্যবাদ তবে আমি পরিবর্তে @ নিমির উত্তর বরাদ্দ করেছিলাম।
নীল

সত্যই অনেক বেশি দক্ষ;)
আর্নল্ড

চালাক। খুব ছদ্মবেশী উত্তর
রোহান ঝুনঝুনওয়ালা

7

গণিত, 62 বাইট (প্রতিদ্বন্দ্বী)

<<Music`;MusicScale[100(#2+{24,19,15,10,5,0}[[#]])&@@@#,E2,9]&

{24,19,15,10,5,0}এবং E2ছয় গিটার স্ট্রিং ওপেন স্ট্রিং টোন প্রতিনিধিত্ব (উদাহরণস্বরূপ, শীর্ষ স্ট্রিং নোট E2 উপরে 24 semitones যায়)। অ-প্রতিযোগিতামূলক কারণ এটি নোটগুলির নাম মুদ্রণ করে না - এটি নোটগুলির ক্রমটি খেলে ! (কেবলমাত্র যদি আপনার গাণিতিক থাকে তবে দুর্ভাগ্যক্রমে) উদাহরণস্বরূপ,

<<Music`;MusicScale[100(#2+{24,19,15,10,5,0}[[#]])&@@@#,E2,9]&@
 {{4,0},{3,2},{2,3},{1,2},{5,0},{4,2},{3,2},{2,2},
  {5,2},{4,4},{2,0},{2,3},{6,2},{4,4},{3,2},{2,2},
  {6,3},{4,0},{3,0},{2,0},{4,0},{4,4},{3,2},{2,3},
  {6,3},{3,0},{2,0},{2,3},{5,0},{4,2},{3,2},{2,2},{4,0}}

প্যাচবেলের ক্যানন থেকে খোলার 4 বার বা তাই খেলবে। (যা আমি দাঁড়াতে পারি পাচেলবেলের ক্যাননের প্রায় অনেকাংশে)


7

এমএটিএল , 48 47 45 বাইট

ইনপুট ফর্ম্যাট সংক্রান্ত সংশোধনের জন্য @ এমিগানাকে ধন্যবাদ।

গিটার এবং কোড গল্ফ ... আমি এই উত্তর দিতে হবে!

'$)-27<'i)-'F F# G G# A A# B C C# D D#

ইনপুট ফর্ম্যাটটি হ'ল: (1-ভিত্তিক) স্ট্রিংয়ের একটি অ্যারে, তারপরে (0-ভিত্তিক) ফ্রেটের একটি অ্যারে।

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা

এই উত্তরে ব্যবহৃত কিছু ভাষা বৈশিষ্ট্য:

  • কিছু গাণিতিক ক্রিয়াকলাপ প্রয়োগ করা হলে একটি স্ট্রিং স্বয়ংক্রিয়ভাবে ASCII কোড পয়েন্টের একটি সংখ্যাসূচক অ্যারে রূপান্তরিত হয়।
  • গাণিতিক ক্রিয়াকলাপগুলি উপাদান অনুসারে কাজ করে অর্থাৎ ভেক্টরাইজড। সুতরাং স্ট্রিংয়ের বিয়োগফল এবং একই আকারের একটি সংখ্যাসূচক অ্যারে সংশ্লিষ্ট এন্ট্রিগুলির বিয়োগফলের সাথে একটি অ্যারে দেয়।
  • সূচকটি 1-ভিত্তিক এবং মডুলার
  • একটি সেল অ্যারে অন্যান্য ভাষার তালিকার মতো। এটিতে নির্বিচারে উপাদান থাকতে পারে, বিভিন্ন ধরণের বা আকারের সম্ভবত অ্যারে। এখানে একটি সেল অ্যারে বিভিন্ন দৈর্ঘ্যের (নোটের নাম) স্ট্রিং সংরক্ষণ করতে ব্যবহৃত হবে।

মন্তব্য করা কোড:

'$)-27<'                       % Push this string
i                              % Take first input (array of guitar strings)
)                              % Index into the string. For example, input [1 3] gives
                               % the string '$-' (indexing is 1-based)
-                              % Implicitly take second input (array of guitar frets).
                               % Subtract element-wise. This automatically converts the
                               % previous string into an array of ASCII codes. For
                               % example, second input [1 5] gives a result [-35 -40],
                               % which is [1 5] minus [36 45], where 36 and 45 are the
                               % ASCII codes of '$-' 
'F F# G G# A A# B C C# D D# E' % Push this string
Yb                             % Split at spaces. Gives a cell array of 12 (sub)strings:
                               % {'F', 'F#', 'G', ..., 'E'}
w)                             % Swap and index into the cell array of strings.
                               % Indexing is 1-based and modular. In the example, since
                               % the cell array has 12 elements, the indexing array
                               % [-35 -40] is the same [1 8], and thus it gives a 
                               % (sub-)array formed by the first and eighth cells: 
                               % {'F', 'C'}. This is displayed as the cells' contents,
                               % one per line

1
আমি জানতাম আমি "গিটার" শব্দটি দেখামাত্রই আপনার কাছ থেকে একটি উত্তর পেতে যাচ্ছি
সুইভর

1
@ লুইস মেন্ডো খুব সুন্দর! আমি
অসি

4

জাভা, 174

String f(int[]s,int[]f){String o="";for(int i=0;i<s.length;++i){int n =(7*s[i]-7+f[i]+(s[i]>2?1:0))%12*2;o+="E F F#G G#A A#B C C#D D#".substring(n,n+2).trim()+" ";}return o;}

Ungolfed:

  String f(int[] s, int[] f) {
    String o = "";
    for (int i = 0; i < s.length; ++i) {
      int n = (7 * s[i] - 7 + f[i] + (s[i] > 2 ? 1 : 0)) % 12 * 2;
      o += "E F F#G G#A A#B C C#D D#".substring(n, n + 2).trim() + " ";
    }
    return o;
  }

3

সি, 104 103 বাইট

main(s,f){for(;~scanf("%d%d",&s,&f);printf("%.2s\n",
"E F F#G G#A A#B C C#D D#"+(f+7*~-s+(s>2))%12*2));}

স্টিডিনে string fretজোড়া হিসাবে সংখ্যা নেয় এবং প্রতিটি জুটির পরে নোটটি আউটপুট করে। উদাহরণ:

1 4
G#
4 2
E 
5 6
D#
2 3
D 

3

রুবি, 63 বাইট

অনুক্রমে 2-উপাদান বিন্যাসের একটি অ্যারের লাগে, [string,fret]

->x{x.map{|i|"BEADGCF"[6-n=((i[0]-3)%5+2+i[1]*7)%12]+?#*(n/7)}}

ব্যাখ্যা

স্ট্যান্ডার্ড টিউনিংয়ে গিটারটি কয়েকটি স্ট্রিংড যন্ত্রগুলির মধ্যে একটি (নমযুক্ত বা ফেটে যাওয়া) এর স্ট্রিংগুলির মধ্যে অসামঞ্জস্যপূর্ণ অন্তর রয়েছে। বেশিরভাগের সাথে সংলগ্ন স্ট্রিংগুলির (এক "চতুর্থ") বা সমস্ত সংলগ্ন স্ট্রিংগুলির (একটি "পঞ্চম।") মধ্যে একটি ধারাবাহিক 7-সেমিটোন অন্তর 5 বা 4 এর ফ্রিকোয়েন্সি অনুপাতের সাথে সামঞ্জস্যপূর্ণ 5-সেমিটোন অন্তর রয়েছে এবং যথাক্রমে 2: 3, এবং শুধুমাত্র ফ্রিকোয়েন্সি অনুপাত 1: 2 সহ "অষ্টক" -র ক্ষেত্রে দ্বিতীয় স্থানে রয়েছে।

গিটারে বেশিরভাগ 5-সেমিটোন অন্তর থাকে। যদি এর মধ্যে 5 টি থাকে তবে এটি 1 ম এবং 6th ষ্ঠ স্ট্রিংয়ের মধ্যে 25 টি সেমিটোনসের পার্থক্য রাখে। পরিবর্তে, ২ য় এবং তৃতীয় স্ট্রিংয়ের মধ্যবর্তী ব্যবধানটি হ্রাস করে ৪ টি সেমিটোন করা হয়, এটি ২৪ টি সেমিটোন (২ টি অক্টেভ) এর পার্থক্য দেয় যা জাল বাজানোর জন্য ভাল।

এটি প্রোগ্রামটির জন্য অসুবিধাগুলি, তাই আমরা 1 টি সূচকযুক্ত গিটার অন্তর্নিবেশকে 0 টি সূচকযুক্ত 5-স্ট্রিং-বেস ইনটোনেশনে পরিবর্তন করে শুরু করি, যার 5 টি সেমিটনের সমস্ত অন্তর রয়েছে:

formula (i[0]-3)%5
Before                            After
String      6 5 4 3 2 1           String 4 3 2 1 0
Note        E A D G B E           Note   B E A D G

এরপরে আমরা 2 যুক্ত করব এবং একটি কল্পিত 12 স্ট্রিং বেসের টিউনিংটি দেব, নীচে খোলা স্ট্রিংগুলির প্রসারিতকরণের সাথে এবং সমস্ত বিরতি 5 সেমিটোন (12 স্ট্রিং "বেসস" বিদ্যমান রয়েছে তবে আমি নিশ্চিত নই যে এর সাথে অনেকগুলি আছে টিউনিং।)

String       11 10 9  8  7  6  5  4  3  2  1  0 
Note         A# D# G# C# F# B  E  A  D  G  C  F

যেমন দেখা যায়, সমস্ত শার্পগুলি একসাথে গ্রুপ করা হয়। এই প্যাটার্নটি বিজ্ঞাপনের পুনরাবৃত্তি হতে পারে। এটি হবে "পঞ্চমাংশ বৃত্তের" নামে পরিচিত এবং এটা সত্য যে কারণে পশ্চিম বাদ্যযন্ত্র স্কেল (টিউনিং সমন্বয় একটি বিট বৃত্ত বন্ধ করা যেতে পারে সঙ্গে মৌলিক হয় (3/2)**12এবং 2**7অনুরূপ নম্বর আছে।

এখন আমরা ফ্রেট প্যারামিটারটি ব্যবহার করি। এখানে অন্যান্য অনেক উত্তরগুলির মতো নয় যা স্ট্রিং প্যারামিটারটিকে বহু সংখ্যক ফ্রেটে অনুবাদ করে, আমি ফ্রেট প্যারামিটারটিকে কয়েকটি স্ট্রিংয়ে অনুবাদ করি। উপরের সারণীতে এটি দেখা যাবে যে স্ট্রিং নম্বরটিতে 7 যোগ করা আমাদের একটি স্ট্রিংয়ে রাখে যার নোটের নামটি এক সেমিটোন উচ্চ higher (এটি সম্পূর্ণ আলাদা অষ্টভরে রয়েছে তবে এতে কিছু আসে যায় না)) সুতরাং আমরা i[1]*7স্ট্রিং নম্বরটিতে যুক্ত করি এবং এটি মডুলো 12 এ নিয়ে যাই :

n=(i[0]-3)%5+2+i[1]*7)%12

6 থেকে -5 পরিসরে একটি সংখ্যা পেতে আমরা এটি 6 থেকে বিয়োগ করি এবং চিঠিটি সন্ধান করি BEADGCF(রুবি নেতিবাচক সূচকগুলিকে অ্যারের শেষের দিকে ঘিরে রাখতে দেয়)) যদি আউটপুট সম্পূর্ণ n>=7করার জন্য আমাদের একটি #চিহ্ন যোগ করতে হয় তবে ।

পরীক্ষা প্রোগ্রাম

f=->x{x.map{|i|"BEADGCF"[6-n=((i[0]-3)%5+2+i[1]*7)%12]+?#*(n/7)}}

z=[[6, 2, 3, 1, 4, 2, 3, 2, 2, 2, 6,5,2],[0, 1, 2, 3, 4 ,5 ,6 ,7, 8, 9, 10, 11, 12]].transpose

puts f[z]

আউটপুট

E
C
A
G
F#
E
C#
F#
G
G#
D
G#
B

3

সি #, 131 বাইট

string n(int[]s,int[]f){return string.Join(" ",s.Zip(f,(x,y)=>"E,F,F#,G,G#,A,A#,B,C,C#,D,D#".Split(',')[(7*x-7+y+(x<3?0:1))%12]));}

দুটি পৃথক তালিকা ইনপুট করুন, স্ট্রিংগুলি 1 ভিত্তিক।


1
সাইটে স্বাগতম! ভাল উত্তর।
ডিজেএমসিএমহেম

@ ডিজেএমসিএমহেম: আপনাকে ধন্যবাদ :-)
টাকো

1

ক্লোরা , 55 বাইট

@T[0,7,2,10,5,0,7]+N%12@T[,A,A#,B,C#,D,D#,E,F,F#,G,G#]!

ব্যাখ্যা

@ সংখ্যাগত মোড (সংখ্যা হিসাবে ইনপুট পড়ুন)

T[0,7,2,10,5,0,7] অ্যারে ব্যবহার করে ইনপুটটি রূপান্তর করুন, প্রাক্তন অ্যারে [ইনপুট]

+N বর্তমান ইনপুটটিতে এন (পরবর্তী ইনপুট মান) যুক্ত করুন

%12 মডুলো 12 বর্তমান ইনপুট মান

@ সংখ্যার মোড অফ করুন

T[,A,A#,B,C#,D,D#,E,F,F#,G,G#] ইনপুটটিকে একটি অ্যারেতে অনুবাদ করুন

! আউটপুট মান হিসাবে ইনপুট ব্যবহার করুন


1

জাভা 7 197, 163 বাইট

void f(int[]s,int[]f){String[]l={"A","A#","B","C","C#","D","D#","E","F","F#","G","G#"};int[]d={0,7,2,10,5,0,7};int j=0;for(int i:s)out.print(l[(d[i]+f[j++])%12]);}

Ungolfed

  void f(int[]s,int[]f){
 String[]l={"A","A#","B","C","C#","D","D#","E","F","F#","G","G#"};
int[]d={0,7,2,10,5,0,7};
    int j=0;
    for(int i:s)
        out.print(l[(d[i]+f[j++])%12]);



}

0

পাইথন 2, 94, 91 , 88 বাইট

for s,f in input():print"A A# B C C# D D# E F F# G G#".split()[([7,2,10,5,0,7][s]+f)%12]

সম্ভবত কিছু সুস্পষ্ট উন্নতি করতে হবে। ইনপুট জোড়গুলির একটি তালিকা এবং স্ট্রিংগুলি 0-সূচীযুক্ত, যেমন:

[0, 4], [3, 2], [4, 6]...

0

হাস্কেল, 83 82 বাইট

zipWith$(!!).(`drop`cycle(words"A# B C C# D D# E F F# G G# A")).([6,1,9,4,11,6]!!)

স্ট্রিংগুলির একটি তালিকা এবং ফ্রেটগুলির একটি তালিকা নেয়, উভয়ই 0-সূচিযুক্ত। ব্যবহারের উদাহরণ:

Prelude >  ( zipWith$(!!).(`drop`cycle$words"A# B C C# D D# E F F# G G# A").([6,1,9,4,11,6]!!) ) [0,1,2,3,4,5] [0,0,0,0,0,0]
["E","B","G","D","A","E"]

শুরু হওয়া নোটগুলির অসীম তালিকা থেকে, স্ট্রিংয়ের সূচকে A#তালিকার দেওয়া নোটের সংখ্যাটি ছেড়ে দিন [6,1,9,4,11,6]এবং বাকী তালিকা থেকে ফ্রেটের সূচীতে নোটটি বেছে নিন।


দুর্ভাগ্যক্রমে স্ট্রিংগুলির মধ্যে অন্তরগুলি সমস্ত সমান নয়।
নিল

@ নীল: ... ঠিক আছে।
নিমি

এটি জাভাস্ক্রিপ্টের একটি সাধারণ ফিক্স হিসাবে দেখা গেছে - (s*7)+(s>2) - তাই আমি এখন আমার উত্তরে এটি ব্যবহার করছি।
নীল

@ নীল: ... এ নিয়েও কাজ করছি।
নিমি

0

জাভাস্ক্রিপ্ট (ES6), 82 81 বাইট

a=>a.map(b=>(q=(b[0]+.3+b[1]*7.3|0)%12/1.7+10.3).toString(17)[0]+(q%1>.5?"#":""))

আমি একটি গণিত উত্তর চেষ্টা করতে চেয়েছিলেন, কিন্তু এটি একটি দীর্ঘ দীর্ঘ পরিণত। এটি গল্ফ করার উপায় আছে ...

পরীক্ষার স্নিপেট


আমি ব্যবহার করতে চেয়েছিলাম toString(17)কিন্তু যুক্তিসঙ্গত বাইট গণনায় এটি পেতে সংগ্রাম করেছিলাম ।
নীল

0

পিএইচপি, 102 বাইট

<?foreach($_GET[i]as$t)echo[E,F,"F#",G,"G#",A,"A#",B,C,"C#",D,"D#"][[0,7,3,10,5][$t[0]%5]+$t[1]%12]._;

উদাহরণস্বরূপ '[[2,0], [5,3], [2,12], [3,8], [0,3]]' হিসাবে একাধিক অ্যারে উভয়কে ইনপুট করুন

মোড 7 সংঘের ভিত্তিতে # সেট করতে ভাল বিকল্প 106 বাইট রয়েছে

<?foreach($_GET[i]as$t)echo EFFGGAABCCDD[$d=[0,7,3,10,5][$t[0]%5]+$t[1]%12].["","#"][$d%7?$d%7%2?0:1:0]._;
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.