指定された長さの入力音符から始まるピアノ鍵盤の一部を出力するための文字数による最短コード。
入力は音符で構成されます([ACDFG]#|[A-G]
)キーボードの印刷を開始し、最初の音符を含む印刷するキーの長さを表す正の数。
最初のキーは完全に印刷する必要があります-左の鋭いキーがある場合はカットされます。開始キーが鋭い場合と同じように、左のキーもカットされます。
シャープキーはカウントされず、白いキーのみがカウントされます。
Input
C 14
Output
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| ### ### | ### ### ### | ### ### | ### ### ### |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
Input
D# 1
Output
### |
### |
### |
### |
### |
| |
| |
| |
_|____|
Input
A 7
Output
## ### | ### ### | ### ##
## ### | ### ### | ### ##
## ### | ### ### | ### ##
## ### | ### ### | ### ##
## ### | ### ### | ### ##
| | | | | | | |
| | | | | | | |
| | | | | | | |
|____|____|____|____|____|____|____|
コードカウントには、入力/出力(つまり、完全なプログラム)が含まれます。
スクロールバーなしで#SOの1行に収まります:)
' ':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、 167160156147142133 D'oh! 147144137134 133文字
$ _ = shift; die grep {5> $ n?y/* /#/:y /#*/| /; $ n ++-8 || y// _ /} @ Q =(substr(( "* ##"。( "* ## *#|#")x2)x9、 4 * /#/ +(7&ord)* 5,1 + /#/ + 5 * pop)。$ /)x9
これは129文字のソリューションで、molfのRubyソリューションからいくつかのアイデアを借りています:
($ _、$ c)= @ ARGV; $ j =($ k = /#/)+ ord; for $ 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)
; ' \ /
| | | |
/_\ /';
146144140137134126 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,"_"}
(2番目の改行は不要であり、SOのスクロールバーを回避するためにのみ追加されます。セミコロンは、必要に応じて改行に置き換えることができます。)
Ruby 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
音楽のテーマに沿って、楽譜を植字するために設計された言語である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 u u u u u t t t(x" ""_"t))))
使用法: $ lilypond thisfile.ly <input.in >output.out 2>/dev/null
読みやすくするために複数行で示されていますが、1行である必要があります。
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)
これでテストできます Applesoft BASIC Interpreter Javascriptまたは エミュレーター 。
それほど簡潔な言語ではありませんが、私は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,"|__|__");}}
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]
フルオクターブでプログラムできるのに、なぜ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
#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)]));}
/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エンコーディングによって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
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であり、条件付きでfalseに対してゼロが返されたため、モジュールの結果を乗算しました。
<|を使用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
最大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
## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ##
## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ##
## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ##
## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ##
## ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ### ### | ### ### ### | ##
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|____|
最後の例では、標準のキーボードと、両端にある架空の黒いキーを印刷します。
それはワンライナーです:
go
使用法:
PianoScript piano.ps G# 11
出力:
### ### | ### ### | ### ### ### | ### ##
### ### | ### ### | ### ### ### | ### ##
### ### | ### ### | ### ### ### | ### ##
### ### | ### ### | ### ### ### | ### ##
### ### | ### ### | ### ### ### | ### ##
| | | | | | | | | | | |
| | | | | | | | | | | |
_|____|____|____|____|____|____|____|____|____|____|____|
PianoScript言語の詳細については、 ここ を参照してください。
ねえ、ゴルフはあなたが自分自身とだけ競争するゲームですよね? :)
_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によってRhinoに移植されました(マイナーな修正とフォーマットの変更があります)。さらにgnarfによって欠けました。 KirarinSnowによって修正されたエラー。キャッシュ_k[1]
_ by cwallenpoole
使用法:_$ cp input.in 0; rhino thisfile.js
_
クイックHTMLデモバージョン:ゴルフテスト -readFile=Prompt;print=function(a) {document.write("<pre>"+a);}
を追加
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])
F#:355の重要な文字
すべて1行で:
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"
(Rubyソリューションに基づく。)
圧縮:
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個のキーのみをサポートします。
165文字;グリブラーの翻訳Pythonソリューション。
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;
コマンドライン引数で実行
$ 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]}
Haskell: 212211 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
それでもASCII互換の文字(具体的には、シーケンス "@ABCDEFG")を想定していますが、Char.ordは必要ありません。
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という名前の定数で配信する必要があります。
//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)
ああ、そして1つのボーナスとして、このスクリプトは実際には「F#372」を正しく処理します。ただし、ここに貼り付けても煩わしいことはありません...
System.Console.ReadLine()はとても残念です...