कोड गोल्फ: पियानो


88

चुनौती

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

इनपुट एक नोट से बना होगा ( [ACDFG]#|[A-G]) कीबोर्ड से छपाई शुरू करने के लिए और एक सकारात्मक संख्या जिसमें पहले नोट सहित प्रिंट करने के लिए चाबियों की लंबाई का प्रतिनिधित्व होता है।

पहली कुंजी को पूरी तरह से प्रिंट किया जाना चाहिए - अगर इसमें एक तेज धारदार कुंजी है, तो इसे काट दिया जाएगा, उसी तरह जब शुरुआत की कुंजी तेज होगी, तो बाईं कुंजी भी कट जाएगी।

एक शार्प की की गिनती नहीं की जाती है, केवल सफेद की।

परीक्षण के मामलों

Input
    C 14
Output
    |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
    |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
    |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
    |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
    |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
    |____|____|____|____|____|____|____|____|____|____|____|____|____|____|

Input
    D# 1
Output
    ###   |
    ###   |
    ###   |
    ###   |
    ###   |
     |    |
     |    |
     |    |
    _|____|

Input
    A 7
Output
    ##  ###   |   ###  ###   |   ###  ##
    ##  ###   |   ###  ###   |   ###  ##
    ##  ###   |   ###  ###   |   ###  ##
    ##  ###   |   ###  ###   |   ###  ##
    ##  ###   |   ###  ###   |   ###  ##
    |    |    |    |    |    |    |    |
    |    |    |    |    |    |    |    |
    |    |    |    |    |    |    |    |
    |____|____|____|____|____|____|____|

कोड गणना में इनपुट / आउटपुट (यानी पूरा कार्यक्रम) शामिल है।


5
[A-G]#*? क्या इसका यह मतलब है कि हमें संभालने की जरूरत है, B#####जैसा कि E,?
आनन।

5
कुंजी की गिनती के लिए, "कुंजी" को परिभाषित करें। उदाहरण "C 14" मुद्रण 24 कुंजी क्यों है?
गुफ़ा

53
ठीक है, अब जब हमें C और C # समाधान मिला है, तो हमें B, D और F # की आवश्यकता है।
LiraNuna

7
अगला कोड गोल्फ: इन पियानो के लिए MIDI इंटरफ़ेस लागू करें।
मेहरदाद अफश्री

10
प्रिय घनिष्ठों, मैं 3 दिनों के बाद इस चुनौती को बंद करने के लिए आपको सलाम करता हूं। हमने इसे 5 मिनट में फिर से खोल दिया। अकेले ही आपको कुछ बताना चाहिए - समुदाय इस तरह के प्रश्नों को पसंद करता है और स्वीकार करता है कि आप इसे पसंद करते हैं या नहीं। यदि आप, हालांकि, कृपया अनदेखा टैग की सूची में कोड-गोल्फ न जोड़ें।
लीरनूना

जवाबों:


27

गोल्फस्क्रिप्ट - 80 वर्ण

स्क्रॉल बार के बिना #SO की एक पंक्ति में फिट बैठता है :)

' ':s/~~5*\(7&5*\,.4*@+):k;+):c;9,{5<'#'9**' | '4*+3/4<.1>+c*s.+*k>c<n+}%)s/'_'*

गोल्फस्क्रिप्ट - 81 वर्ण

' ': /((7&\,.4*@5*+:k;\~~5*+):c;9,{5<'#'9**' | '4*+3/4<.1>+c*  +*k)>c<n+}%) /'_'*

अच्छी तरह से स्वरूपित संस्करण (27 x 3)

' ': /((7&\,.4*@5*+:k;\~~5*
+):c;9,{5<'#'9**' | '4*+3/4
<.1>+9*  +*k)>c<n+}%) /'_'*

गोल्फस्क्रिप्ट - 82 वर्ण

' '/((7&\,.4*@5*+:k;\~~5*+):c;9,{5<3*'###  '*' |   '4*+20<.5>+c*k)>c<n+}%)' '/'_'*

गोल्फस्क्रिप्ट - 85 वर्ण

' '/((7&\,.4*@5*+:k;\~~5*+):c;9,{.5<3*'###  '*' _'1/@8=='|'1$3*++4*+20<.5>+c*k)>c<n}%

अच्छी तरह से स्वरूपित संस्करण (17 x 5)

' '/((7&\,.4*@5*+
:k;\~~5*+):c;9,{.
5<3*'###  '*' _'1
/@8=='|'1$3*++4*+
20<.5>+c*k)>c<n}%

GolfScript - 94 वर्ण

' ': /~~5*:c;(7&5*:^;,:&;['###  '3*' |   '+.5>+c*1>{^4&*+>&c+)<n}:f~]5*'   _'1/{'|'\4*+7*c*f}%

GolfScript - 98 वर्ण

' ': /~~5*:c;(7&5*:^;,:&;['###  '3*' |   '+.5>+c*^4&*+:^)>&c+):&<n]5*[   '_']{['|'\4*+7*c*^>&<n]}%

गोल्फस्क्रिप्ट - 101 वर्ण

' ': /~~5*:c;(7&5*:^;,:&;['###  '3*' |   '+.5>+c*^4&*+)>&c+)<n]5*[   '_']{['|'\4*+7*c*^4&*+>&c+)<n]}%

गोल्फस्क्रिप्ट - 109 वर्ण

' ': /~~5*:c;(7&5*:^;,:&;['##''  ###'.'   | '++.'  #'+++c*^4&*+>&c+)<n]5*[   '_']{['|'\4*+7*c*^4&*+>&c+)<n]}%

GolfScript - 120 वर्ण

' '/~~5*:c;(7&5*:^;,:&;['##''  ###'.'   | '++.'  #'+++c*^4&*+>&c+)<n]5*['|    '7*c*^4&*+>&c+)<n]3*'|____'7*c*^4&*+>&c+)<

गोल्फस्क्रिप्ट - 127 वर्ण

' '/~~5*:c;(7&5*:^;,:&;['##  ###  ###   |   ###  ###   |   #'c*^4&*+>&c+)<n]5*['|    '7*c*^4&*+>&c+)<n]3*'|____'7*c*^4&*+>&c+)<

$ echo -n C 14 | ruby golfscript.rb piano.gs 
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
$ echo -n D# 1| ruby golfscript.rb piano.gs 
###   |
###   |
###   |
###   |
###   |
 |    |
 |    |
 |    |
_|____|
$ echo -n A 7| ruby golfscript.rb piano.gs 
##  ###   |   ###  ###   |   ###  ##
##  ###   |   ###  ###   |   ###  ##
##  ###   |   ###  ###   |   ###  ##
##  ###   |   ###  ###   |   ###  ##
##  ###   |   ###  ###   |   ###  ##
|    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |
|____|____|____|____|____|____|____|

मैं एक और चुनौती के लिए अपनी पहली गोल्फस्क्रिप्ट प्रविष्टि प्रस्तुत करने वाला था ( stackoverflow.com/questions/2104556/… ), लेकिन यह बंद हो गया :-(
भीड़

2
काश, वे स्कूल में गोल्फ सिखाते। मैं अपना पैसा वापस चाहता हूं।
स्टीव टोज़ा

6
अच्छा लगा। मैं बाद में PianoScript में अपना समाधान पोस्ट करूंगा। यह केवल 6 अक्षर है। :-)
मॉल्फ

112

पर्ल, 133 (129) वर्ण

पर्ल, 167 160 156 147 142 142 डी'ओह ! 147 144 137 134 133 चर

    $ _ = शिफ्ट; डाई ग्रीप {5> $ n? y / * / # /: y / # * / /; $ n ++ - 8 || y / / _ /}
    @ क्यू = (पदार्थ (("* * # #"। ("* # # * # | #" #) x2) x9
    4 * / # / + (7 & ord) * 5,1 + / # / + 5 * पॉप)। $ /) X9

यहाँ एक 129 चार समाधान है, जो भेड़िये के रूबी समाधान से कई विचारों को उधार लेता है:

    ($ _, $ ग) = @ ARGV; $ j = ($ k = / # /) + ord;
    $ n (0..8) {प्रिंट $ /, पदार्थ + ('में शामिल हों', नक्शा {8- $ n? 5> $ n && $ _% 7% 4? "###"
    : "|": "_ | ___"} $ j .. $ j + $ c); $ k, -3}

और Acme की मदद से :: AsciiArtinator :

                sub init_piano{$S=$";$H='#';
                (                            $
               T                              ,$P,$U)=qw(
              T                                          |
             _                                            |
            /                                              )
           ;                                                $
          d             =$T.$H.$S.$S;$t                     =
         $             d               .                   $H
        .              $               d                  . $
       S               .$P.$S.$S.$S.$H;$                t=  $
      d.$H.$t.$t;};$_=shift;-/-/;&init_piano();$Z=/#/;-/|   |
      |                                                 |   |
      |                    YAMAHA                       |  /
      ;die grep{4>$n++?y/T/#/:y/#T/ |/;$n-8||y/ /_/;}@q=(m{
     // // /// // /// // /// // /// // /// // /// // /// /   
    // // /// // /// // /// // /// // /// // /// // /// /
   }                                                   .
   substr(${t}x(9),4*${Z}+(7&ord)*5,1+$Z+5*pop).$/)x(8)
          ;   '                            \   /
           | |                              | |
           /_\                              /';

7
हाहाहा, कमाल। क्या वह स्टाइनवे, यामाहा, यंग चांग है?
स्टीव टोज़ा

2
मैं इसे उन लोगों को दिखाने के लिए बुकमार्क करने जा रहा हूं जिन्हें "बंदर" मजाक नहीं मिलता है।
मेहरदाद अफश्री

3
@Steve - लेट्स यह एक यामाहा मेक
भीड़

6
@ mobrule, क्या आपको grep से नफरत है? आप इसे क्यों मरना चाहते हैं? :(
लीरनुना

गोल्फस्क्रिप्ट * 1.3 होगा 105 :)
जॉन ला रोय

34

रूबी - 125 वर्ण

146 144 140 137 134 126 125 चार्ट

a,n=$*;h=a[1]?0:1;s=a[0]-h+1
9.times{|t|puts (s..s+n.to_i).map{|i|i%7%4<1||t>4?" |   ":"###  "
}.join[h..-4].tr t>7?" ":n,"_"}

(एसओ पर एक स्क्रॉलबार से बचने के लिए केवल दूसरी नईलाइन आवश्यक नहीं है और इसे जोड़ा गया है। अर्ध-कॉलन को वांछित सुर्खियों में प्रतिस्थापित किया जा सकता है।)

रूबी 1.9 संस्करण अलग है, लेकिन समान लंबाई के (जगह a[0]से a.ordऔर "_"से ?_):

a,n=$*;h=a[1]?0:1;s=a.ord-h+1
9.times{|t|puts (s..s+n.to_i).map{|i|i%7%4<1||t>4?" |   ":"###  "
}.join[h..-4].tr t>7?" ":n,?_}

के साथ बुलाना

$ ruby piano.rb C 14

अरे वीआईएम पहले एक पर 138 वर्ण गिना जाता है?!?
२३

a, n = get.split; ... एक ही काम करता है, -3 वर्ण
हर्निक

1
आप "$ *" द्वारा "get.split" को भी बदल सकते हैं और कमांड लाइन पर इनपुट दे सकते हैं, -8 वर्ण
हर्किचन

बदलें i%7%4<1||t>4?"_|___":"###__"करने के लिए i%7%4&&t<5?"###__":"_|___"और 2 वर्ण बचाने। मुझे लगता है कि प्यार %7%4मुहावरा
भीड़

1
तो हम सबसे छोटे समाधान के लिए नीचे हैं, एह? रूबी नियम! :-D
हुक्खन

29

लिलीपॉन्ड, 285 288 291 310 315 330 33 333 340 350 अक्षर

संगीत विषय को ध्यान में रखते हुए, यहाँ संगीत स्कोर टाइप करने के लिए डिज़ाइन की गई भाषा में एक समाधान है, लिलीपॉन्ड:

x=#ly:string-substitute
u=#(x"*""###  ""|   *** |   ** ")t=#(x"###"" | "u)q=#read-char
z=#(q)v=#(if(eq?(q)#\#)1 0)y=#(iota(+(*(read)5)1 v))#(format #t"~{~{~a~}
~}"(map(lambda(s)(map(lambda(i)(string-ref s(modulo(+(*(char->integer z)5)i(* v
4))35)))y))(list u u u u u t t t(x" ""_"t))))

उपयोग: $ lilypond thisfile.ly <input.in >output.out 2>/dev/null


4
यह संभवतः पहली और एकमात्र बार है जब मैंने लिलीपॉन्ड को कोड गोल्फ में उपयोग किया है।
8


26

रेट्रोगोल्फ - एप्लेसॉफ्ट बेसिक: 236 239 245 249 257 245 267 285

पठनीयता के लिए कई लाइनों में दिखाया गया है, लेकिन एक ही लाइन होनी चाहिए:

1K$="##   |   ###  #":K$="##  #"+K$+K$:
 FORI=1TO21:F$=F$+"|____":L$=L$+"|    ":NEXT:
 INPUTN$:S=MID$(N$,2,1)="#":O=(ASC(N$)-65)*5+1+S*4:L=VAL(RIGHT$(N$,2))*5+1+S:
 FORI=1TO5:?MID$(K$+K$+K$,O,L):NEXT:FORI=1TO3:?MID$(L$,O,L):NEXT:?MID$(F$,O,L)

जावास्क्रिप्ट या इम्यूलेटर में इस एपल्सॉफ्ट बेसिक इंटरप्रेटर के साथ परीक्षण किया जा सकता है ।

पियानो http://img685.imageshack.us/img685/3407/piano2.png


क्या विशिष्टताओं के अनुसार, दोनों तर्कों को एक ही पंक्ति में पढ़ना संभव है?
KirarinSnow

18

सी # - 315

मैं सी # में गोल्फ के लिए कायम हूं, हालांकि यह बहुत ही कठिन भाषा नहीं है ...

using C=System.Console;class P{static void L(int o,int c,string s){while(c-->0)C.Write(s[(420>>o++%5*2&3)+(91>>(o+2)/5%7&1)*3]);C.WriteLine();}static void Main(string[]a){int i=0,s=a[0].Length-1,c=int.Parse(a[1])*5+1+s,o=(a[0][0]-65+s)*5-s;while(i++<5)L(o,c,"|  ## ");while(i++<8)L(o,c,"|  |  ");L(o,c,"|__|__");}}

23
अब एफ # समाधान के लिए माधुर्य को पूरा करने के लिए।
LiraNuna

13
हास्य के लिए +1, कोरी हास्य के लिए -1, और C # और F # के बाद से +1 समवर्ती हैं।
स्टीव तोज़ा

मुझे एक System.IndexOutOfRangeException मिली जब इसे चलाने की कोशिश की गई।
फिजचैक यित्जाचिकी

@ मैंन्डी: जब आप इसे चलाते हैं तो आपको कमांड लाइन के तर्क देने होते हैं। यदि आप इसे विजुअल स्टूडियो से चलाते हैं, तो प्रोजेक्ट के लिए गुण खोलें, डीबग टैब पर जाएं और स्टार्ट विकल्प के तहत आप कमांड लाइन आर्ग्युमेंट दर्ज कर सकते हैं। यदि आपने कोड को एक exe में संकलित किया है, तो इसे प्रोग्राम नाम के बाद तर्कों के साथ कंसोल विंडो से चलाएं।
गुफ़ा

1
-> ऑपरेटर का बहुत अच्छा उपयोग।
केविन

16

अजगर - 164

k,n=raw_input().split()
m=k[1:]>""
n=int(n)*5+1
o=(ord(k[0])-65)*5+4*m
for x in["##  ###   |   ### "]*5+[n*"|    "]*3+[n*"|____"]:print((x+x[::-1][:-1])*n)[o:o+n+m]

क्या आप बार-बार के भाग को हटाकर tऔर u7 से गुणा करके कुछ पात्रों को नहीं बचा सकते थे ?
मैथ्यू क्रुमले

@ मट्टू क्रुमले, मेरे समाधान से उधार लेने के लिए स्वतंत्र महसूस करें :)
जॉन ला रोय

@gnibbler, मैं वास्तव में एक अजगर प्रोग्रामर नहीं हूं (मैंने इसके साथ कुछ खेला है, लेकिन बड़े पैमाने पर नहीं) इसलिए मुझे संदेह है कि मैं इसके साथ बहुत कुछ कर पाऊंगा। मैं यह भी नहीं जानता था कि जब तक मैंने आपके मूल समाधान को नहीं देखा, तब तक अजगर इस तरह से कई गुना बढ़ सकता है।
मैथ्यू क्रुमले

@gnibbler - अच्छा समाधान, इसे चलाने के लिए प्यार करता हूँ, लेकिन एक SyntaxError हो रही है .... C 14 Traceback (सबसे हाल ही में कॉल अंतिम): फ़ाइल "पियानो", लाइन 1, में? k, n = input ()। विभाजन () फ़ाइल "<string>", पंक्ति 1 C 14 ^
AJ।

@AJ, लगता है कि त्रुटि Python3 समाधान से है। यकीन नहीं है कि तुम क्यों हो रही है कि
जॉन ला Rooy

15

ऑक्टेव, 153 154 155 158 159 162 172 180 186 185 188 197 199 200 206 207 209 212 214 215 219 240 244 268 वर्ण

जब आप पूर्ण ऑक्टेव के साथ प्रोग्राम कर सकते हैं तो सिर्फ C या C # या F # (या B या D) का उपयोग क्यों करें?

(स्पष्टता के लिए हर 60 वर्णों को लपेटा)

x=5*scanf("%2c%d");for k=-8:0disp((s={[t="|   ###  ###  ","#
##   ",t" "]"|    ","|____"}{(k>-4)+!k+1})(1+mod(5*(y=x(2)>1
60)+(-y:x(3))+x(1),rows(s'))))end

हां ... यह समाधान वास्तव में एक स्ट्रिंग के जटिल संयुग्मित संक्रमण की गणना करता है।

उपयोग: $ octave -q thisfile.m <input.in >output.out


13

सी - 197 203 207 216 224 232 240 पात्र

#define S"#   |   ###  ###  ##"
main(i,j,l,h,t){char*X[]={"____|","    |",S S,S S},s[i=11];for(scanf("%s%n%d",s,&h,&l);--i>1;puts(""))for(j=t=*s%7*5+h*4;j<t+l*5+h;putchar(X[i/3][j++%(i>5?35:5)]));}

यह समकक्ष 194 -चैकर संस्करण मानता है कि बफर ओवरफ्लो ठीक है।

#define S"#   |   ###  ###  ##"
i=11;main(j,l,h,t){char*X[]={"____|","    |",S S,S S},s;for(scanf("%s%n%d",&s,&h,&l);--i>1;puts(""))for(j=t=s%7*5+h*4;j<t+l*5+h;putchar(X[i/3][j++%(i>5?35:5)]));}

1
for(j=0; j<=l*5+h; j++)<- बेकार रिक्त स्थान, और तुम भी चरित्र गिनती में उन्हें शामिल किया है लगता है
निकोलस

12

पोस्टस्क्रिप्ट: 239 245 293 312 (नियमित); 219 224 225 231 (ASCII85)

/r{(%stdin)(r)file token pop}def[(]){mul add}/z r(:-)cvs dup length 1
sub/v exch/p r/s(|   ###  ###  ###   |   ###  ###   )([){0 1 v p 5]{s
exch z 0 get 5]v 4]s length mod 1 getinterval print}for/
=}>>begin[[[[[/s(|    )def[[[/s(|____)def[

बाइनरी संस्करण का विस्तार ASCII85 के माध्यम से एक 219-चरित्र प्रोग्राम में केवल ASCII प्रिंट करने योग्य वर्णों के साथ किया गया:

/(|____)/(|    )[/r/(|   ###  ###  ###   |   ###  ###   )<~Ou%G5-$+0=Bl5@JE[d/;P,jagI?HCK@<*JGP,4<rOuSV60p8LhG*5%O8oc=a.=3b)!HsVu23Md=!IHJ_A<K->@5*j;23Md=!HoSBP&-9^09Tk/@ZkI\P"_$^I?I,S+?b-:5*?@Z>?b<9Ou$<H>EUc~>cvx
exec[

उपयोग: $ gs -q -dNOPROMPT -dNODISPLAY -dBATCH thisfile.ps <input.in >output.out


10
इन प्रतियोगिताओं में कम पारंपरिक भाषाओं को देखना पसंद है।
भीड़

12

एफ #: 224 225, 226, 248, 252, 270, 276, 299, 306 वर्ण

let x,(/)=System.Console.ReadLine(),String.replicate
let t,p=(int x.[0]-60)%7*5,int x.[1]%2
let g s i=printf"%s"(i/((99/s).[t+4*p..t+int x.[2..]*5+5*p]+"\n"))
g"|   ###  ###   |   ###  ###  ###   "5 
g"|    "3
g"|____"1

मैंने अंतरिक्ष या पाउंड का पता लगाने के लिए 2 के मॉड्यूल का उपयोग किया। '' 32% 2 = 0 '' # 35% 2 = 1 है और जब से मेरी सशर्त वापस शून्य के लिए मैंने मॉड्यूल परिणाम गुणा किया है।

इस्तेमाल किया <| एक अंतरिक्ष चार से दाढ़ी बनाने के लिए ऑपरेटर। एक और चार को बचाने के लिए प्रयुक्त ऑपरेटर ओवरलोडिंग।

मूल

let piano_long (input:string) = 
    let sharp, flat = if input.[1] = '#' then 4, 1 else 0, 0

    let note = (int input.[0] - 60) % 7
    let num = int (input.Substring 2)

    let start = note * 5 + sharp
    let stop = num * 5 + 1 + flat

    let top    = "|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |"
    let middle = "|    |    |    |    |    |    |    |    |    |    |    |    |    |    |"
    let bottom = "|____|____|____|____|____|____|____|____|____|____|____|____|____|____|"


    let mutable piano = ""

    for i in 1..5 do 
        piano <- piano + top.Substring(start, stop) + "\n"

    for i in 1..3 do 
        piano <- piano + middle.Substring(start, stop) + "\n"

    piano <- piano + bottom.Substring(start, stop)

    printf "%s\n\n" piano

अगर F # में स्ट्रिंग मल्टीप्लेयर ऑपरेटर होता है तो मैं 46 कैरेक्टर शेव कर सकता था
grad

थोड़ा छोटा:let g s i=for i=1 to i do printfn"%s"(String.replicate 99 s).[t+4*p..t+int(x.[2..])*5+5*p]
9

बहुत अच्छे धन्यवाद! मुझे नहीं पता कि मुझे ऐसा क्यों नहीं मिला। मैंने इसे एक चर को सौंपा और दो बार इसका इस्तेमाल किया।
ग्रेडबोट

अब मैं .net फ़ंक्शन नामों के केवल 48 चार कर का भुगतान कर रहा हूं।
ग्रेडबोट

संस्करण 8 पर बधाई! मुझे आश्चर्य है कि आपने कितना छंटनी की।
चोसपंडियन

11

sed, 231 235 234 235 237 238 244 268 269 270 276 279 280 282 287 300 307 314 329 338 पात्रों

99 कुंजी तक काम करता है। मानक पियानो में 52 सफेद चाबियाँ हैं, इसलिए यह पर्याप्त होना चाहिए।

s/.*/CDEFGABC&=0123456789-/
s/(.).=(.*)\1.*/&\2\2\2\2\2\2\2\2\2\2/
s/ .?(.)=(.*)\1.*-/\2/
s/.*#/%&/
:
s/((.)(.).*\2)[#-9]/\1  \3/
t
s/[^ %CF]/###/g
s/C|F/ | /g
s/(%....)?.{25}(.*)./\2/p
p
p
p
p
s/## /|  /g
s/#[|#]/ |/g
p
p
p
y/ /_/

उदाहरण:

$ echo C 14 | sed -rf piano.sed
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
$ echo D# 1 | sed -rf piano.sed
###   |
###   |
###   |
###   |
###   |
 |    |
 |    |
 |    |
_|____|
$ echo A 7 | sed -rf piano.sed
##  ###   |   ###  ###   |   ###  ##
##  ###   |   ###  ###   |   ###  ##
##  ###   |   ###  ###   |   ###  ##
##  ###   |   ###  ###   |   ###  ##
##  ###   |   ###  ###   |   ###  ##
|    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |
|____|____|____|____|____|____|____|
$ echo A 52 | sed -rf piano.sed
##  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ##
##  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ##
##  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ##
##  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ##
##  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ###   |   ###  ###  ###   |   ##
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |    |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|

अंतिम उदाहरण मानक कीबोर्ड को प्रिंट करता है, साथ ही दोनों छोर पर काल्पनिक ब्लैक कीज़।


10

PianoScript - 2 वर्ण

यह वन-लाइनर है:

go

उपयोग:

PianoScript piano.ps G# 11

आउटपुट:

###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ##
###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ##
###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ##
###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ##
###  ###   |   ###  ###   |   ###  ###  ###   |   ###  ##
 |    |    |    |    |    |    |    |    |    |    |    |
 |    |    |    |    |    |    |    |    |    |    |    |
_|____|____|____|____|____|____|____|____|____|____|____|

पियानो स्क्रिप्ट पर अधिक जानकारी यहाँ से मिल सकती है


1
यह 0 वर्ण हो सकता है, है ना?
आप

मैं पियानोस्क्रिप्ट ++ में मानता हूं कि आप प्रोग्राम को एक कम चरित्र में लिख पाएंगे।
ग्रेडबोट

4
बहुत बुरा आप इस विचार के साथ आने वाले पहले व्यक्ति नहीं हैं।
लीराउना

4
-1 धोखा के लिए, और भाषा के लिए एक अच्छा नाम भी नहीं आ रहा है;)
gnnf

1
pianos के स्कोर हैं, स्क्रिप्ट नहीं
जिमी

10

जावास्क्रिप्ट - 195 चार्ट

हे, गोल्फ एक खेल है जहाँ आप केवल अपने आप के खिलाफ प्रतिस्पर्धा करते हैं? :)

k=readFile(0).split(' ')
q=!k[0][1]
r=k[1]
o=''
for(x=10;x--;){p=k[0].charCodeAt(0)-65+!q
s=''
for(j=+r+1;j--;){p=++p%7
s+=x>4&&!p|p%3?'###  ':x?' |   ':'_|___'}o+=s.substring(q,r*5+2)+'\n'}print(o)

Gnarf द्वारा समाधान; KirarinSnow द्वारा राइनो (एक मामूली फिक्स और स्वरूपण परिवर्तनों के साथ) में पोर्ट किया गया; आगे गरफ़ से छिल गया; KirarinSnow द्वारा सही की गई त्रुटि। k[1]cwallenpoole द्वारा कैश

उपयोग: $ cp input.in 0; rhino thisfile.js

त्वरित HTML डेमो संस्करण: गोल्फ टेस्ट - जोड़ता हैreadFile=prompt;print=function(a) {document.write("<pre>"+a);}


ठीक है, आप विनिर्देश के खिलाफ भी प्रतिस्पर्धा करते हैं ... और मुझे लगता है कि आप हार गए। ;) यह परीक्षण मामलों को भी पास नहीं करता है। ऐसा लगता है कि यह एक बंद शुरू होता है।
गुफ़ा

आपके पास केवल b का संदर्भ है। रीड रीडाइल (बी) को सिर्फ रीडफाइल में बदल दें ('सबस्ट्रिंग')
Pankadoodle

@wallacoloo - बाद में, नीचे का हिस्सा चाहिए:s=s[b](1-q,p=s.length-3)
gnnf

6

पायथन 3 - 158

inputबनाम पर सहेजें raw_input। पर खोने ()के लिएprint

k,n=input().split()
o=(ord(k[0])-65)*5
n=int(n)*5+1
for x in["##  ###   |   ### "]*5+[n*"|    "]*3+[n*"|____"]:print(((x+x[::-1][:-1])*n)[o+3*len(k[1:]):o+n])

5

एफ #: 355 महत्वपूर्ण वर्ण

सभी एक लाइन पर:

let[|x;y|]=System.Console.ReadLine().Split([|' '|])in[for i in 1..9->let r (a:string) b j (s:string)=s.Replace(a,if i>j then b else a)in((String.replicate(int y+1)"23012123012121").Substring(int(x.[0])-65,int y*2+x.Length).Replace("0","|   ")|>r"1""#"0|>r"2""##  "0|>r"3"" "0).TrimEnd()|>r"###"" | "5|>r"##""| "5|>r" ""_"8]|>String.concat"\n"|>printfn "%s"

विस्तारित:

let piano() =
    let[|x;y|]=System.Console.ReadLine().Split([|' '|])in
    [for i in 1..9->
        let r (a:string) b j (s:string) = s.Replace(a,if i>j then b else a) in
        ((String.replicate (int y+1) "23012123012121")
            .Substring(int(x.[0])-65,int y*2+x.Length).Replace("0","|   ")
            |> r "1" "#" 0
            |> r "2" "##  " 0
            |> r "3" " " 0)
            .TrimEnd()|> r "###" " | " 5|> r "##" "| " 5|> r " " "_" 8]
    |> String.concat "\n"
    |> printfn "%s"

@ ब्रायन, कृपया टीम को लागू करने getsया समकक्ष करने के लिए, हम 22 वर्णों को बचाएंगे!
बेंजोल

मुझे लगता है कि जब गोल्फ एनर्टेशन प्रकार एनोटेशन को हटाने का एक अच्छा तरीका है।
17

3

SETL

165 वर्ण; ग्रिबब्लर्स पायथन समाधान का अनुवाद।

get(l);[k,n]:=split(l);o:=(abs k(1)-65)*5;n:=1+5*val n;(for x in['##  ###   |   ### ']*5+[n*'|    ']*3+[n*'|____'])print(((x+reverse x(2..))*n)(o+4*#k-3..o+n));end;

3

डी 2 (टेम्प्लेट): 331 370 400 + 17 वर्ण

(रूबी समाधान पर आधारित है।)

दबा हुआ:

template J(alias T,int b,int e,r...){static if(e)enum J=T!(b,r)~J!(T,b+1,e-1,r);else enum J="";}template K(int i,int t){enum K=t>7?"_|___":t<5&&3&i%7?"###  ":" |   ";}template R(int t,int s,int l,int h){enum R=J!(K,s-h,l,t)[h..$-3]~"\n";}template M(alias k){enum M=J!(R,0,9,k[0]+1,k[$-2]>32?k[$-1]+10*k[$-2]-527:k[$-1]-47,k[0]&1);}

व्याख्या की:

/**
    Macros:
        D = <tt>$0</tt>
 */
 ;

/**
    $(D_PSYMBOL J) (short for "join") will evaluate $(D T!(i,r)) for
    $(D_PARAM i) in $(D [b..b+e]). Then, these compile-time strings will be
    concatenated.
 */
template J(alias T,int b,int e,r...){
    static if(e)
        enum J=T!(b,r)~J!(T,b+1,e-1,r);
    else
        enum J="";
}

/**
    $(D_PSYMBOL K) (short for "key") will generate 5 characters as a row of
    key $(D_PARAM i) at row $(D_PARAM t).
 */
template K(int i,int t){
    enum K=t>7?"_|___":t<5&&3&i%7?"###  ":" |   ";
}

/**
    $(D_PSYMBOL R) (short for "row") will generate the keyboard at row
    $(D_PARAM t), from key $(D_PARAM s) and sharpness $(D_PARAM h) with a
    length of $(D_PARAM l) keys.
 */
template R(int t,int s,int l,int h){
    enum R=J!(K,s-h,l,t)[h..$-3]~"\n";
}

/**
    $(D_PSYMBOL M) (short for "main") results in the whole keyboard as a string.

    Example:
    -----
    pragma(msg,M!("C 14"));
    pragma(msg,M!("D# 1"));
    pragma(msg,M!("A 7"));
    -----
 */
template M(alias k){
    enum M=J!(R,0,9,k[0]+1,k[$-2]>32?k[$-1]+10*k[$-2]-527:k[$-1]-47,k[0]&1);
}

चूंकि हम dmdइनपुट से मापदंडों को पारित नहीं कर सकते हैं इसलिए कोड में किया जाना चाहिए। केवल 99 कुंजी का समर्थन करता है।


2
क्या आप इनपुट को एक स्ट्रिंग बना सकते हैं? चुनौती का हिस्सा एक नोट को लाइन में खड़ा करना है, एक वैकल्पिक तेज, और एक अवधि। पार्सिंग अपने आप में कुछ भाषाओं में काफी पात्र ले सकता है ...
किरारिनसेन

2

हास्केल: 212 211 208 अक्षर

a="  |  "
b=" ### "
d=concat.cycle
e=d[b,b,a,b,b,a,b]
f=d[a]
t x s m n=map(take(5*read s+m).drop(5*length['@'..x]-n))[e,e,e,e,e,f,f,f,d["__|__"]]
u(x:'#':s)=t x s 2 4 
u(x:s)=t x s 1 8
main=interact$unlines.u

यह अभी भी एससीआई-संगत अक्षरों (विशेष रूप से, "@ABCDEFG") को मानता है, लेकिन अब Char.ord की आवश्यकता नहीं है


2

रूबी - 113 वर्ण

कमांड लाइन तर्कों के साथ चलता है

$ ruby piano.rb A 7

k,c=$*
9.times{|x|puts (((b=x<8?'  |  ':'__|__')+(a=x<5?' ### ':b)*3+b+a*2)*j=k[0]*5-2+4*s=k.size)[j,c.to_i*5+s]}

रूबी - 118 वर्ण

k,c=$*
9.times{|x|puts (((b=x<8?'  |  ':'__|__')+(a=x<5?' ### ':b)*3+b+a*2)*j=2+k[0]*5+4*s=k.size-1)[j..c.to_i*5+s+j]}

2

PHP - 208 वर्ण

<?$e=45*substr($a=PIANO,2+$d=!($a[1]^~ì))+9+$d*45;$j=9*$c=4*$d;for($b=ord($a[0])-65,--$c;$j<$e;$f[$i=$j++%9].=($c=($c+!$i)%5)%4<2&$i>3&$b%3!=2?Ü:($c?$i?ß: :))$j%45-36?:$b=++$b%7;for(;$a=$f[$i--];)echo~$a,~õ;

सुधार करना होगा।

इनपुट को PIANO नाम के निरंतर स्थान पर पहुंचाना होगा।


1

एफ # 414 386 372 महत्वपूर्ण पात्र:

//wins me 2 characters
open System

//String.replicate, didn't know this existed before reading Juliet
let r=String.replicate  

//print s n times, each time on a newline
let P n s=printf"%s"(r n (s+"\n"))  

//define top rows
let t="##  ###   |   ###  ###   |   ###  #" 

//middle and bottom rows can be defined using 'r'
let m,b=r 7"|    ",r 7"|____" 

//pick of chars from O to n+O from string, wrap round if we go beyond s.Length
let L(s:string)O n=String([|5*O..5*(n+O)|]|>Array.map(fun i->s.[i%35]))

//match input string into two halves
let[|k;n|]=Console.ReadLine().Split([|' '|])

//work out start pos and length (in chars, not keys)
let O,N=
 let K=int k.[0]-65                    //'A'=65, this is why t starts at A
 if k.[0]='#'then(K+3,int n+2)else(K,int n) 

//Print 5 top rows, 3 middle rows and the bottom row
P 5(L t O N)
P 3(L m O N)
P 1(L b O N)

ओह, और एक बोनस, यह स्क्रिप्ट वास्तव में "एफ # 372" को सही ढंग से संभाल लेगी - मैं इसे यहां पर चिपकाकर आपको परेशान नहीं करूंगा ...

System.Console.ReadLine () एक ऐसा बुमेर है ...

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