মেজর-মাইনর ডিখোটমি


15

Chords একটি তালিকা দেওয়া তাদের 'মেজর' বা 'অপ্রাপ্তবয়স্ক' হিসাবে লেবেল।

ইনপুট

ইনপুটটি স্থানের দ্বারা পৃথক করা 3 টি নোটের সমন্বয়ে প্রতি এক লাইন এক জনের তালিকা হবে। প্রতিটি নোটে বড় হাতের নোটের নাম ( A- G) এবং একটি alচ্ছিক দুর্ঘটনাজনিত ( #বা b) থাকবে। Chords যে কোনও বিপরীতে থাকতে পারে (যেমন নোটগুলি কোনও ক্রমে থাকতে পারে)।

আউটপুট

জ্যাড যদি বড় হয় তবে আউটপুট 'মেজর'। জ্যাণ্ড যদি ছোট হয় তবে আউটপুট 'মাইনর'। জ্যাড যদি প্রধান বা ছোট না হয় তবে একটি ফাঁকা লাইন আউটপুট দেয়।

উদাহরণ

ইনপুট

C E G
F Ab C
C Eb Gb
E G B
Db F Ab
Bb G D
D A Gb

আউটপুট

Major
Minor

Minor
Major
Minor
Major

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

আমার পূর্ববর্তী কয়েকটি প্রশ্নের মতো, আমি আবারও এই প্রশ্নের কয়েকটি পরীক্ষার কেস সরবরাহ করার জন্য জয়ে এবং ভেন্টোরোর তৈরি কয়েকটি পরীক্ষার স্ক্রিপ্টগুলি আবার কিনেছি :

ব্যবহার: ./test [your program and its arguments]

পুরস্কার

প্রতিটি এন্ট্রি যা আমি যাচাই করতে পারি যা পরীক্ষাটি পূরণ করে, পরীক্ষাগুলি পাস করে এবং গল্ফ করার জন্য স্পষ্টতই কিছু চেষ্টা করেছিল তা আমার কাছ থেকে উপার্জন পাবে (সুতরাং দয়া করে আপনার উত্তর সহ ব্যবহারের নির্দেশাবলী সরবরাহ করুন)। ১৩/১০/২০১২ এর মধ্যে সংক্ষিপ্ততম সমাধানটি বিজয়ী হিসাবে স্বীকৃত হবে।

একটু তত্ত্ব

আপনার কাছে কোন সংগীত তত্ত্বের জ্ঞান নেই তাদের জন্য এখানে প্রতিযোগিতা করতে সক্ষম হওয়ার পর্যাপ্ত তথ্য রয়েছে।

একটি প্রধান বা গৌণ জ্যাণ্ডটি তিনটি নোট দ্বারা গঠিত যা সেমিটোনগুলির একটি নির্দিষ্ট প্যাটার্ন দ্বারা পৃথক করা হয়। আমরা যদি জ্যাডের মূল (নীচের নোট )টিকে 0 হিসাবে বিবেচনা করি, তবে একটি বড় জ্যাডটি 0-4-7 প্যাটার্ন এবং একটি ছোট জ্যাডটি 0-3-7 প্যাটার্ন। বিষয়গুলি আরও বিশ্রী করে তুলেছে যে কিছু নোট পৃথক পৃথক এবং কিছু স্বর পৃথক। থেকে Semitones বিস্তার Ab- G#নীচে:

G#/Ab A A#/Bb B/Cb B#/C C#/Db D D#/Eb E/Fb E#/F F#/Gb G G#/Ab
  0   1   2    3     4    5   6   7    8     9    10  11  12

G#/Abমানে যে G#একই নোট Ab। এ থেকে আমরা দেখতে পাচ্ছি যে জ্যাডটি Ab C Ebএকটি প্রধান জ্যাণ্ড, এবং এটি Ab Cb Ebসামান্য।

জটিল আরও বিষয়ে, জ্যা Eb Cb Abহিসাবে একই বলে মনে করা হয় Ab Cb Eb, Cb Eb Abএবং Cb Ab Ebইত্যাদি। এই সমস্ত পরিবর্তনের প্রতিটি এখনও একটি গৌণ জ্যা।


2
আমি মনে করি আপনার ব্যাশ পরীক্ষককে ইনপুট এবং প্রত্যাশিত উত্তরগুলি বদলানো দরকার।
ফ্লোডেল

হ্যাঁ, আপনি ঠিক বলেছেন এর জন্য দুঃখিত, আমি এখন এটি সংশোধন করেছি। আমাকে পরীক্ষা করে দেখতে হবে যে পাওয়ারশেল পরীক্ষা স্ক্রিপ্টটিতেও একই সমস্যা নেই।
গ্যারেথ

উত্তর:


3

গল্ফস্ক্রিপ্ট, 83 টি অক্ষর

n%{' '%{1\{'A#BC D EF G'?+}/.}%$(+2/{~- 12%}%.(+.(+]$0=.$]10,7>?'MMaijnoorr

'>2%}%

এটি একটি দ্রুত প্রথম সমাধান; আমি নিশ্চিত এটি আরও গল্ফ করা যেতে পারে। মন্তব্যে ফ্লাডেল দ্বারা চিহ্নিত বাগটি ঠিক করার পরে বাশ পরীক্ষার স্যুটটি পাস করে।

1 সম্পাদনা করুন: ক্যানোনিকালাইজড মেজর এবং অপ্রকাশ্য জ্যাকেট নিদর্শনগুলি স্বীকৃতি দেওয়ার জন্য একটি সংক্ষিপ্ত উপায়ে 5 টি অক্ষর সংরক্ষণ করা হয়েছে।

সম্পাদনা 2: গ্রিসির সমাধান দ্বারা অনুপ্রাণিত আরও কমপ্যাক্ট আউটপুট এনকোডিং সহ আরও 2 টি অক্ষর সংরক্ষণ করা হয়েছে। (ধন্যবাদ!) পার্শ্ব প্রতিক্রিয়া হিসাবে, কোড এখন আউটপুট পরে একটি অতিরিক্ত ফাঁকা লাইন প্রিন্ট করে, তবে পরীক্ষার জোতাটি এটি গ্রহণ করে বলে মনে হয়, সুতরাং আমার ধারণা এটি ঠিক আছে। :)

এখানে কিভাবে এটা কাজ করে:

  • বাইরের লুপটি n%{ }%n*কেবল ইনপুটগুলিকে লাইনে বিভক্ত করে, প্রতিটি লাইনের জন্য ব্রেসগুলির অভ্যন্তরে কোড চালায় এবং নিউলাইনগুলির সাথে ফলাফলগুলিতে যোগদান করে।

  • ' '%প্রতিটি লাইন নোটের অ্যারেতে বিভক্ত করে। এই নোটগুলির প্রত্যেকটির জন্য, 1\{'A#BC D EF G'?+}/তারপরে স্ট্রিংয়ের প্রতিটি অক্ষর অনুসন্ধান করে 'A#BC D EF G'এবং অবস্থানগুলি যুক্ত করে সেই নোটটিকে একটি সেমিটোন সংখ্যায় রূপান্তরিত করে (যা স্ট্রিংয়ে পাওয়া যায় না এমন কোনও চরিত্রের জন্য -1 হবে উল্লেখযোগ্যভাবে অন্তর্ভুক্ত b)। (আমি নিশ্চিত যে এই কৌশলটি আমি আগেও ব্যবহার করে দেখেছি)) অবশেষে, .প্রতিটি সংখ্যার সদৃশ হয়, যাতে লুপের শেষে, যেমন ইনপুটটি F Ab Cরূপান্তরিত হয় [9 9 0 0 4 4]

  • তারপরে আমরা নোটগুলি এর সাথে বাছাই করি $, প্রথম নোটটি দিয়ে শেষ দিকে সরিয়ে নিয়ে (+অ্যারেটিকে জোড়া দিয়ে বিভক্ত করি 2/, যাতে এটি এখন উদাহরণস্বরূপ দেখায় [[9 0] [0 4] [4 9]]। তারপরে {~- 12%}%প্রতিটি জোড় নোটকে তার পার্থক্যের মডুলো 12 এ ম্যাপ করুন, আমাদের উদাহরণ অ্যারেটিকে রূপান্তরিত করুন [9 8 7]

  • এরপরে, .(+অ্যারের একটি অনুলিপি তৈরি করে এবং এর উপাদানগুলিকে এক অবস্থান দ্বারা ঘোরান। আমরা এটি দু'বার করি এবং অনুলিপিগুলি একটি অ্যারেতে সংগ্রহ করি ], যাতে আমাদের উদাহরণটি এখন দেখতে ভাল লাগে [[9 8 7] [8 7 9] [7 9 8]]

  • তারপরে আমরা এই অ্যারেগুলির অ্যারেটি বাছাই করি $এবং এই ক্ষেত্রে [7 9 8]- সাথে প্রথম উপাদানটি নিয়ে যাই 0=। তারপরে আমরা এই অ্যারের একটি অনুলিপি তৈরি .করে ( $) এটি সাজান ( ), অরসোর্টড এবং অরসোর্টড অ্যারে উভয়কে অন্য অ্যারে ( ]) এর মধ্যে সংগ্রহ করি এবং অ্যারের প্রথম উপস্থিতি [7 8 9](যা 10,7>দুটি অক্ষর সংরক্ষণ করার জন্য লেখা হয় ) অনুসন্ধান করি ) এটা.

  • এটি আমাদের দেয় 0(যদি অরসেটেড অ্যারে ছিল [7 8 9], এবং এইভাবে কর্ডটি প্রধান), 1(যদি অরসেটেড অ্যারেটি যদি একটি ক্রম হয় তবে [7 8 9]প্রদত্ত যে এর প্রথম উপাদানটি অবশ্যই সবচেয়ে ছোট হওয়া উচিত, কেবল [7 9 8]জমিটি ছোট করে তোলে) বা বা -1(এমনকি বাছাই করা অ্যারের সমান না হলে [7 8 9])।

  • এই সংখ্যাটি তারপরে স্ট্রিংয়ের সূচনা সূচক হিসাবে ব্যবহৃত হয় "MMaijnoorr\n\n"(যেখানে \nকোডগুলিতে আসল লাইনফিড হিসাবে দেওয়া হয়), যা থেকে আমরা সেই চরিত্রটি এবং প্রতিটি দ্বিতীয় পরবর্তী আউটপুট হিসাবে গ্রহণ করি। যদি সূচকটি -1 হয়, আমরা স্ট্রিংয়ের শেষ চরিত্রটি থেকে শুরু করি যা কেবল একটি লাইন ফিড।


সুন্দর ব্যাখ্যা। আমার সবসময় গল্ফস্ক্রিপ্টের সাথে একইরকম অসুবিধা হচ্ছে বলে মনে হচ্ছে - আমি এটি পরীক্ষা করার জন্য একবারে একটি লাইন ডাকতে echo "G# B# Eb" | ruby golfscript.rb ilmari.gsপারি তবে কীভাবে আমি এটিতে পরীক্ষার স্ক্রিপ্টটি চালাব? আমি চেষ্টা করেছিলাম ./test ruby golfscript.rb ilmari.gsকিন্তু এটির কিছুই ছিল না। (আমি ইতিমধ্যে আপনাকে একটি +1 দিয়েছি কারণ এটি স্পষ্টতই কাজ করে তবে আমি কেবল কৌতূহলী)
গ্যারেথ

1
@ গ্যারেথ: দেখে মনে হচ্ছে এটি বাশ পরীক্ষার স্ক্রিপ্টের একটি বাগ - এটি একাধিক যুক্তি সঠিকভাবে পরিচালনা করে না। এটি ঠিক করতে, args="$@"সাথে args=("$@")এবং got=$("$cmd" "$args")সাথে প্রতিস্থাপন করুন got=$("$cmd" "${args[@]}")। (বা কেবল কার্যকর কার্যকর করুন golfscript.rbএবং এটি হিসাবে চালান run ./test ./golfscript.rb chords.gs)
ইলমারি করোনেন

4

পাইথন, 160

f='A#BC D EF G3453543'.find
try:
 while 1:x,y,z=sorted(map(lambda x:f(x[0])+f(x[1:])+1,raw_input().split()));print'MMianjoorrr'[f(`y-x`+`z-y`)/14:-1:2]
except:0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.