代码高尔夫:钢琴

挑战

按字符计数的最短代码输出从给定长度的input音符开始的钢琴键盘的一部分。

input将由开始打印键盘的音符( [ACDFG]#|[AG] )和代表要打印的键的长度(包括第一个音符)的正数组成。

第一个键应该全部打印 – 如果它有一个左锐键,它将被切割,同样的,当开始键是锐利的时候,左键也将被切割。

夏普钥匙不计算在内,只有白色钥匙。

testing用例

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

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

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

代码计数包括input/​​输出(即完整程序)。

GolfScript – 80个字符

适合#SO没有滚动条的一行:)

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

GolfScript – 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+}%) /'_'* 

GolfScript – 82个字符

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

GolfScript – 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]}% 

GolfScript – 101个字符

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

GolfScript – 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+)< 

GolfScript – 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 ## ### | ### ### | ### ## ## ### | ### ### | ### ## ## ### | ### ### | ### ## ## ### | ### ### | ### ## ## ### | ### ### | ### ## | | | | | | | | | | | | | | | | | | | | | | | | |____|____|____|____|____|____|____| 

Perl,133(129)个字符

Perl, 167 160 156 147 142 133 D'oh! 147 144 137 134 133个字符

     $ _ = shift; grep {5> $ n?y / * /#/:y /#* / | /; $ n ++  -  8 || y // / _}
     @ Q =(substr((“*##”。(“*##*#|#”)x2)x9,
     4 * /#/ +(7&ORD)* 5,1 + /#/ + 5 *popup)。$ /)X9

这是一个129字符的解决scheme,借鉴了摩尔夫Ruby解决scheme的几个想法:

     ($ _,$ C)= @ ARGV; $ J =($ K = /#/)+ ORD;
    对于$ n(0..8){print $ /,substr +(join'',map {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) ; ' \ / | | | | /_\ /'; 

ruby – 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,"_"} 

(第二个换行符不是必需的,只是为了避免SO上的滚动条而添加,如果需要,可以用换行符replace分号。)

Ruby 1.9的版本不同,但长度相同(用"_"replacea[0]"_"replacea[0] ?_ ):

 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 

百合花,285 288 291 310 315 330 333 340 350个字符

为了与音乐主题保持一致,下面是用于排版音乐乐谱的语言解决scheme,LilyPond:

 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 uuuuuttt(x" ""_"t)))) 

用法: $ lilypond thisfile.ly <input.in >output.out 2>/dev/null

RetroGolf – Applesoft BASIC: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) 

可以在Javascript或模拟器中使用此Applesoft BASIC解释 器进行testing。

钢琴http://img685.imageshack.us/img685/3407/piano2.png

C#315

我坚持使用C#打高尔夫球,虽然这不是一个非常简单的语言…

 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,"|__|__");}} 

Python – 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] 

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 

是的…这个解决scheme确实计算了一个string的复共轭转置。

用法: $ octave -q thisfile.m <input.in >output.out

C – 197 203 207 216 224 232 240 人物

 #define S"# | ### ### ##" main(i,j,l,h,t){char*X[]={"____|"," |",SS,SS},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[]={"____|"," |",SS,SS},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)]));} 

PostScript:239 245 293 312 (普通); 219 224 225 231 (ASCII85)

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

二进制版本通过ASCII85编码扩展为只有ASCII可打印字符的219个字符的程序:

 /(|____)/(| )[/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

F#: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 gsi=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,因为我的条件返回零为false我只是乘以模块的结果。

使用<| 操作员删除一个空格字符。 使用运算符重载来保存另一个字符。

原版的

 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 

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 ## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ## ## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ## ## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ## ## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ## ## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ## | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____| 

最后一个例子是打印标准键盘,以及两端的虚拟黑键。

钢琴脚本 – 2个字符

这是一个单线:

 go 

用法:

 PianoScript piano.ps G# 11 

输出:

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

更多关于PianoScript语言的信息可以在这里find。

JavaScript – 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的犀牛(有一个小的修复和格式化的变化); 进一步由gnarf削减; 由KirarinSnow纠正的错误。 由cwallenpoolecachingk[1]

用法: $ cp input.in 0; rhino thisfile.js $ cp input.in 0; rhino thisfile.js

快速HTML演示版本: Golf Test – 添加readFile=prompt;print=function(a) {document.write("<pre>"+a);}

Python3 – 158

保存在inputraw_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]) 

F#:355个重要字符

全部在一条线上:

 let[|x;y|]=System.Console.ReadLine().Split([|' '|])in[for i in 1..9->let r (a:string) bj (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) bj (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" 

赛特

165个字符; gribblers Python解决scheme的翻译。

 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; 

D2(模板):331 370 400 + 17个字符

(基于Ruby解决scheme)。

压缩:

 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,sh,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 $(DT!(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,sh,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传递参数,因此必须在代码中完成input。 最多只支持99个密钥。

哈斯克尔: 212 211 208个字符

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

它仍然采用ascii兼容的字母(特别是序列“@ABCDEFG”),但不再需要Char.ord

ruby – 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]} 

ruby – 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]} 

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,~õ; 

应该有所改善。

input必须以名为PIANO的常数传送。

F# 414 386 372重要人物:

 //wins me 2 characters open System //String.replicate, didn't know this existed before reading Juliet let r=String.replicate //print sn times, each time on a newline let P ns=printf"%s"(rn (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 ON) P 3(L m ON) P 1(L b ON) 

哦,还有一个奖励,这个脚本实际上会正确处理“F#372” – 我不会因为在这里粘贴而烦扰你…

System.Console.ReadLine()是这样一个无赖…