এএসসিআইআই স্কোর


27

আপনার অস্থায়ী ফোল্ডারের গভীরতায় প্রায় খনন করে আপনি পিয়ানোটির জন্য কিছু রচনা খুঁজে পেতে পারেন। দুর্ভাগ্যক্রমে, এই রচনাগুলি কেবল নোটের নাম এবং সময়কাল সহ লেখা হয়েছিল এবং আপনার কেবল পাঠ্য টার্মিনালে অ্যাক্সেস রয়েছে। অতএব, আপনার কাজটি ASCII শিল্প হিসাবে রচনাগুলি প্রদর্শন করতে একটি প্রোগ্রাম লিখতে হবে।

ইনপুট

আপনার প্রোগ্রামটি ইনপুট হিসাবে দুটি স্ট্রিং গ্রহণ করা উচিত। প্রথম স্ট্রিং শীর্ষ কর্মীদের নোটগুলি উপস্থাপন করবে (ট্রাবল ক্লাফ সহ), দ্বিতীয় স্ট্রিংটি নীচের কর্মীদের নোটগুলি উপস্থাপন করবে।

নোটগুলি বৈজ্ঞানিক পিচ স্বরলিপিতে পাস করা হবে । শীর্ষস্থানীয় কর্মীদের নোটগুলি সর্বদা C4এবং C6অন্তর্ভুক্ত থাকবে। নীচের কর্মীদের নোটগুলি সর্বদা C2এবং C4অন্তর্ভুক্ত থাকবে।

প্রতিটি লক্ষ্য করুন, একটি সময়কাল, যার মধ্যে একটি হতে হবে সঙ্গে আসা হবে: 1, 2, 4, 8। এগুলি যথাক্রমে একটি সম্পূর্ণ নোট (সেমিব্রেভ), একটি অর্ধ নোট (মিনিমাম), একটি চতুর্থাংশ নোট (ক্রোটচেট) এবং একটি অষ্টম নোট (কোভার) উপস্থাপন করে।

অন্য কোনও সময়কালের নোটগুলি কখনই ইনপুটটিতে উপস্থিত হবে না।

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

E4/4 A4/8 C#5/8 E5/2

এখানে, নোটগুলি একটি স্পেস দ্বারা পৃথক করা হয়েছে, এবং সময়কালটি ফরোয়ার্ড স্ল্যাশ সহ নোট থেকে আলাদা করা হবে। এই সীমানা সংশোধন করা হয়নি, এবং আপনি এগুলি পরিবর্তন বা সম্পূর্ণ বাদ দিতে বেছে নিতে পারেন।

আপনি ধরে নিতে পারেন প্রতিটি কর্মীর মধ্যে কমপক্ষে একটি নোট রয়েছে। ইনপুটটিতে কোনও বিশ্রাম নেই।

আউটপুট

আপনার প্রোগ্রামটি ASCII আর্ট হিসাবে স্কোরকে আউটপুট দেওয়ার জন্য নিম্নলিখিত বর্ণনার সাথে সামঞ্জস্য করে।

ক্লিফগুলি আপনার আউটপুটটির বামে প্রথম জিনিস হওয়া উচিত (দুটি স্তরের মধ্যে দূরত্ব পরিবর্তন করা উচিত নয়):

       ^    
      | |   
------|/----
      /     
-----/|-----
    / |     
---/--__----
   | /  \   
---\-\|-|---
    \ | /   
------|-----
      |     
    \_/     





----___-----
   /   \ |  
---\---|----
       | |  
-------/----
      /     
-----/------

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

যদি নোটটি কোনও স্টাফের মাঝের লাইনের নীচে থাকে তবে একটি নোটের স্টেম (বৃত্তের পাশের উল্লম্ব রেখাটি) উপরের দিকে নির্দেশ করা উচিত। নোটটি কোনও কর্মীদের মধ্য লাইনের উপরে থাকলে এটি নীচের দিকে নির্দেশ করা উচিত। নোটটি যদি মাঝের লাইনে থাকে তবে স্টেমটি উভয় দিকেই নির্দেশ করতে পারে। (এটির একমাত্র ব্যতিক্রম বোনাসের জন্য এবং পরে বর্ণিত অষ্টম নোট সংযোগ করার সময় ঘটে)। কান্ডটি বৃত্তের উপরে / নীচের লাইনে শুরু হওয়া উচিত এবং 6লম্বা লম্বা হওয়া উচিত।

পুরো নোট ছাড়া সমস্ত ধরণের নোটের ডাঁটা থাকে। অষ্টম নোটের পতাকাটি বিভিন্ন লাইনগুলিতে দুটি ফরোয়ার্ড স্ল্যাশ দ্বারা প্রতিনিধিত্ব করা হয় (নীচের উদাহরণে নোট দেখুন)।

ভরাট নোটের মাথা (ত্রৈমাসিক এবং অষ্টম নোটের জন্য) প্রতিনিধিত্ব করে (@)। একটি খালি নোটের মাথা (অর্ধ এবং পুরো নোটগুলির জন্য) প্রতিনিধিত্ব করে ( )

দুর্ঘটনার (তীক্ষ্ণ, ফ্ল্যাটগুলি, প্রাকৃতিক) উদাহরণ নোটগুলিতে যেমন দুর্ঘটনার ডান দিকের এবং নোটের মাথার বাম পাশের মাঝখানে ঠিক একটি অক্ষর হিসাবে দেখানো উচিত।

প্রয়োজনে লেজার লাইনগুলি ব্যবহার করা উচিত 7এবং নোটের মাথার চারপাশে কেন্দ্রে দৈর্ঘ্য হওয়া উচিত length

প্রতিটি নোট 12অক্ষরের প্রশস্ত হওয়া উচিত ।

উদাহরণ দ্রষ্টব্য:

                                         |_                    
                                         |_| ( )                
                      |                    |------              
                      |                                         
------------ ---------|-- ------------ ------------ ------------
                      |                                         
------------ ---------|-- ---|-------- ------------ ------------
      (@)    _|_|_    |      |_                                 
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
     |        | |              |                             | \
-----|------ ------------ -----|------ ------------ ---------|--
     |                         |                             |  
-----|------ ------------ -----|------ ------------ ---------|--
     |                         | /                           | 
                               |/                       --(@)--

quarter note half note    eighth note  whole note   eighth note
              sharped      flatted      natural

12-অক্ষরের নোটের পরে, নোটটি একটি চতুর্থ নোট হলে 2 * 12 - 12 = 12অক্ষরগুলি ফাঁকা ছেড়ে দিন (হয় বা -লাইনটির উপর নির্ভর করে)। নোটটি যদি অর্ধেক নোট হয় তবে 4 * 12 - 12 = 36অক্ষরগুলি ফাঁকা রাখুন। নোটটি যদি একটি সম্পূর্ণ নোট হয় তবে 8 * 12 - 12 = 84অক্ষরগুলি ফাঁকা রাখুন। অষ্টম নোটের জন্য অতিরিক্ত অক্ষর যুক্ত করবেন না।

প্রতিটি পরিমাপের শেষে (ক্লেফ বা বার লাইনের পরে 96 টি অক্ষর), একটি বার লাইন আউটপুট করুন। এটি উপরের এবং নীচে-সর্বাধিক রেখার (অন্তর্ভুক্ত) প্রতিটি অক্ষরকে নীচে রেখে |এবং এর -সাথে এবং এর মাধ্যমে প্রতিস্থাপন করে সম্পন্ন করা হয় +। (প্রশ্নের নীচে উদাহরণ আউটপুট দেখুন)।

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

+-++
| ||
+-++
| ||
. .. 
. .. 

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

এই কাজের উদ্দেশ্যে, শার্পস, ফ্ল্যাট এবং প্রাকৃতিক শুধুমাত্র একটি অষ্টক মধ্যে একটি নোট প্রভাবিত করে, এবং একটি ক্লাফ (A5 উপর একটি ধারালো A4 তীক্ষ্ণ হয় না, এবং শীর্ষ কর্মীদের সি 4 এ একটি ফ্ল্যাট সৃষ্টি করে না) সি 4 নীচে কর্মীদের সমতল করা হবে)।

শুধুমাত্র বোনাস জন্য তথ্য

বোনাস সঠিকভাবে অষ্টম নোট সংযোগ জড়িত।

যখন টানা দুটি অষ্টম নোট থাকে, তখন কোয়ার্টার নোট বিটের সাথে সংযুক্ত থাকে (অন্য কথায়, প্রথম অষ্টম নোটের আগে অক্ষরের সংখ্যা 24 এর একক হয়), দুটি অষ্টম নোট সংযুক্ত করতে হয়।

চিরকুটটি একটি কর্মীদের মধ্য থেকে নোট হতে হবে। উভয় নোট মধ্যম থেকে একই দূরত্ব থাকেন, হয় নোট নোট হতে পারে একটি । অন্য নোটটি নোট বি হতে দিন ।

দিক উভয় ডালপালা নোট স্টেম দিক হওয়া উচিত একজন

নোটগুলির একটির 6কান্ডটি লম্বা লম্বা হওয়া উচিত (যেমনটি সাধারণ কান্ডের ক্ষেত্রে হয়), এবং অন্যান্য নোটের কান্ডটি অন্য নোটের ডাঁটির শেষ প্রান্তে প্রসারিত করা উচিত।

ডালপালা সাথে সংযুক্ত করা উচিত _

সংযুক্ত অষ্টম নোট উদাহরণ:

                                   ___________                            
                                  |           |                           
                                  |           |                           
                                  |           |                           
                                  |           |       --(@)--             
                            |     |           |        |                  
------------------------ ---|_----|-----------|-- -----|------------------
                            |/ (@)            |        |        |_        
------------------------ ---------------------|-- -----|--------|_|-(@)---
      (@)   _|_|_                             |        |          ||      
-----|------_|_|_-(@)--- ---------------------|-- -----|-----------|------
     |       | | |                            |        |           |      
-----|-----------|------ ---------------------|-- -----|-----------|------
     |           |                            |        |           |      
-----|-----------|------ ------------------(@)--- -----|___________|------
     |           |                                                        
     |___________|                                                        

উদাহরণ ইনপুট এবং আউটপুট

ইনপুট :

A#4/4 G#4/4 F#4/2 A#4/4 G#4/4 F#4/2 F#4/8 F#4/8 F#4/8 F#4/8 G#4/8 G#4/8 G#4/8 G#4/8 A#4/4 G#4/4 F#4/2
A#3/4 G#3/4 F#3/2 A#3/4 G#3/4 F#3/2 F#3/2 G#3/2 F#3/4 E#3/4 F#3/2

আউটপুট :

       ^                                                                                                                                                                                                                                                                                                                                                                                                                      
      | |            |                                                                                                |                                                                                                                                                                                                 |                                                                                          
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
      /              |                       |                       |                                      |         |                       |                       |                                      |         |           |           |           |           | \         | \         | \         | \|         |                       |                       |                                      | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
    / |              |                       |                       |                                      |         |                       |                       |                                      |         |           |           |           |           |           |           |           |  |         |                       |                       |                                      | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
   | /  \   _|_|_ (@)               _|_|_    |                       |                                      |_|_|_ (@)               _|_|_    |                       |                                      |         |           |           |           |  _|_|_    |           |           |           |  |_|_|_ (@)               _|_|_    |                       |                                      | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
    \ | /                            | |                    _|_|_ ( )                                       |                         | |                    _|_|_ ( )                                       |_|_|_ (@)         (@)         (@)         (@)    | |                                            |                         | |                    _|_|_ ( )                                       | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
      |                                                                                                     |                                                                                                |                                                                                                |                                                                                                | ||
    \_/                                                                                                     |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
            _|_|_                                                                                           |_|_|_                                                                                           |                                                                                                |                                                                                                | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
   /   \ |   | | |                  _|_|_ (@)               _|_|_                                           | | | |                  _|_|_ (@)               _|_|_                                           |_|_|_                                           _|_|_ ( )                                       |_|_|_                                                                                           | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
       | |       |                       |                   | | |                                          |     |                       |                   | | |                                          | | | |                                               |                                          | | | |                  _|_|_ (@)                    |                                          | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
      /          |                       |                       |                                          |     |                       |                       |                                          |     |                                               |                                          |     |                       |                       |                                          | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
                                         |                       |                                          |                             |                       |                                          |     |                                               |                                          |     |                       |                       |                                          | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
                                                                                                                                                                                                                                                                                                                                            |                                                                      

প্রদর্শনের খাতিরে, তৃতীয় পরিমাপে, F#অষ্টম নোটগুলি সংযুক্ত রয়েছে, তবে G#অষ্টম নোটগুলি নেই। আপনার প্রোগ্রামটি হয় হয় যখনই প্রযোজ্য (বোনাসের জন্য) অষ্টম নোটকে সংযুক্ত করা উচিত, বা সেগুলি সমস্ত সংযোগ বিচ্ছিন্ন করে দেওয়া উচিত।

অন্যান্য তথ্য

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

আপনি আপনার একটি উদাহরণে মিডল সি (ট্র্যাবল ক্লিপ ধরে ধরে) কোয়েভারটি পূরণ করেন নি।
মুজার

@ মুজার ধন্যবাদ, স্থির।
es1024

এছাড়াও, আমি বলতে হবে, কি দুর্দান্ত চ্যালেঞ্জ। এই মুহূর্তে একটি এন্ট্রি লেখার জন্য আমার নিজের কাছে সময় নেই তবে লোকেরা কী নিয়ে আসে তা দেখতে আমি খুব আগ্রহী। (পিএস: আমি সুরটি তাত্ক্ষণিকভাবে স্বীকৃতি দিয়েছি এটি কি খারাপ
?;

পছন্দ করুন
es1024

7
এটা সত্যিই দারুন! শক্ত, তবে দুর্দান্ত।
kirbyfan64sos

উত্তর:


15

পাইথন - 8.85 ... কেবি ( 9369 9066 বি)

হা হা! পশ্চিমের দ্রুততম বন্দুক?

এটি সঠিকভাবে গল্ফ করা থেকে দূরে, তবে এটি কমপক্ষে কাজ করে। এই পোস্ট করার মুহুর্তে, এটি স্বল্পতম এন্ট্রি, তাই ... হ্যাঁ?

আমাকে এই বলে শুরু করতে দাও যে আমি কখনও এই বড় কিছু গল্ফ করিনি, এবং আমিও জানি না যে কোথায় শুরু করব।

এই এন্ট্রি নেই না এখনো বোনাস পয়েন্ট রয়েছে, কিন্তু আমি এখনও মত যোগ করার জন্য চাই যে golfing আগে।

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

কাঁপানো এবং খাদ ক্লেফ জন্য নিম্নলিখিত দুটি ইনপুট দেওয়া হয়:

A#4/4 G#4/4 F#4/2 A#4/4 G#4/4 F#4/2 F#4/8 F#4/8 F#4/8 F#4/8 G#4/8 G#4/8 G#4/8 G#4/8 A#4/4 G#4/4 F#4/2
A#3/4 G#3/4 F#3/2 A#3/4 G#3/4 F#3/2 F#3/2 G#3/2 F#3/4 E#3/4 F#3/2

নিম্নলিখিত আউটপুট ফলাফল:

       ^                                                                                                                                                                                                                                                                                                                                                                                                           
      | |            |                                                                                                |                                                                                                                                                                                                 |                                                                                          
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+---------------------------------------------------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
      /              |                       |                       |                                      |         |                       |                       |                                      |         |\          |\          |\          |\          | \         | \         | \         | \|         |                       |                       |                                      | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-\---------|-\---------|-\---------|-\---------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
    / |              |                       |                       |                                      |         |                       |                       |                                      |         |           |           |           |           |           |           |           |  |         |                       |                       |                                      | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
   | /  \   _|_|_ (@)               _|_|_    |                       |                                      |_|_|_ (@)               _|_|_    |                       |                                      |         |           |           |           |  _|_|_    |           |           |           |  |_|_|_ (@)               _|_|_    |                       |                                      | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
    \ | /                            | |                    _|_|_ ( )                                       |                         | |                    _|_|_ ( )                                       |_|_|_ (@)         (@)         (@)         (@)    | |                                            |                         | |                    _|_|_ ( )                                       | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
      |                                                                                                     |                                                                                                |                                                                                                |                                                                                                | ||
    \_/                                                                                                     |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
                                                                                                            |                                                                                                |                                                                                                |                                                                                                | ||
            _|_|_                                                                                           |_|_|_                                                                                           |                                                                                                |                                                                                                | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
   /   \ |   | | |                  _|_|_ (@)               _|_|_                                           | | | |                  _|_|_ (@)               _|_|_                                           |_|_|_                                           _|_|_ ( )                                       |_|_|_                                                                                           | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------( )---------------------------------------+-++
       | |       |                       |                   | | |                                          |     |                       |                   | | |                                          | | | |                                               |                                          | | | |                  _|_|_ (@)                    |                                          | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
      /          |                       |                       |                                          |     |                       |                       |                                          |     |                                               |                                          |     |                       |                       |                                          | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
                                         |                       |                                          |                             |                       |                                          |     |                                               |                                          |     |                       |                       |                                          | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++

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

grandstaff.py

দুটি কাঁপুনি এবং বেস ক্লাফ কর্মী রয়েছে এবং উভয়ের মধ্যে বার্লাইনগুলি আঁকতে পরিচালনা করে।

class GrandStaff:
  def __init__(self, trebbleStr, bassStr):
    self.trebbleStr = trebbleStr
    self.bassStr = bassStr
    self.trebbleStaff = Staff("trebble", self.trebbleStr)
    self.bassStaff = Staff("bass", self.bassStr)
    self.bassOffset = 16

    self.lines = {}
    maxmin = self.trebbleStaff.getYExtremes()
    for y in range(maxmin[0], maxmin[1] + 1):
      self.lines[y] = self.trebbleStaff.lines[y]
    maxmin = self.bassStaff.getYExtremes()
    for y in range(maxmin[0], maxmin[1] + 1):
      self.lines[y + self.bassOffset] = self.bassStaff.lines[y]

    for y in range(5, 12):
      self.lines.setdefault(y, [" " for x in range(len(self.trebbleStaff.getLineStr(0)))])
      xpos = 0
      for block in self.trebbleStaff.getBlocks():
        if block.type == "barline":
          self.lines[y][xpos] = '|'
        elif block.type == "finalDoubleBarline":
          for x in [0, 2, 3]:
            self.lines[y][xpos + x] = '|'
        xpos += block.width

  def __str__(self):
    outstr = ""
    maxmin = sorted(self.lines.keys())
    for y in range(maxmin[0], maxmin[-1]):
      self.lines.setdefault(y, [" " for x in range(len(self.trebbleStaff.getLineStr(0)))])
      outstr += ''.join(self.lines[y]) + '\n'

        return outstr

staff.py

একক কর্মী। "ব্লক" অবজেক্টগুলির একটি অ্যারে রয়েছে যা নোটস, বারলাইনস, ক্লিফস ইত্যাদির প্রতিনিধিত্ব করে This এই শ্রেণিটি নোটগুলির ফাঁকা স্থান এবং উপযুক্ত স্থানে বারলাইন সন্নিবেশ পরিচালনা করে।

class Staff:
  def __init__(self, clef, inputStr):
    self.clef = clef
    self.inStr = inputStr
    self.lines = {}
    self.__blocks = []
    if clef == "trebble":
      self.__blocks.append(Block("trebbleClef"))
    elif clef == "bass":
      self.__blocks.append(Block("bassClef"))

    notes = inputStr.split(" ");
    measureLength = 0
    for note in notes:
      if measureLength >= 1:
        self.__blocks.append(Block("barline"))
        measureLength -= 1
      parts = note.split("/")
      noteLength = 0
      if len(parts) == 2:
          noteLength += 1 / float(parts[1])
          measureLength += noteLength
      self.__blocks.append(Block("note", note, self.clef))
      for n in range(int(noteLength * 8) - 1):
          self.__blocks.append(Block("staff"))
    self.__blocks.append(Block("finalDoubleBarline"))

    sharps = []
    flats = []
    naturals = []
    for block in self.__blocks:
      if block.type == "note":
        val = block.value

        if block.isSharp:
          if val not in sharps:
            sharps.append(val)
          else:
            block.clearAccidental()
        elif block.isFlat:
          if val not in flats:
            flats.append(val)
          else:
            block.clearAccidental()
        else:
          if val in sharps:
            sharps.remove(val)
            block.setNatural()
          if val in flats:
            flats.remove(val)
            block.setNatural()

      elif block.type == "barline" or block.type == "finalDoubleBarline":
        sharps = []
        flats = []

    maxmin = self.getYExtremes()
    for y in range(maxmin[0], maxmin[1] + 1):
      self.lines[y] = list(self.getLineStr(y))

  def getLineStr(self, lineNum):
    outstr = ""
    for block in self.__blocks:
      outstr += block.getLineStr(lineNum)
    return outstr

  def getYExtremes(self):
    maxmin = [0, 0]
    for block in self.__blocks:
      mm = block.getYExtremes()
      maxmin[0] = mm[0] if mm[0] < maxmin[0] else maxmin[0]
      maxmin[1] = mm[1] if mm[1] > maxmin[1] else maxmin[1]
    return maxmin

  def getBlocks(self):
    return self.__blocks

  def __str__(self):
    maxmin = self.getYExtremes()
    outstr = ""
    for line in range(maxmin[0], maxmin[1] + 1):
      outstr += self.getLineStr(line) + "\n"
    return outstr

block.py

এই শ্রেণিটি ASCII পাঠ্যের "উপস্থাপনা" (বা সম্ভবত রচনা) পরিচালনা করে। এর ভিতরে শক্ত-কোডেড প্রতীক রয়েছে যেমন কাঁপানো এবং খাদ ক্লাফস, একটি ফাঁকা কর্মী, বারলাইন, দুর্ঘটনা এবং বিভিন্ন সময়কালের নোট তৈরির জন্য প্রয়োজনীয় টুকরো। এগুলি চূড়ান্ত ASCII ব্লক উত্পাদন করার জন্য অনুক্রমিক ক্রম "পিক্সেল" অক্ষরের 2D গ্রিডের উপরে "আঁকানো"।

class Block:

  __staff = [[range(-4, 5, 2),"w",'-']]
  __trebble = [[-6, 7, '^'], [range(-5, 6), 6, '|'], [-5, 8, '|'], [-4, 7, '/'], [-3, 6, '/'], [-2, 5, '/'], [-1, 4, '/'], [0, 3, '/'], [0, range(6,8), '_'], [1, 3, '|'], [1, 5, '/'], [1, 6, ' '], [1, 8, '\\'], [2, 3, '\\'], [2, 5, '\\'], [2, 8, '|'], [3, 4, '\\'], [3, 8, '/'], [6, 4, '\\'], [6, 5, '_'], [6, 6, '/']]
  __bass = [[-4, range(4, 7), '_'], [-3, 3, '/'], [-3, 7, '\\'], [range(-3, 0, 2), 9, '|'], [-2, 3, '\\'], [range(-2, 0), 7, '|'], [0, 7, '/'], [1, 6, '/'], [2, 5, '/']]
  __sharp = [[range(-1, 1), range(0, 5), '_'], [range(-1, 2), range(1, 4, 2), '|']]
  __flat = [[range(-2, 1), 3, '|'], [-1, 4, '_'], [0, 4, '/']]
  __natural = [[range(-1, 1), 2, '|'], [range(-1, 1), 3, '_'], [range(0, 2), 4, '|']]
  __noteOpen = [[0, 6, '('], [0, 7, ' '], [0, 8, ')']]
  __noteClosed = [[0, 6, '('], [0, 7, '@'], [0, 8, ')']]
  __stemUp = [[range(-6, 0), 9, '|']]
  __stemDown = [[range(1, 7), 5, '|']]
  __eighthTailUp = [[-6, 10, '\\'], [-5, 11, '\\']]
  __eighthTailDown = [[6, 6, '/'], [5, 7, '/']]
  __barline = [[range(-4, 5), 0, '+'], [range(-3, 4, 2), 0, '|']]
  __finalBarline = [[range(-4, 5, 2), [0, 2, 3], '+'], [range(-3, 4, 2), [0, 2, 3], '|'], [range(-4, 5, 2), 1, '-']]
  __staffExtender = [[0, range(4, 11), '-']]

  def __init__(self, type, notestr = "", clef = "trebble"):
    if type == "note":
      self.clef = clef
      self.notestr = notestr.upper().split('/')[0]
      self.duration = int(notestr.upper().split('/')[1])
      self.isSharp = True if notestr[1] == '#' else False
      self.isFlat = True if notestr[1] == 'b' else False
      self.isNatural = False;
      self.__clefCallibration = {"trebble":{"A":1,"B":0,"C":6,"D":5,"E":4,"F":3,"G":2,"octave":4}, "bass":{"A":-4,"B":-5,"C":1,"D":0,"E":-1,"F":-2,"G":-3,"octave":3}}
      self.value = self.__clefCallibration[self.clef][self.notestr[0]] + ((self.__clefCallibration[self.clef]["octave"] - int(self.notestr[-1])) * 7)

    self.lines = {}
    self.type = type

    self.__drawBlock()

  def __drawBlock(self):
    self.lines = {}
    if self.type == "note":
      self.width = 12
      self.__draw(self.__staff)

      for y in range(6, self.value + 1, 2):
        self.__draw(self.__staffExtender, y)
      for y in range(-6, self.value - 1, -2):
        self.__draw(self.__staffExtender, y)

      if self.duration in [1, 2]:
        self.__draw(self.__noteOpen, self.value)
      else:
        self.__draw(self.__noteClosed, self.value)

      if self.duration != 1:
        if self.value < 0:
          self.__draw(self.__stemDown, self.value)
          if self.duration == 8:
            self.__draw(self.__eighthTailDown, self.value)
        else:
          self.__draw(self.__stemUp, self.value)
          if self.duration == 8:
            self.__draw(self.__eighthTailUp, self.value)

      if self.isSharp:
        self.__draw(self.__sharp, self.value)
      elif self.isFlat:
        self.__draw(self.__flat, self.value)
      elif self.isNatural:
        self.__draw(self.__natural, self.value)

      # self.__draw(__staffExtender, self.value)
    elif self.type == "staff":
      self.width = 12
      self.__draw(self.__staff)
    elif self.type == "barline":
      self.width = 1
      self.__draw(self.__barline)
    elif self.type == "finalDoubleBarline":
      self.width = 4
      self.__draw(self.__finalBarline)
    elif self.type == "trebbleClef":
      self.width = 12
      self.__draw(self.__staff)
      self.__draw(self.__trebble)
    elif self.type == "bassClef":
      self.width = 12
      self.__draw(self.__staff)
      self.__draw(self.__bass)

  def __draw(self, data, yOffset = 0):
    for char in data:
        self.__drawChunk(char, yOffset)

  def __drawChunk(self, char, yOffset = 0):
      xrng = []
      yrng = []
      drawChr = char[2]

      if type(char[0]) == int:
        yrng = [char[0]]
      elif type(char[0]) == list:
        yrng = char[0]
      else:
        print("ERROR: invalid y range input")

      if type(char[1]) == str:
        if char[1] == 'w':
          xrng = range(self.width)
      elif type(char[1]) == int:
        xrng = [char[1]]
      elif type(char[1]) == list:
        xrng = char[1]
      else:
        print("ERROR: invalid x range input")

      yrng = [y + yOffset for y in yrng]

      for y in yrng:
        self.lines.setdefault(y,[" " for i in range(self.width)])
        for x in xrng:
          self.lines[y][x] = drawChr

  def getLineStr(self, lineNum):
    return "".join(self.lines.setdefault(lineNum, [" " for i in range(self.width)]))

  def getYExtremes(self):
    k = sorted(self.lines.keys())
    return [k[0], k[-1]]

  def setSharp(self):
    self.isSharp = True
    self.isFlat = False
    self.isNatural = False
    self.__drawBlock()

  def setFlat(self):
    self.isSharp = False
    self.isFlat = True
    self.isNatural = False
    self.__drawBlock()

  def setNatural(self):
    self.isSharp = False
    self.isFlat = False
    self.isNatural = True
    self.__drawBlock()

  def clearAccidental(self):
    self.isSharp = False
    self.isFlat = False
    self.isNatural = False
    self.__drawBlock()

  def __str__(self):
    strOut = ""
    first = sorted(self.lines.keys())[0]
    last = sorted(self.lines.keys())[-1]
    for line in range(first, last + 1):
        strOut += self.getLineStr(line) + "\n"
    return strOut

main.py

এই শ্রেণিটি গ্র্যান্ডস্টাফের একটি উদাহরণ তৈরি করে, প্রদত্ত স্ট্রিং ইনপুটগুলি পাস করে এবং তার স্ট্রিংয়ের মান মুদ্রণ করে প্রোগ্রামটি কেবল "চালায়"।

import sys
from block import *
from grandstaff import *
from staff import *

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