সংগীত: এই জ্যাজের নাম কী?


9

এটি সংগীতের বিপরীত : এই জ্যাটিতে কী আছে? , যা প্রদত্ত জলের মধ্যে নোটগুলি মুদ্রণ করা। এবার ইনপুটটি জ্যাজে থাকা নোটগুলির একটি তালিকা এবং আপনার কাজটি কোন জ্যাটি তা আউটপুট করা।

আপনার প্রোগ্রামটি নিম্নলিখিত ট্রাইডিক chords সমর্থন করা উচিত। উদাহরণগুলি রুট সি দিয়ে দেওয়া হয় অন্যান্য শিকড়ের সাথে চিডগুলি সমস্ত নোট ঘোরানো সমান তীব্র হয় যাতে সি সেই রুট নোটে পরিণত হয়, যেমন দমাজ ডি, এফ # এবং এ সমন্বিত থাকে eg

        C C#D D#E F F#G G#A A#B
          Db  Eb    Gb  Ab  Bb
Cmaj    C       E     G
Cm      C     D#      G
Caug    C       E       G#
Cdim    C     D#    F#
Csus4   C         F   G
Csus2   C   D         G

লক্ষ করুন যে কাগ ইওগ এবং জি # অগের মতো এবং সিসাস 4 এফসুস 2 এর সমান। আপনি যে কোনও একটি আউটপুট করতে পারেন তবে আপনি যদি সেগুলিকে আউটপুট করেন তবে একটি বোনাস রয়েছে।

এবং বোনাসের জন্য সপ্তম chords নিম্নলিখিত সারণীতে তালিকাভুক্ত করা হয়েছে:

        C C#D D#E F F#G G#A A#B
          Db  Eb    Gb  Ab  Bb
C7      C       E     G     A#
Cm7     C     D#      G     A#
Cmmaj7  C     D#      G       B
Cmaj7   C       E     G       B
Caug7   C       E       G#  A#
Cdim7   C     D#    F#    A

বিধি

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

উদাহরণ

  • ইনপুট: C D# Gআউটপুট: Cm
  • ইনপুট: C Eb Gআউটপুট: Cm
  • ইনপুট: C Eb F#আউটপুট: Cdim
  • ইনপুট: F A C#আউটপুট: Faug, Aaug, C#aug, Dbaugবা Faug Aaug C#aug, Faug Aaug Dbaugকোনো অনুক্রমে।
  • ইনপুট: F D F F F F A A Fআউটপুট: Dm
  • ইনপুট: C Dআউটপুট: C D

বোনাসেস

  • -30 যদি একাধিক ব্যাখ্যামূলক (আগ, sus4 / sus2 এবং dim7 এর জন্য) থাকে তবে এটি সমস্ত মুদ্রণ করে।
  • -70 এটি সপ্তম chords সমর্থন করে যদি।
  • -200 যদি এটি এমআইডিআই ইনপুট গ্রহণ করে এবং এটি প্রাপ্ত প্রতিটি জ্যা মুদ্রণ করে তবে। নোটগুলি একই সময়ে শুরু বা শেষ করতে হবে না তা নোট করুন। মধ্যবর্তী রাষ্ট্রগুলিতে কী ঘটেছিল আপনি সিদ্ধান্ত নিন (যতক্ষণ না এটি ক্রাশ হয় না বা কাজ বন্ধ করে দেয়)। আপনি ধরে নিতে পারেন পারকশন চ্যানেলগুলিতে কোনও নোট নেই (বা এটি সুবিধাজনক হলে কেবল একটি চ্যানেল রয়েছে)। এটি পরীক্ষার জন্য একটি পাঠ্য (বা অ্যারে) সংস্করণ সরবরাহ করারও পরামর্শ দেওয়া হয়, বিশেষত যদি এটি প্ল্যাটফর্ম নির্ভর।

ইনপুটটিতে কি ফ্ল্যাট থাকতে পারে বা এটি কেবল তীক্ষ্ণ ব্যবহার করছে? বি # এর মতো নোটগুলি কি পরিচালনা করা উচিত?
ফেয়ারসুম 7'15

@ ফেয়ারসাম এর ফ্ল্যাট থাকতে পারে (আপনি যদি -200 বোনাস দাবি না করেন) কিছু উদাহরণ যুক্ত করা হয়েছে। আপনি হ্যান্ডেল প্রয়োজন হবে না B#, Cbইত্যাদি
jimmy23013

আপনি বলুন Csus4 is the same as Gsus2। আমার মনে হয় আপনি মানে Csus2 is the same as Gsus4না?
গ্যারেথ

@ গ্যারেথ ... হ্যাঁ সংশোধন করা হয়েছে।
jimmy23013

উত্তর:


2

পাইথ 190 অক্ষর - 30 - 70 = 90

=Q{cQdL+x"C D EF G A B"hb&tlbt%hx" #b"eb3FZQJx[188 212 199 213 200 224 2555 2411 2412 2556 2567 2398)u+*G12hHSm%-dyZ12mykQ0IhJ+Z@c"sus2 maj dim aug m sus4 7 m7 mmaj7 maj7 aug7 dim7"dJ=T0;ITQ

এটি দিয়ে সত্যিই খুশি নয়। হার্ড-কোডেড chords ব্যবহৃত।

ব্যবহার:

এটি এখানে চেষ্টা করুন: পাইথ কম্পাইলার / নির্বাহক । ডিবাগ মোড অক্ষম করুন এবং "C D# G"ইনপুট হিসাবে ব্যবহার করুন।

ব্যাখ্যা:

প্রথমে কিছু প্রস্তুতি:

=Q{cQd
   cQd  split chord into notes "C D# G" -> ["C", "D#", "G"]
  {     set (eliminate duplicates)
=Q      Q = ...

তারপরে একটি ফাংশন যা নোটগুলিকে পূর্ণসংখ্যায় রূপান্তর করে

L+x"C D EF G A B"hb&tlbt%hx" #b"eb3
defines a function g(b),
  returns the sum of 
     index of "D" in "C D EF G A B"
     and the index of "#" in " #b" 
       (if b than use -1 instead of 2)

তারপরে প্রতিটি নোটের জন্য, সমন্বয়টি স্থানান্তর করুন এবং এটি একটি টেবিলের দিকে তাকান

FZQJx[188 ...)u+*G12hHSm%-dyZ12mykQ0IhJ+Z@c"sus2 ..."dJ=T0;ITQ
               implicit T=10
FZQ            for note Z in chord Q:
   mykQ         map each note of Q to it's integer value
   m%-dyZ12     shift it by the integer value of Z modulo 12 
   S            sort it
   u+*G12hH 0   convert it to an integer in base 12
   x[188 ...)   look it up in the list (-1 if not in list)
   J            and store the value in J

   IhJ               if J>=0:
   +Z@c"sus2 ..."dJ   print the note Z and the chord in the list
=T0                   and set T=0
;            end loop
ITQ          if T:print chord (chord not in list)

2

পার্ল 5: 183 - 100 = 83

সম্পাদনা: আমি কিছু অতিরিক্ত অক্ষর কাটতে পেরেছি তাই পাইথন সমাধানের মতো জ্যাজের নামগুলিও পরিবর্তন করেছি, তাই আমি যে মুহুর্তে নেতৃত্ব দিচ্ছি তার জন্য আমি এমন একটি মুহুর্তের জন্য ভান করতে পারি।

#!perl -pa
for$z(0..11){$x=0;$x|=1<<((/#/-/b/+$z+1.61*ord)%12or$o=$_)for@F;$x-/\d+_?/-$_*4||push@r,$o.$'
for qw(36M 34- 68+ 18o 40sus2 33sus4 292_7 290-7 546-M7 548M7 324+7 146o7)}$_="@r
"if@r

উদাহরণ:

$ perl chord.pl <<<"C D# G"
C-

0

পাইথন 2, 335 বাইট - 30 - 70 = 235

কিছুটা দীর্ঘতর গল্ফের প্রথম প্রচেষ্টা, যাতে আমি কিছু স্পষ্ট কৌশলগুলি অনুপস্থিত হতে পারি।

def f(s,N="C D EF G A B",r=range,u=1):
 for i in r(12):
  for t in r(12):
   if(set((N.find(n[0])+" #".find(n[1:]))%12for n in s.split())==set(map(lambda n:(int(n,16)+i)%12,"0"+"47037048036057027047A37A37B47B48A369"[3*t:3*t+3]))):print(N[i],N[i+1]+"b")[N[i]==" "]+"M - + o sus4 sus2 7 -7 -M7 M7 +7 o7".split()[t];u=0
 if(u):print s

মন্তব্যসমূহ:

  • স্থান বাঁচাতে আমি উইকি পৃষ্ঠা থেকে বিকল্প জোয়ার নামগুলি (দীর্ঘ লাইনের শেষ দেখুন) ব্যবহার করেছি।
  • Chords প্রতি 3 টি হেক্স অফসেট দ্বারা প্রতিনিধিত্ব করা হয় (0 প্রয়োজন হয় না তবে ট্রায়াডগুলিকে রেখাটি তৈরি করার জন্য অন্তর্ভুক্ত করা হয়)।
  • "#"। ফাইন্ড (এন [1:]) "#" থেকে কাজ করে। ফাইন্ড ("বি") -1 এবং "#"। সন্ধান ("") 0 হয়।

নমুনা আউটপুট

>>> f("C D# G")
C-
>>> f("C Eb G")
C-
>>> f("C Eb F#")
Co
>>> f("F A C#")
Db+
F+
A+
>>> f("F D F F F F A A F")
D-
>>> f("C D")
C D
>>> f("C Eb Gb A")
Co7
Ebo7
Gbo7
Ao7
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.