আসুন গান তৈরি করি!


11

প্রচুর লোক বিনোদন এবং বিনোদনের জন্য গান বাজনা পছন্দ করে। দুর্ভাগ্যক্রমে, সঙ্গীত কখনও কখনও বেশ কঠিন। এজন্য আপনি এখানে আছেন!

কার্য

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

স্টাফ, ক্লাফ এবং নোটস

একটি মিউজিকাল স্টাফ বা স্টাভটি পাঁচটি অনুভূমিক রেখা, অভ্যন্তরে চারটি স্পেস। প্রত্যেকটি লাইন বা স্পেস ক্লিফের উপর নির্ভর করে একটি পৃথক নোট (পিচ) উপস্থাপন করে।
বেছে নেওয়ার জন্য মোটামুটি কয়েকটি আলাদা আলাদা মিউজিকাল ক্লাফ রয়েছে, তবে আমরা কেবল আপাতত একটির সাথেই কাজ করব: ট্রিবল ক্লাফ । ট্রেবল ক্লাফের উপর নোটগুলি কর্মীদের উপর নিম্নরূপ উপস্থাপন করা হয়েছে:

লাইনস
এফ ----------
ডি ----------
খ ----------
জি ----------
ই ----------
শূন্যস্থানের  
   ----------  
ই
   ----------  
সি
   ----------  
একজন
   ----------  
এফ
   ----------

ইনপুট বিন্যাস

ইনপুটটি একক স্ট্রিং হিসাবে দেওয়া হবে:

---------------

---------------

---------------

---------------

---------------

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

নোটগুলি উপযুক্ত -বা চরিত্রের সাথে প্রতিস্থাপন করে এই কর্মীদের উপর স্থাপন করা হয় o। নোটগুলি সেমিটোন দ্বারা পিচটিতে (তীক্ষ্ণ) বা নিম্ন (সমতল) বাড়ানো যেতে পারে (একটি নোট এবং তার সংলগ্ন নোটগুলির মধ্যে প্রায় অর্ধেক ফ্রিকোয়েন্সি পার্থক্য)। এটি অক্ষরের দ্বারা #এবং bযথাক্রমে, এর স্থানে উপস্থাপিত হবে o। প্রতিটি নোট -যথাযথ দুটি অক্ষর দ্বারা পরবর্তী থেকে পৃথক করা হবে , এবং প্রথম নোট সর্বদা -এবং (স্থান) অক্ষরের প্রথম "কলাম" এ প্রদর্শিত হবে ।

নোটের নামগুলি আউটপুট দেওয়ার সময়, আপনার কর্মসূচীতে সর্বদা A B C D E F Gকর্মীদের উপর দেওয়া নোটের সাথে সম্পর্কিত বড় বড় অক্ষর ( ) ব্যবহার করা উচিত । ধারালো (জন্য #) এবং ফ্ল্যাট ( b) নোট, আপনার প্রোগ্রাম চাহিদা সংযোজন করতে #এবং bযথাক্রমে চিঠি নোট সংশ্লিষ্ট করতে। কোনও প্রাকৃতিক নোট যা তীক্ষ্ণ বা সমতল নয়, পরিবর্তে একটি (স্পেস) যুক্ত করা উচিত।

উদাহরণ

ইনপুট:

--------------------- ণ
                  ণ     
--------------- ণ --------
            ণ           
--------- খ --------------
      ণ                 
--- ণ --------------------
ণ                       
------------------------

* এই উদাহরণে সমস্ত "খালি স্থান" নোট করুন আসলে (স্থানের অক্ষর)।
এই ক্ষেত্রে (একটি সহজ এফ মেজর স্কেল), আপনার প্রোগ্রামটি এটি আউটপুট করা উচিত:

এফজিএ বিবি সিডিইএফ

নোট করুন কর্মীদের উপর থাকা নোটগুলির সাথে সঠিকভাবে ফিট করার জন্য আউটপুটটির অক্ষরের মধ্যে ব্যবধানটি উপরে বর্ণিত ঠিক মতো হওয়া উচিত। সমস্ত নোটের নামের মধ্যে Bbএবং এর মধ্যে বাদে দুটি (স্পেস) অক্ষর রয়েছে Cbএখানে এক প্রতিস্থাপন (স্থান) অক্ষর।

আর একটি উদাহরণ
ইনপুট:

------------------------
                     ণ  
------------------ # -----
               #        
------------ ণ -----------
         ণ              
------ # -----------------
   #                    
ণ -----------------------

আউটপুট:
E F# G# A B C# D# E

সৌভাগ্য
ইনপুট জন্য আরও একটি উদাহরণ :

---------------------
উহ           
---------------------
         ণ              
---------------------

--------------- ণ - ণ

---------------------

আউটপুট:
E E E C E G G

বিধি

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

বোনাস চ্যালেঞ্জ

  • -10% যদি আপনার প্রোগ্রামটি কর্মীদের শীর্ষ লাইনের উপরের স্থানটি সফলভাবে প্রক্রিয়া করতে পারে (জি, জি #, জিবি)।
  • -10% যদি আপনার প্রোগ্রামটি কর্মীদের নীচের লাইনের নীচে স্থানটি সফলভাবে প্রক্রিয়া করতে পারে (ডি, ডি #, ডিবি)
  • এই ক্ষেত্রে আপনার প্রোগ্রামটি শুরু এবং শেষের দিকে অতিরিক্ত সারি ইনপুট হিসাবে গ্রহণ করবে; এই সারিগুলি অন্য নয়টি সারির মতোই একই আচরণ করা উচিত

হ্যাঁ, আমি বুঝতে পারি যে একটি আমার প্রশ্নের সাথে বেশ মিল। তবে, এটির একটি মাত্র উত্তর পেয়েছে। আমি আরও ভাষা জড়িত করার জন্য সহজ কিছু করার আশা করছিলাম। এবং প্রকৃতপক্ষে, আমি বিশ্বাস করি যে চ্যালেঞ্জটি বিপরীতে জড়িত, নোটকে একটি কর্মীদের মধ্যে রূপান্তরিত করে।
এমসি ΔT

উত্তর:


3

সিজেএম ( 40 37 * 0.8 = 29.6 পয়েন্ট)

qN/z3%{_{iD%6>}#_~'H,65>=@@=+'oSerS}%

অনলাইন ডেমো

ধন্যবাদ প্রকৃতপক্ষে কিছু প্রাক সংজ্ঞায়িত ভেরিয়েবল যা আমি সম্পর্কে ভুলেই গিয়েছিলাম ইশারা জন্য।


খুব ঝরঝরে! স্পেস অক্ষরের জন্য এস ব্যবহার করে আপনি কয়েকটি বাইট শেভ করতে পারেন। অতিরিক্ত হিসাবে, আপনি 13 এর সাথে ডি
এমসি ΔT

1

রুবি, 106 বাইট * 0.8 = 84.8

->s{a=' '*l=s.index('
')+1
s.size.times{|i|s[i].ord&34>33&&(a[i%l,2]='GFEDCBA'[i/l%7]+s[i].tr(?o,' '))}
a}

পরীক্ষা প্রোগ্রামে অসম্পূর্ণ

f=->s{a=' '*l=s.index('
')+1                                 #l = length of first row, initialize string a to l spaces
  s.size.times{|i|                   #for each character in s
  s[i].ord&34>33&&                   #if ASCII code for ob#
   (a[i%l,2]=                        #change 2 bytes in a to the following string
   'GFEDCBA'[i/l%7]+s[i].tr(?o,' '))}#note letter, and copy of symbol ob# (transcribe to space if o)
a}                                   #return a



t='                        
---------------------o--
                  o     
---------------o--------
            o           
---------b--------------
      o                 
---o--------------------
o                       
------------------------

'

u='                        
------------------------
                     o  
------------------#-----
               #        
------------o-----------
         o              
------#-----------------
   #                    
o-----------------------

'

v='                     
---------------------
o  o  o     o        
---------------------
         o           
---------------------

---------------o--o--

---------------------

'

puts f[t]
puts f[u]
puts f[v]

1

জাভাস্ক্রিপ্ট (ES6), 144 বাইট - 20% = 115.2

f=s=>(n=[],l=s.indexOf(`
`)+1,[...s].map((v,i)=>(x=i%l,h=v.match(/[ob#]/),n[x]=h?"GFEDCBAGFED"[i/l|0]:n[x]||" ",h&&v!="o"?n[x+1]=v:0)),n.join``)

ব্যাখ্যা

f=s=>(
  n=[],                      // n = array of note letters
  l=s.indexOf(`
`)+1,                        // l = line length
  [...s].map((v,i)=>(        // iterate through each character
    x=i%l,                   // x = position within current line
    h=v.match(/[ob#]/),      // h = character is note
    n[x]=                    // set current note letter to:
      h?"GFEDCBAGFED"[i/l|0] //     if it is a note, the letter
      :n[x]||" ",            //     if not, the current value or space if null
    h&&v!="o"?n[x+1]=v:0     // put the sharp/flat symbol at the next position
  )),
  n.join``                   // return the note letters as a string
)

পরীক্ষা

কর্মীদের উপরে একটি লাইন যুক্ত মনে রাখবেন যা অন্যান্য লাইনের সঠিক দৈর্ঘ্য কারণ এই সমাধানটিতে কর্মীদের উপরে এবং নীচের লাইনগুলি পার্স করা অন্তর্ভুক্ত রয়েছে।

f=s=>(n=[],l=s.indexOf(`
`)+1,[...s].map((v,i)=>(x=i%l,h=v.match(/[ob#]/),n[x]=h?"GFEDCBAGFED"[i/l|0]:n[x]||" ",h&&v!="o"?n[x+1]=v:0)),n.join``)
<textarea id="input" style="float:left;width:200px;height:175px">                        
---------------------o--
                  o     
---------------o--------
            o           
---------b--------------
      o                 
---o--------------------
o                       
------------------------
                        </textarea>
<div style="float:left">
  <button onclick="results.innerHTML=f(input.value)">Test</button>
  <pre id="results"></pre>
</div>

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