মিউজিক ইন্টারভাল সলভার


11

এখানে চিত্র বর্ণনা লিখুন

সংগীত তত্ত্বে, একটি বিরতি দুটি পিচের মধ্যে পার্থক্য। প্রতিটি পিচ অর্ধ-পদক্ষেপের সংখ্যা (সি এবং সি # এর মধ্যে পার্থক্য) বা পুরো পদক্ষেপ (সি এবং ডি এর মধ্যে পার্থক্য) দ্বারা সংজ্ঞায়িত হয়। একটি পুরো পদক্ষেপটি দুটি অর্ধ-পদক্ষেপের সমান। এখানে সমস্ত ডিফল্ট অন্তর এবং তাদের প্রতিনিধিত্বকারী অর্ধ-পদক্ষেপের একটি তালিকা রয়েছে:

0     Perfect Unison
2     Major Second
4     Major Third
5     Perfect Fourth
7     Perfect Fifth
9     Major Sixth
11    Major Seventh
12    Perfect Octave

ডিফল্ট অন্তরগুলিতে 3 টি ভিন্নতা রয়েছে, অপ্রাপ্তবয়স্ক , হ্রাস হওয়া এবং বাড়ানো হয়

  • একটি ছোট ব্যবধান একটি বড় ব্যবধানের তুলনায় আধা-পদক্ষেপ কম তবে একটি নিখুঁত ব্যবধান নয়। সুতরাং আপনার একটি গৌণ দ্বিতীয় (1), একটি গৌণ তৃতীয় (3), একটি নাবালিক ষষ্ঠ (8) এবং একটি ছোটখাট সপ্তম (10) রয়েছে। কোনও ছোটখাট চতুর্থ, অপ্রধান পঞ্চম, নাবালিক একত্রীকরণ বা মাইনর অষ্টক বলে কোনও জিনিস নেই কারণ এগুলি সমস্ত নিখুঁত অন্তর।

  • একটি হ্রাস ব্যবধান একটি অপ্রাপ্তবয়স্ক বা নিখুঁত ব্যবধানের চেয়ে আধা-পদক্ষেপ কম । হ্রাস দ্বিতীয় (0), তৃতীয় (2) হ্রাস, চতুর্থ (4), হ্রাস পঞ্চম (6), কমে ষষ্ঠ (7), সপ্তম (9) এবং হ্রাস অষ্টভ (11)।

  • একটি বর্ধিত ব্যবধান বড় বা নিখুঁত ব্যবধানের চেয়ে আধা-ধাপ বেশি । আমরা অগমেন্টেড ইউনিসন (1), অগমেন্টেড সেকেন্ড (3), অগমেন্টেড তৃতীয় (5), আগস্ট চতুর্থ (6), অগমেন্টেড পঞ্চম, (8), অগমেন্টেড ষষ্ঠ (10) এবং অগমেন্টেড সপ্তম (12) রয়েছে।

চ্যালেঞ্জ:

আপনাকে অবশ্যই এমন একটি প্রোগ্রাম বা ফাংশন লিখতে হবে যা বেশ কয়েকটি অর্ধ পদক্ষেপ বা পুরো পদক্ষেপ নেয় এবং তারপরে এই বিরতির বৈধ ইংরেজি বিবরণগুলির মধ্যে একটি মুদ্রণ করে । আপনি কোন বিবরণটি চয়ন করেন তা বিবেচ্য নয়, যতক্ষণ না এটি আইও টেবিলের সাথে ঠিক মেলে। আপনি এটি একটি স্ট্রিং হিসাবে নিতে পারেন

"5w" == 5 whole steps
"3h" == 3 half steps

অথবা একটি সংখ্যা এবং একটি স্ট্রিং / চর হিসাবে।

5, "w" == 5 whole steps
3, "h" == 3 half steps.

আপনি ধরে নিতে পারেন যে প্রতিটি ইনপুট 0 থেকে 12 টি অর্ধ ধাপের মধ্যে থাকবে।

আইও টেবিল

সমস্ত গ্রহণযোগ্য আউটপুটগুলিতে অর্ধ-পদক্ষেপের সংখ্যা ম্যাপিংয়ের একটি সম্পূর্ণ তালিকা এখানে রয়েছে।

0       Perfect unison, Diminished second   
1       Minor second, Augmented unison  
2       Major second, Diminished third  
3       Minor third, Augmented second   
4       Major third, Diminished fourth  
5       Perfect fourth, Augmented third     
6       Diminished fifth, Augmented fourth  
7       Perfect fifth, Diminished sixth 
8       Minor sixth, Augmented fifth        
9       Major sixth, Diminished seventh 
10      Minor seventh, Augmented sixth      
11      Major seventh, Diminished octave    
12      Perfect octave, Augmented seventh   

এখানে কিছু নমুনা I / O:

5w      Minor Seventh
5h      Augmented Third
12h     Perfect Octave
12w     UNDEFINED
1w      Diminished third
2h      Major Second


7
@ ক্যাটস আরে ফ্লুফি আমার দুর্বল বানান ভাল চ্যালেঞ্জগুলি লেখার ক্ষমতা হ্রাস করেছে। ಠ_ಠ
জেমস

আরও ভাল সম্পাদনা সহ এখনও একটি ভাল চ্যালেঞ্জ! : পি
আর

উত্তর:


1

রুবি, রেভ বি 138 বাইট

->n,s{i=12-n-n*(s<=>?h)
[a='Augmented','Major','Minor',d='Diminished',a,'Perfect',d][i%7]+' '+%w{seventh fifth third unison}[i%7/4+i/7*2]}

পুনরাবৃত্তি না করে 5 বাইট সংরক্ষণ করা হয়েছে Augmented/Diminished। ব্যবহার করে 1 বাইট সংরক্ষণ করা হয়েছে ?h

রুবি, রেভ এ 144 বাইট

->n,s{i=12-n-n*(s<=>'h')
%w{Augmented Major Minor Diminished Augmented Perfect Diminished}[i%7]+' '+%w{seventh fifth third unison}[i%7/4+i/7*2]}

ধারণাটি হ'ল মৌলিক অন্তরগুলির সংখ্যা কমিয়ে আনা (সপ্তম পঞ্চম তৃতীয় এবং একত্রীকরণ) এবং সপ্তদশ এবং পঞ্চমাংশটি তৃতীয়াংশ এবং মতবিরোধের মধ্যে একটি সাদৃশ্যপূর্ণ সম্পর্ক রয়েছে এই সুযোগটি গ্রহণ করা।

চার ধরণের সপ্তম / তৃতীয় এবং পঞ্চম / একত্রীকরণের 3 প্রকার রয়েছে তাই সূচী ভেরিয়েবলটি iঅর্ধ পদক্ষেপের সংখ্যাকে 12 বিয়োগ করে সেট করা হয়, যাতে এক্সপ্রেশনটির প্রথম শব্দটি i%7/4 + i/7*2সঠিকভাবে বেসিক ইন্টারভালের ধরণটি নির্বাচন করে।

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

f=->n,s{                 #n = number of steps. s= step size, w or h
  i=12-n-n*(s<=>'h')     # i=12-n. If s is later in the alphabet than 'h' subtract again for whole steps
  %w{Augmented Major Minor Diminished Augmented Perfect Diminished}[i%7]+
  ' '+%w{seventh fifth third unison}[i%7/4+i/7*2]
}

-1.upto(12){|j|
puts f[j,'h']
}  

0.upto(6){|j|
puts f[j,'w']
}

আউটপুট

Diminished unison
Perfect unison
Augmented unison
Diminished third
Minor third
Major third
Augmented third
Diminished fifth
Perfect fifth
Augmented fifth
Diminished seventh
Minor seventh
Major seventh
Augmented seventh

Perfect unison
Diminished third
Major third
Diminished fifth
Augmented fifth
Minor seventh
Augmented seventh

অপরিজ্ঞাত আচরণের ইনপুট: ফাংশনটি diminished union-1 হাফস্টেপস- এর সঠিক উত্তর দেয় তবে 12 এর বেশি ইনপুটগুলিতে ব্যর্থ হয় For উদাহরণস্বরূপ, এটি perfect unison14 অর্ধ ধাপের জন্য আউটপুট দেয় , কারণ অ্যালগোরিদমটি 12 এর পরিবর্তে 14-এর একটি চক্রের উপর ভিত্তি করে।


2

পাইথন 2, 149 বাইট

def f(n,c):n*=1+(c>'h');print(n-6)%13%2*"Diminished"or"Augmented",'octave seventh sixth fifth fourth third second unison'.split()[71056674174>>3*n&7]

প্রথমত, পুরো পদক্ষেপগুলি অর্ধ ধাপে রূপান্তরিত হয়।

তারপরে, Diminishedবনাম Augmentedমুদ্রিত হয়। সংলগ্ন জন্য এই বিকল্প nযে ব্যতীত n=5এবং n=6একই, যা প্রথমে তাদের একটি সীমানা মডিউল জুড়ে একটি বিজোড় সংখ্যা নির্বাণ করে এটা করা যায় দেব।

অবশেষে, দূরত্বটি মুদ্রিত হয়, তিন-বিট দেখার টেবিলের মাধ্যমে গণনা করা হয়। এটি করার চেয়ে খাটো int('6746543230210'[n])



1

রেটিনা, 153 বাইট

\ D +
$ *
W (*।) | জ
$ 1 $ 1
^ 1 * $
$ ২.0
^ [02479] | 11
হ্রাস $ 0
^ \ ঘ
সংযুক্ত $ 0
10 | 7
ষষ্ঠ
11
অষ্টক
12 | 9
সপ্তম
8
পঞ্চম
4 | 6
চতুর্থ
5 | 2
তৃতীয়
1
মিশ
\ ঘ
দ্বিতীয়

ইনপুট নম্বরটি প্রথমে আনারিতে রূপান্তরিত হয়, তারপরে ডাবল দ্বিগুণ হয় wএবং যে কোনও অক্ষর সরিয়ে ফেলা হয়, কেবল অবিচ্ছিন্ন নম্বর রেখে। এই সংখ্যাটি তখন দশমিক দশকে রূপান্তরিত হয়। শেষ পর্যন্ত চূড়ান্ত আউটপুট তৈরির জন্য কিছু অনুসন্ধান এবং প্রতিস্থাপন প্রয়োগ করা হয়।

উদাহরণ রান:

6 ডাব্লু => 111111w => 111111111111 => 12 => আগস্ট 12 => আগস্ট সপ্তম
7 ঘন্টা => 1111111h => 1111111 => 7 => হ্রাস 7 => হ্রাসযুক্ত ষষ্ঠ
3 ডাব্লু>> 111 ডব্লু>> 111111 => 6 => অগমেটেড 6 => অগাস্টেড চতুর্থ
0 ঘন্টা => এইচ => => 0 => হ্রাস 0 => দ্বিতীয় হ্রাস

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


0

ভিটসি , 166 বাইট

ঠিক আছে, এটি অবশ্যই আরও গল্ফ করা যেতে পারে।

WW2M1+*a+mZ
'dehsinimiD'
'roniM'
'rojaM'
'tcefreP'
'detnemguA'
'dnoces '
'htruof '
'htxis '
'evatco '
6m1m
6m2m
6m3m
6m5m
7m1m
7m4m
7m5m
8m1m
8m2m
8m3m
8m5m
9m1m
9m4m

এটি সম্ভব সর্বনিম্ন পরিমাণের আইটেমগুলি সংজ্ঞায়িত করে, তারপর সেই পদ্ধতিগুলিকে সিনট্যাক্সের মাধ্যমে আইটেমগুলি কল করে কাজ করে।

অনলাইনে চেষ্টা করে দেখুন!


0

জাভাস্ক্রিপ্ট 189 বাইট

a=>(n='sutsftfxFvxov'[N=parseInt(a)*(a.slice(-1)>'v'?2:1)])&&((N>5?N+1:N)%2?'Augmented ':'Dimished ')+'unison,second,third,fourth,fifth,sixth,seventh,octave'.split`,`['ustfFxvo'.indexOf(n)]



 F=
  a=>
    (n='sutsftfxFvxov' //using the right side of the possible answers
                       //set n = the letter representing
                       //unison, first, second ...

       //set N to 12 for 12h, but 24 for 12w
       [N=parseInt(a)*(a.slice(-1)>'v'?2:1)])

  &&   //if we were out of range (12w) we'll return undefined


    (
      (N>5?N+1:N)%2?  //get Aug or Dim (right side goes)
                      //DADADAADADADA
                      //     ^^ makes this a pain
       'Augmented ':'Dimished '
     )
     +
            //turn n (which is u for unison, x for sixth, etc
            //into it's full name
       'unison,second,third,fourth,fifth,sixth,seventh,octave'
         .split`,`
     ['ustfFxvo'.indexOf(a)]

0

জাভা, 225 224 বাইট

এই স্ট্রিংগুলি প্যাক করার আরও ভাল উপায় হতে পারে তবে আমার কোনও ধারণা নেই।

(i,s)->{String A="Augmented",M="Major",m="Minor",P="Perfect",D="Diminished",d=" Second",f=" Fourth",a=" Sixth",C=" Octave";String[]o=new String[]{D+d,m+d,M+d,A+d,P+f,A+f,D+a,m+a,M+a,A+a,D+C,P+C};i*=s=='w'?2:1;return o[i-1];}

ইন্ডেন্টযুক্ত:

static BiFunction<Integer, Character, String> interval = (i,s) -> {
    String A="Augmented",M="Major",m="Minor",P="Perfect",D="Diminished",
            d=" Second",f=" Fourth",a=" Sixth",C=" Octave";
    String[] o = new String[] {D+d,m+d,M+d,A+d,P+f,A+f,D+a,m+a,M+a,A+a,D+C,P+C};
    i *= s=='w' ? 2 : 1;
    return o[i-1];
};

আমি বিশ্বাস করি আপনি প্রতিস্থাপন করে এটি খাটো করতে পারেন if(s=='w')i*=2;সঙ্গেi*=s=='w'?2:1;
জনাব জন

আপনি নিখুঁত
CAD97
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.