एक ASCII कुंजी हस्ताक्षर ड्रा


22

एक नोट के इनपुट को देखते हुए, ट्रेबल क्लीफ पर संबंधित प्रमुख कुंजी का ASCII ड्राइंग आउटपुट करता है।

यहाँ सभी प्रमुख कुंजियाँ हैं (जिसमें डबल-शार्प या डबल-फ़्लैट शामिल नहीं हैं) और उनके अनुरूप कुंजी हस्ताक्षर हैं:


विकिपीडिया उपयोगकर्ता द्वारा पांचवें डीलक्स 4 का घेरा बस सादा विधेयक, कॉपीराइट CC BY-SA 3.0

यदि इनपुट शार्प के साथ एक कुंजी है, तो उचित संख्या में शार्प के साथ निम्नलिखित ASCII आर्ट ड्रा करें:

   #
-#-------
      #
----#----
  #
-------#-
     #
---------

---------

और अगर फ्लैट्स के साथ इनपुट एक कुंजी है:

---------
  b
----b----
      b
-b-------
   b
-----b---
       b
---------

यहाँ संभावित आदानों का संक्षिप्त सारांश है और साथ ही वे कितने शार्प या फ़्लैट का उपयोग करते हैं:

   0   1   2   3   4   5   6   7
#  C   G   D   A   E   B   F#  C#
b  C   F   Bb  Eb  Ab  Db  Gb  Cb

डैश की सभी पाँच लाइनें हमेशा खींची जानी चाहिए, लेकिन प्रति पंक्ति डैश की संख्या कई हो सकती है जैसे कि शार्प्स या फ़्लैट्स में प्रत्येक तरफ कम से कम एक स्तंभ हो, जब तक कि डैश की प्रत्येक पंक्ति की लंबाई समान हो। उदाहरण के लिए, ये सभी इनपुट के लिए स्वीकार्य आउटपुट हैं Ab:

---------   ------   ---------   ----------------
  b           b           b          b
----b----   ----b-   -------b-   ------b---------

-b-------   -b----   ----b----   ---b------------
   b           b           b          b
---------   ------   ---------   ----------------

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

सी प्रमुख के मामले में, जिसमें न तो कोई शार्प है और न ही फ्लैट्स, किसी भी सकारात्मक संख्या में डैश प्रति पंक्ति (एक भी) स्वीकार्य है।

व्हाट्सएप पर अग्रणी या अनुगामी की कोई भी राशि ठीक है, क्योंकि प्रत्येक पंक्ति में रिक्त स्थान रिक्त हैं। जब तक प्रत्येक पंक्ति पर समान संख्या न हो तब तक अतिरिक्त अग्रणी स्थान ठीक हैं।

आप लोअरकेस में इनपुट ले सकते हैं या आवश्यकता हो सकती है कि बिना किसी तीव्र या फ्लैट के इनपुट्स में एक अनुगामी स्थान हो, यदि आप ऐसा चाहते हैं।

चूंकि यह , बाइट्स में सबसे छोटा समाधान जीत जाएगा।



3
@ नील आह, आपकी चुनौती चुराने के लिए क्षमा करें> _ <मैंने पोस्ट करने से पहले मुख्य साइट की खोज की लेकिन सैंडबॉक्स की जांच करने के लिए नहीं सोचा।
दरवाज़े

जवाबों:


3

पायथन 2 , 206 197 178 175 168 168 बाइट्स

-12 बाइट्स के लिए मिस्टर एक्सकोडर को धन्यवाद!

यह एक फ़ंक्शन है जो परिणाम को वर्णों की 2 डी सूची के रूप में लौटाता है। यदि इनपुट में एक तेज / फ्लैट नहीं है, तो इसे एक स्थान के साथ गद्देदार किया जाना चाहिए।

def f(k,r=range(10)):n="CGDAEB".find(k[0])+7*' #'.find(k[1]);return[[(' -'[i%2],'b#'[n>0])[0<j<=abs(n)and`i`==(n*"1403625"+"5263748")[j-1]]for j in r]for i in r]

इसे ऑनलाइन आज़माएं!


मुझे लगता है कि "FCGDAEB".find(k[0])-1नक्शे Fके लिए -1उनके अनुक्रमण करने के लिए और दूसरों - 1, तो मुझे लगता है n="CGDAEB".find(k[0])+7*('#'in k)-7*('b'in k)के बजाय काम करेगा। ( 175 बाइट्स? )
मिस्टर एक्सकोडर

@ Mr.Xcoder स्मार्ट है ... धन्यवाद।
फ्लिपकैक

3

चारकोल , 60 बाइट्स

≔⁻⁺⊖﹪⊗℅§θ¬χ⁷×⁷№θ#×⁷№θbθ←UO⁹¦⁹-¶Fθ«Jι⊖﹪⊕׳ι⁷#»F±θ«Jι⊕﹪⁺³×⁴ι⁷b

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। स्पष्टीकरण:

≔⁻⁺⊖﹪⊗℅§θ¬χ⁷×⁷№θ#×⁷№θbθ

प्रमुख हस्ताक्षर में शार्प्स की संख्या की गणना करें।

←UO⁹¦⁹-¶

सीढ़ी को प्रिंट करें, लेकिन मूल के एक वर्ग को छोड़ दिया ताकि पहला तेज / फ्लैट कॉलम शून्य में हो।

Fθ«

किसी भी शार्प पर लूप।

Jι⊖﹪⊕׳ι⁷#»

तेज की पंक्ति की गणना करें और इसे प्रिंट करें।

F±θ«

किसी भी फ्लैट पर लूप।

Jι⊕﹪⁺³×⁴ι⁷b

फ्लैट की पंक्ति की गणना करें और इसे प्रिंट करें।


2

Befunge, 139 बाइट्स

~9%:4%7*+4/7%~6%1-2/7*+vv\`0:\!-g02+*2g00+1%7+g00*+3g00::<<0+55p02:_@
- b#09p01*-1*2p00:`0:-8<>10g`!**:00g2+*\!20g2%*+1g,1+:8`!#^_>$,:1-\^1

इसे ऑनलाइन आज़माएं!

ध्यान दें कि इनपुट को एक लाइनफीड के साथ समाप्त करने की उम्मीद है, जैसा कि आम तौर पर प्रोग्राम को अंतःक्रियात्मक रूप से चलाते समय होता है।

व्याख्या

हम दो stdin से पात्रों से पढ़ना प्रारंभ - मुख्य ध्यान दें, एन , और एक आकस्मिक, एक (एक linefeed हो सकता है जो अगर कोई आकस्मिक है)। उन मूल्यों का उपयोग करते हुए, हम कुंजी हस्ताक्षर संख्या, साइनम की गणना करते हैं , इस प्रकार है:

signum = (n%9 + n%9%4*7)/4%7 + (a%6 - 1)/2*7 - 8

इसका मान -7 से 7 तक होता है, जहां संकेत हमें बताता है कि हमें शार्प या फ़्लैट (पॉज़िटिव या नेगेटिव) की ज़रूरत है या नहीं, और एब्सोल्यूट वैल्यू हमें शार्प या फ़्लैट की संख्या प्रदान करती है। इसलिए बाद में उपयोग के लिए, हम साइन, एस और आकस्मिक गिनती को निकालते हैं , साथ में,:

s   = (signum > 0)
cnt = abs(signum) 

तब हमारे पास दो नेस्टेड लूप होते हैं, एक पंक्ति संख्या, आर , 9 से 0 से 0 तक, और एक कॉलम नंबर, सी , 0 से 8 तक। एक विशेष पंक्ति और स्तंभ के लिए, हम गणना करते हैं कि क्या एक आकस्मिक उस पर दिखाई देना चाहिए के साथ बिंदु:

accidental = (r == (c*(s+3) + s)%7 + 1 + s*2) and (c > 0) and (c <= cnt)

यदि यह आकस्मिक नहीं है, तो हमें पंक्ति या आर के आधार पर एक पंक्ति या स्थान को आउटपुट करने की आवश्यकता है , विषम या यहां तक ​​कि। और अगर यह एक दुर्घटना है, हम उत्पादन के लिए एक तेज या संकेत के बल निर्भर करता है, जरूरत है रों । तो हम निम्न सूत्र का मूल्यांकन करते हैं:

index = (!accidental * (r%2)) + (accidental * (s+2))

जो हमें 0 से 3 की सीमा में एक इंडेक्स देता है, जो एक लाइन, एक स्पेस, एक फ्लैट या एक तेज का प्रतिनिधित्व करता है। हम बस उस इंडेक्स का उपयोग एक टेबल से आवश्यक आउटपुट कैरेक्टर देखने के लिए करते हैं, जिसे आप कोड की दूसरी पंक्ति के शुरू में एम्बेडेड देख सकते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.