ASCII पियानो कीबोर्ड


24

पियानो की चाबियाँ 3 वर्ण चौड़ी और 7 वर्ण लंबी होती हैं। हालाँकि, यदि हर कुंजी 3 थी , तो चौड़ी थी, काली चाबी के लिए पर्याप्त जगह नहीं होगी। यही कारण है कि कुछ सफेद चाबियों के कुछ हिस्सों को काट दिया गया है। सफेद कुंजी के 3 प्रकार हैं।

सही आधा गायब (आर) के साथ की:

____
|  |
|  |
|  |
|  |
|   |
|   |
|___|

बाएं आधे गायब होने की कुंजी (L):

 ____
 |  |
 |  |
 |  |
 |  |
|   |
|   |
|___|

और बाएं और दाएं हिस्सों की चाबी गायब है (M):

 ___
 | | 
 | | 
 | | 
 | | 
|   |
|   |
|___|

एक असली कीबोर्ड पर, इनका पैटर्न इस प्रकार है:

RMLRMML, RMLRMML, RMLRMML...

और कुल 88 कुंजियों के लिए दोहराता है। अब आप इसे नहीं देख सकते हैं, जब कुंजियाँ अलग-अलग दिखाई जाती हैं, लेकिन जब आप उन्हें एक साथ हिलाते हैं, तो आप काली चाबियाँ देख सकते हैं।

_________________________________________________________
|  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |
|  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |
|  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |
|  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|

आपका कार्य

एक सकारात्मक पूर्णांक एन को देखते हुए , पियानो की इस एएससीआई-कला को एन व्हाइट कुंजी के साथ प्रिंट करें । आपको 1 से 52 तक किसी भी एन को शामिल करने में सक्षम होना चाहिए (चूंकि वास्तविक 88-कुंजी पियानो में 52 सफेद कुंजी हैं)। यहां 1 से 8 तक का परीक्षण आउटपुट है, और उसके बाद पैटर्न इसी तरह से बढ़ता है।

1
____
|  |
|  |
|  |
|  |
|   |
|   |
|___|

2
________
|  | | |
|  | | |
|  | | |
|  | | |
|   |   |
|   |   |
|___|___|

3
_____________
|  | | | |  |
|  | | | |  |
|  | | | |  |
|  | | | |  |
|   |   |   |
|   |   |   |
|___|___|___|

4
________________
|  | | | |  |  | 
|  | | | |  |  | 
|  | | | |  |  | 
|  | | | |  |  | 
|   |   |   |   |
|   |   |   |   |
|___|___|___|___|

5
____________________
|  | | | |  |  | | | 
|  | | | |  |  | | | 
|  | | | |  |  | | | 
|  | | | |  |  | | | 
|   |   |   |   |   |
|   |   |   |   |   |
|___|___|___|___|___|

6
________________________
|  | | | |  |  | | | | | 
|  | | | |  |  | | | | | 
|  | | | |  |  | | | | | 
|  | | | |  |  | | | | | 
|   |   |   |   |   |   |
|   |   |   |   |   |   |
|___|___|___|___|___|___|

7
_____________________________
|  | | | |  |  | | | | | |  |
|  | | | |  |  | | | | | |  |
|  | | | |  |  | | | | | |  |
|  | | | |  |  | | | | | |  |
|   |   |   |   |   |   |   |
|   |   |   |   |   |   |   |
|___|___|___|___|___|___|___|

8
________________________________ 
|  | | | |  |  | | | | | |  |  | 
|  | | | |  |  | | | | | |  |  | 
|  | | | |  |  | | | | | |  |  | 
|  | | | |  |  | | | | | |  |  | 
|   |   |   |   |   |   |   |   |
|   |   |   |   |   |   |   |   |
|___|___|___|___|___|___|___|___|

और पिछले नहीं बल्कि कम से कम, यहाँ एक पूर्ण 52 प्रमुख आउटपुट है:

_________________________________________________________________________________________________________________________________________________________________________________________________________________
|  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |
|  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |
|  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |
|  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |  | | | | | |  |  | | | |  |
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
|   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|

मानक खामियों पर रोक लगाई जाती है, और बाइट्स में सबसे छोटा जवाब जीत जाता है!


"मानक कमियां" क्या हैं?
वाइल्डकार्ड


किसी भी / सभी लाइनों पर अनुगामी रिक्त स्थान की अनुमति है? कैसे एक अनुगामी newline के बारे में?
सोक

1
@AlexL। चूंकि असली 88-कुंजी पियानो में 55 सफेद कुंजी हैं
DJMcMayhem

1
@ बीएमएसी> _> मैं नहीं ... <_ <मुझे पता नहीं है कि आप किस बारे में बात कर रहे हैं। मैंने कहा ५२, देखिये! आप इसे स्पष्ट रूप से R̶e̶v̶i̶s̶i̶o̶n see ̶H̶i̶s̶t̶o̶r̶y̶ उह में देख सकते हैं, मेरा मतलब है कि अभी पोस्ट की स्थिति! वैसे भी, शुक्र है कि शायद किसी भी मौजूदा जवाब को नहीं तोड़ा जाएगा, क्योंकि उनमें से ज्यादातर शायद 55+ वैसे भी काम करते हैं।
DJMcMayhem

जवाबों:


4

पायथ, 68 65 63 बाइट्स

*lJ:+\|s@Lj;*L" |"_j4536 7*4Q" $"k\_jb+*4]J*2]K+\|*Q"   |":Kd\_

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

परीक्षण सूट।

इस संस्करण में, मैंने केवल 2 बाइट्स को बचाने के लिए असाइनमेंट (J और K) को अंदर प्रतिस्थापित किया। इसलिए, नीचे दिए गए संस्करण को पढ़ें।

स्पष्टीकरण के साथ पिछला 65-बाइट संस्करण

J:+\|s@Lj;*L" |"_j4536 7*4Q" $"kK+\|*Q"   |"*lJ\_jb+*4]J*2]K:Kd\_

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

J:+\|s@Lj;*L" |"_j4536 7*4Q" $"k    This part generates the most irregular line.

        j;*L" |"_j4536 7            Generate the whole line by black magic
      @L                *4Q         Get the first (4*input) characters of it, with wrapping.
  +\|                               Add "|" in front of it (we took away the first "|")
 :                         " $"k    Replace the ending space by nothing
J                                   Store the line to J.


K+\|*Q"   |"      This part generates the line just below the irregular line.
    *Q"   |"      Repeat "   |" input times
 +\|              Prepend "|"
K                 Store to K


*lJ\_     Now we can actually start printing

*  \_     Repeat "_" ...
 lJ                      [the length of J] times
          (and implicitly print it out)


jb+*4]J*2]K

   *4]J             Repeat J 4 times
       *2]K         Repeat K 2 times
  +                 Concatenate them together
jb                  Join with newlines
                    (and implicitly print it out)

:Kd\_

:K      Replace in K
  d                  " "
   \_                    by "_"
        (and implicitly print it out)

काला जादू

We find the irregular line from input=7, and cut out the first "|":
"  | | | |  |  | | | | | |  |"
 2  1 1 1 2  2  1 1 1 1 1 2

j;*L" |"_j4536 7    Black magic.

         j4536 7    4536 converted to base 7: [1,6,1,4,0]
        _           Reverse: [0,4,1,6,1]
  *L" |"            Repeat " |" <each element> times:
                    [""," | | | |"," |"," | | | | | |"," |"]
j;                  Join by whitespace:
                    "  | | | |  |  | | | | | |  |"

मुझे केवल तुम्हारा मजाक सूझा है। ग्रोन ...
नील

11

जावास्क्रिप्ट (ईएस 6), 155 149 147 बाइट्स

n=>[`_`[r=`repeat`](n*4+(9>>n%7&1)),s=[...Array(n*12/7|0)].map((_,i)=>1998>>i%12&1?` |`:`  |`).join``,s,s,s,s=`   |`[r](n),s,`___|`[r](n)].join`\n|`

जहां \nशाब्दिक न्यूलाइन चरित्र का प्रतिनिधित्व करता है। इस तथ्य का लाभ उठाते हैं कि पहली पंक्ति के बाद की सभी लाइनें एक |चरित्र के साथ शुरू होती हैं। स्पष्टीकरण:

f=
n=>[                        // Start by building up a list of rows
 `_`[r=`repeat`](n*4+       // 4 underscores per key
  (9>>n%7&1)),              // Third and seventh keys have one extra
 s=[...Array(n*12/7|0)]     // Calculate total of white and black keys
  .map((_,i)=>              // Process each key in turn
   1998>>i%12&1?` |`:`  |`  // Bitmap of narrow and wide keys
  ).join``,                 // Join the keys together
 s,s,s,                     // Repeated 4 times in total
 s=`   |`[r](n),            // Full width part of the white keys
 s,                         // Repeated twice in total
 `___|`[r](n)               // Base of the white keys
].join`\n|`                 // Join the rows together
<input type="number" oninput="o.textContent=f(this.value);"><pre id=o>

संपादित करें: चाबियाँ की ऊंचाई पर कल्पना के मेरे गलत निर्धारण को ठीक करके 2 बाइट्स सहेजे गए।


2
आप, सर, बस मेरे दिमाग को उड़ा दिया।
रॉबी कॉइन

ओह, यह अच्छा है, क्या आप किसी प्रकार का वॉकथ्रू जोड़ सकते हैं?
nobe4

यदि आप कर सकते हैं तो आपको एक चलने योग्य स्निपेट जोड़ना चाहिए।
बैलिंट

1

रूबी, 119 बाइट्स

->n{puts ?_*(1+n*4+(0<=>-n%7%4)),(0..6).map{|i|("01"+("%b"%[0xAADAAAD,13][i/4]*99)).tr('10',' |_|'[i/6*2,2])[0,1+n*4]}}

परीक्षण कार्यक्रम में अपराजित

f=->n{
  puts ?_*(1+n*4+(0<=>-n%7%4)),           #Draw 1+n*4 _'s for top row (one less if -n%7%4>0, black note), then...
  (0..6).map{|i|                          #Cycle through remaining 7 rows
    ("01"+("%b"%[0xAADAAAD,13][i/4]*99)).   #Generate string version of binary number corresponding to pattern, repeat 99 times.
    tr('10',' |_|'[i/6*2,2]                 #Binary 1-> space or underscore. Binary 0 -> | (These choices ensured no leading 0)
    )[0,1+n*4]                              #truncate to the right amount of keys.
  }
}


10.times{|j|f[j]}

1

> <>, 188 182 बाइट्स

&0"_"o011.
.\:7%8g95*-"_"o1-:a1@@?.~~~1+:&:&=1+1$
.v~:7=?;ao"|"o1+:0$0$
.>:7%8g"0"-4*:9go1+:9go1+:9go1+9go1+:&:&=3$-1$
 ^
.>"| _"{:}7=?$~::oooo1+:&:&(3*2+1$
>^
^
0120112
  | | | |  |

कार्यक्रम शुरू होने पर स्टैक पर उपस्थित होने के लिए सफेद कुंजी की संख्या मौजूद होनी चाहिए।

संपादित करें : मैं लाइनों 5/6 और 7. के लिए उत्पादन के संयोजन के माध्यम से कुछ बाइट्स दाढ़ी बनाने में कामयाब रहा। पिछला संस्करण:

&0"_"o011.
.\:7%8g95*-"_"o1-:a1@@?.~~~1+:&:&=1+1$
.v~ao"|"o1+:0$0$.
.>:7%8g"0"-4*:9go1+:9go1+:9go1+9go1+:&:&=3$-1$
 ^
.>"|   "oooo1+:&:&(3*2+1$
 ^
 "|___"oooo1+:&:&=?;
0120112
  | | | |  |

1

PHP, 238 बाइट्स

$n=$argv[1];$s=str_repeat;echo'_'.$s($a=$s('_',28),$m=($n-$r=$n%7)/7).substr($a,0,$k=4*$r-($r&&$r!=3))."\n",$g='|'.$s($b='  | | | |  |  | | | | | |  |',$m).substr($b,0,$k)."\n",$g,$g,$g,$h='|'.$s('   |',$n)."\n",$h,'|'.$s('___|',$n)."\n";

हमेशा की तरह, इस कोड को प्रीपेंड करें <?php, इसे एक PHP फ़ाइल में डालें (इसे नाम दें keyboard.php) और इसका उपयोग करके चलाएं:

$ php -d error_reporting=0 keyboard.php 55

दो और बाइट्स को उनके पहले उपयोग में $nऔर $sउनके प्रारंभिक उपयोग को निचोड़कर PHP7 पर बचाया जा सकता है :

echo'_'.($s=str_repeat)($a=$s('_',28),$m=($n-$r=($n=$argv[1])%7)/7).substr($a,0,$k=4*$r-($r&&$r!=3))."\n",$g='|'.$s($b='  | | | |  |  | | | | | |  |',$m).substr($b,0,$k)."\n",$g,$g,$g,$h='|'.$s('   |',$n)."\n",$h,'|'.$s('___|',$n)."\n";

Ungolfed कोड, टेस्ट स्वीट और अन्य उपहार पाया जा सकता है GitHub पर


1

पायथन 3 2, 191 185 180 182 171 145 144 133 132 बाइट्स

def k(n):print"\n|".join(["_"*(4*n+(9>>n%7&1))]+[''.join("   ||"[1998>>j%12&1::2]for j in range(n*12/7))]*4+["   |"*n]*2+["___|"*n])

यह कुछ गोल्फ का उपयोग कर सकता है, लेकिन मैंने कोड के साथ इतना पहले से ही फिड किया है कि मैं यह नहीं देख सकता कि गोल्फ वाले स्थान कहां हैं। किसी भी गोल्फ सुझाव का स्वागत है।

संपादित करें: कुंजियों की ऊँचाई पर युक्ति को मिलाएं। इस बग को ठीक कर दिया गया है।

संपादित करें: उधार नील के 12 प्रमुख विचार उसके जावास्क्रिप्ट जवाब से, कुछ कोष्ठक हटा दिया, और 11 बाइट्स को बचाने के लिए अजगर 2 करने लगे।

संपादित करें: फ़ंक्शन को एक forलूप में लाने के लिए बहुत सारे परिवर्तन ।

संपादित करें: अब एक समारोह के बजाय एक कार्यक्रम।

संपादित करें: अब print"\n|".join()11 बाइट को बचाने के लिए नील द्वारा सुझाए गए अनुसार उपयोग कर रहा है । एक बाइट को बचाने के लिए प्रोग्राम को वापस फ़ंक्शन में बदल दिया।


मुझे लगता है कि आप मेरी "\n|".joinचाल का उपयोग करके एक और 10 बाइट्स बचा सकते हैं ।
नील

आह, मैं printऔर के बीच की जगह हटाना भूल गया हूँ "\n|"!
नील

0

सी # 1683 बाइट्स

इसलिए .... इसके बाद नील के उत्तर को देखने के बाद यह बहुत शर्मनाक है, लेकिन मैं इसे वैसे भी पोस्ट करूंगा क्योंकि मुझे इसमें कुछ समय लगा (आशीर्वाद)। मैंने अपना बनाने के लिए C # का उपयोग किया। "Fncs" वर्ग के अंदर मैंने कुंजी के विशिष्ट क्रम की एक सरणी बनाई। फिर, मैंने एक फ़ंक्शन बनाया जो उपयोगकर्ता को किसी दिए गए पूर्णांक के आधार पर इस सरणी के लिए एक उपयुक्त सूचकांक प्राप्त करने की अनुमति दे सकता है। व्यक्तिगत पंक्तियों को संपादित करने के लिए, मैंने एक "पियानोकॉइबोर्ड" वर्ग बनाया, जिसमें कई पंक्तियों को अलग-अलग पंक्तियों का प्रतिनिधित्व करते हुए एक शब्दकोष रखा गया है। अंत में, मैंने "DrawKey" फ़ंक्शन बनाया, जो अलग-अलग लाइनों के लिए उपयुक्त पाठ और "GetKeys" फ़ंक्शन को जोड़ता है जो समग्र स्ट्रिंग मान लौटाता है।

namespace ASCIIPiano{public enum WhiteKeyType{Left,Middle,Right}public static class Fncs{public static WhiteKeyType[] Order{get{return new WhiteKeyType[]{WhiteKeyType.Left,WhiteKeyType.Middle,WhiteKeyType.Right,WhiteKeyType.Left,WhiteKeyType.Middle,WhiteKeyType.Middle,WhiteKeyType.Right};}}public static PianoKeyboard DrawKey(this PianoKeyboard keyboard, WhiteKeyType type){keyboard.Append(1,"_____");if (type == WhiteKeyType.Left){keyboard.Append( 2,"|  | ");keyboard.Append( 3,"|  | ");keyboard.Append( 4,"|  | ");keyboard.Append( 5, "|  | ");}else if (type == WhiteKeyType.Middle){keyboard.Append(2, " | | ");keyboard.Append(3," | | ");keyboard.Append( 4," | | ");keyboard.Append(5," | | ");}else{keyboard.Append( 2," |  |");keyboard.Append(3, " |  |");keyboard.Append(4," |  |");keyboard.Append(5, " |  |");}keyboard.Append(6,"|   |");keyboard.Append(7,"|   |");keyboard.Append(8,"|___|");return keyboard;}public static int GetWhiteKeyIndex(this int number){return number % 7;}public static string GetKeys(this int quantityofwhitekeys){PianoKeyboard keyboard = new PianoKeyboard();for (int i = 0; i < quantityofwhitekeys; i++){WhiteKeyType key=Fncs.Order[i.GetWhiteKeyIndex()];keyboard.DrawKey(key);}return keyboard.TOTALSTRING;}}public class PianoKeyboard{public PianoKeyboard(){}private Dictionary<int, string> lines = new Dictionary<int, string>();public void Append(int index,string value){if (index > 8 || index < 1){throw new Exception("URGH!");}else{if (lines.Keys.Contains(index)){lines[index] += value;}else{lines.Add(index, value);}}}public string TOTALSTRING{get{string returner = "";foreach (int key in lines.Keys){returner += lines[key] + "\n";}return returner;}}}}

1
नमस्ते, PPCG में आपका स्वागत है! जैसा कि आपने देखा होगा, कोड-गोल्फ चुनौतियां सबसे कम कोड को लिखने के बारे में हैं। सी #, जावा और मूल रूप से किसी भी ओओ भाषा जैसी भाषाएं अक्सर सबसे खराब विकल्प होती हैं। हालाँकि, यह शॉर्ट कोड लिखने के लिए एक शानदार अभ्यास हो सकता है इसलिए मैं आपको ऐसा करने से हतोत्साहित करने की कोशिश नहीं कर रहा हूँ :) जैसा कि आपके उत्तर के लिए, इस समस्या को हल करने का एक अच्छा तरीका है यदि आप कोड की लंबाई नहीं रखेंगे मन! मज़े करो, और सौभाग्य से छोटे सी # कोड लिखने की कोशिश कर रहा है :)
बैसब्रांड कंबरवॉबव्वाब

@BassdropCumberwubwubwub धन्यवाद, मैं वास्तव में इस साइट के लिए नया हूँ (बिल्कुल)। किंडा प्रोग्रामिंग में भी नया है, लेकिन मैं अपना सर्वश्रेष्ठ ^ _ ^ करूंगा
रोबी कॉइन

सभी <200 बाइट उत्तर के बीच एक 4KB जवाब देखने के लिए मजेदार है। मैं व्यक्तिगत रूप से जावा कोड को इन कोडगॉल्फ चुनौतियों के लिए जितना संभव हो उतना कम लिखना पसंद करता हूं, क्योंकि मैंने कभी भी किसी भी कोडगॉल्फ भाषा का उपयोग नहीं किया है। बेशक जावा और सी # कभी भी अन्य उत्तरों के साथ प्रतिस्पर्धा नहीं कर सकते, लेकिन कोशिश करना और कोड को यथासंभव छोटा करना मजेदार है। यहां एक पोस्ट है जो आपको दिलचस्प लग सकती है: सी # में कोड-गोल्फिंग के लिए टिप्स । पुनश्च: मैंने बाइट्स की सही मात्रा देखने के लिए आपके कोड को एक फ़ाइल में कॉपी किया है, जो है: 4,052 । ;) वैसे भी, PPCG में आपका स्वागत है!
केविन क्रूज़सेन

2
पीपीसीजी में आपका स्वागत है, लेकिन इस जवाब को पूरी तरह से गढ़ने की जरूरत है। मैं व्हाट्सएप और टिप्पणियां देखता हूं जिन्हें हटाया जा सकता है।
R

1
1: अपने चर का नाम बदलें, इसलिए वे 1 वर्ण लंबे 2 हैं: हमेशा एक उचित बाइट गिनती जोड़ें, इसके लिए tk बाइट सटीक होना चाहिए
Bálint
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.