হোয়াইট কীগুলিতে পিয়ানো চির্ডস


9

ব্যাকস্টোরি [যা সত্য নয়]

একটি পিয়ানো এইভাবে সেট আপ করা হয়েছে:

! [Http://www.piano-lessons-made-simple.com/images/2-Octave-Labled.gif

যাইহোক, আমার পিয়ানোতে, সমস্ত কালো চাবি ভেঙে গেছে!

যদিও আমি এখনও আমার ভাঙ্গা পিয়ানোতে কিছু বাজানো সক্ষম করতে চাই।

সঙ্গীতে, একটি জ্যা একটি নোটগুলির একটি গ্রুপ যা এক সাথে বাজানো হয়। Chords ইনপুট জন্য অনুমতি দিতে, আমি প্রথমে একটি সেমিটোন কি তা সংজ্ঞায়িত করব।

সেমিটোন কী?

একটি সেমিটোন হ'ল পশ্চিমা সংগীতে সবচেয়ে ছোট দূরত্ব। আপনি যদি পিয়ানোটির উপরের অংশটি দেখেন তবে দেখতে পাবেন যে আপনি সাধারণত একটি কালো চাবি থেকে সাদা কী বা তার বিপরীতে যেতে পারেন; তবে মধ্যবর্তী Bএবং Cএবং Eএবং Fকোন কালো চাবিকাঠি।

জ্যা কি?

এই চ্যালেঞ্জের উদ্দেশ্যে, আমরা একটি জ্যাকে নোটগুলির একটি গোছ হিসাবে নির্দিষ্ট করে নির্দিষ্ট সংখ্যক সেমিটোন হিসাবে সংজ্ঞায়িত করি। উদাহরণস্বরূপ, একটি সময়ে গ্রহণ করা যাক 4-3-3থেকে শুরু করে জ্যা C(সংগীত মানুষের জন্য, এই একটি ভী হয় 7 এফ প্রধান জ্যা)। আমরা শুরু C। আমরা 4 semitones আপ গণনা: C#, D, D#, E। পরবর্তী নোট E, এবং আমরা 3 semitones আপ গণনা যে পরে: F, F#, G। পরবর্তী নোট G, এবং আমরা 3 semitones আপ গণনা যে পরে: G#, A, Bb। সুতরাং, আমরা পেতে C-E-G-Bb। হ্যাঁ! তবে অপেক্ষা করুন ... Bbএকটি কালো চাবি এবং সেগুলি নষ্ট হয়ে গেছে ... তবে, আমরা যদি শুরু করি তবে Gআমরা পাই G-B-D-F! হ্যাঁ!

ইনপুট

ইনপুটটি কোনও যুক্তিসঙ্গত বিন্যাসে পূর্ণসংখ্যার তালিকা হিসাবে দেওয়া হয়। এটি উপরে বর্ণিত কর্ডকে প্রতিনিধিত্ব করে।

আউটপুট

আউটপুট নোটগুলির একটি তালিকা হওয়া উচিত যার উপর আমি কেবল সাদা কী ব্যবহার করা দরকার use এটি কেবলমাত্র 7 টি পর্যন্ত নোটের একটি স্ট্রিং হতে পারে কারণ সমস্ত কী-নেম একটি অক্ষর হবে। খালি আউটপুট থাকার পাশাপাশি আপনি অবশ্যই পরিচালনা করতে সক্ষম হবেন।

পরীক্ষার কেস

input -> output // comments
4 3 -> C F G // this is a major triad
3 4 -> D E A // this is a minor triad
4 3 3 -> G // this is the major-minor seventh chord
3 3 3 -> [empty output] // this is the diminished-diminished seventh chord. All of them use black keys
4 4 -> [empty output] // this is an augmented triad
3 3 -> B // this is a diminished triad
1 -> B E // this is just a minor second
11 -> C F // this is just a major seventh

অন্যান্য চশমা

  • স্ট্যান্ডার্ড লুফোলস নিষিদ্ধ
  • আপনি ধরে নিতে পারেন ইনপুটটির কমপক্ষে একটি পূর্ণসংখ্যা রয়েছে
  • আপনি ধরে নিতে পারেন যে সমস্ত পূর্ণসংখ্যাগুলি নেতিবাচক এবং 12 এর চেয়ে কম হয় (কারণ পিয়ানো প্রতি 12 নোট পুনরাবৃত্তি করে)
  • আউটপুট যে কোনও ক্রমে হতে পারে

বিজয়ী মানদণ্ড

15 এপ্রিল হিসাবে স্বল্পতম বৈধ জমা গ্রহণযোগ্য হবে।


আমরা "অ-নেতিবাচক এবং 12 এরও কম" ধরে নিতে পারি - এটি কি "ধনাত্মক এবং 12 এর চেয়ে কম বা সমান" হওয়া উচিত না?
জোনাথন অ্যালান

@ জোনাথন অ্যালান মূলত কোনও পার্থক্য নেই; আমার পদ্ধতিটি পারফেক্ট ইউনিট করার অনুমতি দেয় তবে একটি পারফেক্ট অকটভেভ নয়; আপনার তদ্বিপরীত। তাত্ত্বিকভাবে, আপনার বিধিনিষেধটি আরও বোধগম্য হতে পারে তবে আমি মনে করি আমার সম্ভবত এটি পরিবর্তন করা উচিত নয় কারণ ইতিমধ্যে উত্তর রয়েছে এবং এটি চ্যালেঞ্জকে মৌলিকভাবে পরিবর্তন করে না।
হাইপারনিউট্রিনো

উত্তর:


3

জেলি , 25 বাইট

236ḃ2ṙЀ7+\€Ṭ
+\ịþ¢Ạ€TịØA

এটি অনলাইন চেষ্টা করুন! অথবা একটি পরীক্ষা স্যুট দেখুন

কিভাবে?

236ḃ2ṙЀ7+\€Ṭ - Link 1, white-note-offsets: no arguments
236ḃ2         - 236 in bijective base 2 [2, 2, 1, 2, 2, 1, 2] - semitones G->A, A->B ...
     ṙЀ7     - rotate left by, mapped over [1,2,3,4,5,6,7] - i.e. as above for each
                    starting white key (1st one A->B,B->C,...; 2nd B->C,C->D,...; etc)
         +\€  - reduce €ach with addition - i.e. absolute number of semitones: [[2,3,5,7,8,10,12],[1,3,5,6,8,10,12],[2,4,5,7,9,11,12],[2,3,5,7,9,10,12],[1,3,5,7,8,10,12],[2,4,6,7,9,11,12],[2,4,5,7,9,10,12]]
            Ṭ - untruth (vectorises) - make lists with 1s at those indexes: [[0,1,1,0,1,0,1,1,0,1,0,1],[1,0,1,0,1,1,0,1,0,1,0,1],[0,1,0,1,1,0,1,0,1,0,1,1],[0,1,1,0,1,0,1,0,1,1,0,1],[1,0,1,0,1,0,1,1,0,1,0,1],[0,1,0,1,0,1,1,0,1,0,1,1],[0,1,0,1,1,0,1,0,1,1,0,1]]

+\ịþ¢Ạ€TịØA - Main link: list of semitone gap integers (even negatives will work)
+\          - reduce by addition - gets the absolute semitone offsets needed
    ¢       - last link (1) as a nilad
   þ        - outer product with:
  ị         -     index into - 7 lists, each with 1s for white and 0s for black keys hit
                      note that indexing is modular and all the lists are length 12
                      so any integer is a valid absolute offset, not just 0-11 inclusive
     Ạ€     - all truthy for €ach - for each get a 1 if all keys are white ones, else 0
       T    - truthy indexes - get the valid starting white keys as numbers from 1 to 7
        ị   - index into:
         ØA -     the uppercase alphabet

6

এমএটিএল , 31 বাইট

সংশোধনের জন্য জোনাথন অ্যালানকে ধন্যবাদ ।

'BAGFEDC'"GYs12X\110BQX@YSYsm?@

এটি অনলাইন চেষ্টা করুন! বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা

প্যাটার্নটি 2 2 1 2 2 2 1পরপর সাদা কীগুলির মধ্যে অন্তরগুলি নির্দিষ্ট করে। প্রোগ্রামটি এমন একটি লুপ ব্যবহার করে যা ইনপুট জলের সম্ভাব্য সর্বনিম্ন নোট হিসাবে প্রতিটি কীটি পরীক্ষা করার জন্য সমস্ত চক্রীয় শিফটগুলিকে এই বেসিক প্যাটার্নটিতে প্রয়োগ করে। প্রতিটি শিফ্টের জন্য, প্যাটার্নের সংযোজিত যোগফল পাওয়া যায়। উদাহরণস্বরূপ, Bসম্ভাব্য সর্বনিম্ন নোট হিসাবে, প্যাটার্নটি স্থানান্তরিত হয়েছে 1 2 2 1 2 2 2এবং এর সমষ্টিগত যোগফল 1 3 5 6 8 10 12

এখন, এটি দেখার জন্য যে এটি কোনও 4 3 3জগকে সমর্থন করতে পারে আমরা জ্যাব অন্তরগুলির সংখ্যার যোগফল গণনা করি যা 4 7 10; 1 ভিত্তিক মডিউল 12 (একজন ব্যবধান মাধ্যমে এটি কমাতে 14দিতে হবে 2); এবং পরীক্ষা করে দেখুন যে এই সংখ্যাগুলি সমস্ত অনুমোদিত মানের সদস্য 1 3 5 6 8 10 12। এই উদাহরণে এটি হয় না। যদি এটি হয়, আমরা চিঠি আউটপুট হবে B

চক্রীয় শিফট এবং আউটপুট বর্ণগুলির মধ্যে চিঠিপত্র স্ট্রিং দ্বারা সংজ্ঞায়িত করা হয় 'BAGFEDC'। এটি সূচিত করে যে 'B'(প্রথম চরিত্রটি) একটি চক্রীয় শিফ্টের সাথে মিল 1; 'A'(দ্বিতীয় অক্ষর) একটি চক্রীয় শিফট 2ইত্যাদির সাথে মিলে যায়

'BAGFEDC'  % Push this string
"          % For each character from the string
  G        %   Push input array
  Ys       %   Cumulative sum
  12X\     %   1-based modulo 12, element-wise (1,12,13,14 respectively give 1,12,1,2)
  110BQ    %   Push 110, convert to binary, add 1 element-wise: gives [2 2 1 2 2 2 1]
  X@       %   Push current iteration index, starting at 1
  YS       %   Cyclic shift to the right by that amount
  Ys       %   Cumulative sum
  m        %   Ismember. Gives an array of true of false entries
  ?        %   If all true
    @      %     Push current character
           %   End (implicit)
           % End (implicit)
           % Display (implicit)

5

গণিত, 110 বাইট (আইএসও 8859-1 এনকোডিং)

±i_:=#&@@@Select["A#BC#D#EF#G#"~StringTake~{Mod[#,12,1]}&/@#&/@(Accumulate[i~Prepend~#]&/@Range@12),FreeQ@"#"]

±সংখ্যার ইনপুট হিসাবে পূর্ণসংখ্যার তালিকা (আসলে পূর্ণসংখ্যার আকার বা চিহ্নের উপর কোনও বিধিনিষেধ নেই) সংজ্ঞায়িত করে এবং এক-চরিত্রের স্ট্রিংয়ের একটি তালিকা প্রদান করে ary উদাহরণস্বরূপ, ±{3,4}ফেরৎ {"A","D","E"}

"A#BC#D#EF#G#"~StringTake~{Mod[#,12,1]}&/@#কোনও ফাংশন যা #কোনও কালো কী বাদ দেয়, বাদে সংশ্লিষ্ট নোটের নামের সাথে পূর্ণসংখ্যার একটি তালিকা পরিণত করে । এটি প্রতিটি উপাদানগুলিতে প্রয়োগ করা হয় Accumulate[i~Prepend~#]&/@Range@12, যা নোট অন্তরগুলির তালিকা ইনপুট তালিকা থেকে নোট মানগুলির একটি তালিকা তৈরি করে, প্রতিটি সম্ভাব্য নোট 1 থেকে 12 পর্যন্ত শুরু করে আমরা এই জাতীয় সমস্ত নোট-নামের তালিকা ফিল্টার আউট "#"করে যা ব্যবহার করে Select[...,FreeQ@"#"]এবং তারপরে ব্যবহার করে প্রতিটি অবশিষ্ট তালিকায় প্রথম নোটটি ফেরত দিন #&@@@



প্রশ্ন: গণিতিকা কি নিজস্ব বাইট সিস্টেম ব্যবহার করে? এটি 110 টি অক্ষর তবে ইউটিএফ -8 এ +/-প্রতীকটির কারণে এটি 111 বাইট ।
হাইপারনিউটারিনো

আপনি অ্যাসাইনমেন্টটি পুরোপুরি ছাঁটাই করতে পারেন এবং কেবল কোনও ফাংশন "স্পষ্টভাবে ফিরিয়ে" দিতে পারেন।
wizzwizz4

@ উইজউইফজ ৪: আমি দেখতে পেলাম যে আমাকে ভেরিয়েবলটির নাম রাখতে হবে Accumulate[i~Prepend~#]&কারণ অন্যথায় কার্য়ের সংঘাত হতে পারে। নিখরচায় যদিও একটি workaround খুঁজে!
গ্রেগ মার্টিন

@ হাইপারনিউট্রিনো: আপনি ঠিক বলেছেন যে ইউটিএফ -8 হ'ল স্ট্যান্ডার্ড এনকোডিং, তবে ম্যাথামেটিকা ​​(সাধারণত) আইএসও 8859-1 এনকোডিংয়েও কাজ করতে পারে। আমি পোস্টে নোট করেছি।
গ্রেগ মার্টিন

3

পাইথন 2, 159 155 বাইট

(একটি বৈধ জমা আছে যা এটির চেয়ে কম হবে তা নিশ্চিত করার পরে এটি পোস্ট করা)

import numpy
s='C.D.EF.G.A.B'
def k(y):return lambda x:s[(x+y)%12]
for i in range(12):
    if s[i]!='.'and'.'not in map(k(i),numpy.cumsum(input())):print s[i]

খুব সুন্দর মাত্র তুচ্ছ সমাধান। একটি পৃথক লাইনের প্রতিটি অক্ষরের সাথে পূর্ণসংখ্যার তালিকা এবং আউটপুটগুলির তালিকা হিসাবে ইনপুট।

অপ্রয়োজনীয় পরিবর্তনশীল অপসারণ করে -4 বাইট


3

জাভাস্ক্রিপ্ট (ES6), 72 71 68 বাইট

a=>[..."C1D1EF1G1A1B"].filter((c,i,b)=>!+c>a.some(e=>+b[i+=e,i%12]))

প্রতিটি কী-টি কালো কী বাদ দিলে লুপ করে, তারপরে সেমোটোনগুলির সংখ্যামূলক যোগফল কখনও কোনও কালো কী তে অবতরণ করে না তা পরীক্ষা করে।

সম্পাদনা: @ আরনাউল্ডকে 3 বাইট সংরক্ষণ করা হয়েছে


4
পঠনযোগ্যতার ?! আপনি কি নিশ্চিত যে আপনি সঠিক সাইটে আছেন? :-)
wizzwizz4
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.