CJam、61 59 43 40 38 36バイト
{{_N/eeSf.*:sW%zsS-\{_' >{;(}&+}/}*}
これは、スタック上の文字列と整数を予期する匿名関数です。
19バイトのゴルフをしてくれた@ jimmy23013に感謝します。
CJamインタープリターでオンラインで試してください。
アイディア
市松模様の印刷可能な文字を東に、次に南に読むことで順序を割り当てることができます。
このように、元の回転したチェッカーボード
G B
. G B B
G G G B B B
G G . G B . B B
B B B B . . Y G . Y . Y Y P P P . . . B . . G G . G
B B B . . G . . . Y Y Y P P P P . . . . . G G G
B . B . . . . . Y . Y P P . . . . . G Y . G
B . . . . . . . . Y P . . . . . . . G G
. . . . . . . . . . . . . . . . . .
. P . . . . . O O . R . . . . . . . . Y
P P . . . . . . . O O R . R R . . . . Y Y .
P P P . . . R . . O O . R R R . . . O . . . Y Y
P P P P . . R . . O O O O R . R R . . . O . Y Y Y Y
R . R R O O O .
R R R O O O
R . O .
R O
なる
G.GGGGGG.GBBBB..YG.Y.YYBBB..G...YYYB.B.....Y.YB........Y..........P.....OO.PP.......OOPPP...R..OO.PPPP..R..OOOOR.RRRRRR.R
そして
BBBBBBB.BBPPP...B..GG.GPPPP.....GGGPP.....GY.GP.......GG.........R........YR.RR....YY.RRR...O...YYR.RR...O.YYYYOOO.OOOO.O
それぞれ。
最初のチェッカーボードで2番目のシーケンスを見つけるには、その文字を北東に、次に南東に読みます。
コードでこれを実現するには、チェッカーボードのn 番目の行にn-1個のスペースを追加することから始めます(左側に表示)。次に、行の順序を逆にします(右側に表示)。
G R
. G R .
G G G R R R
G G . G R . R R
B B B B . . Y G . Y . Y Y P P P P . . R . . O O O O
B B B . . G . . . Y Y Y P P P . . . R . . O O .
B . B . . . . . Y . Y P P . . . . . . . O O
B . . . . . . . . Y . P . . . . . O O .
. . . . . . . . . . . . . . . . . .
. P . . . . . O O . B . . . . . . . . Y
P P . . . . . . . O O B . B . . . . . Y . Y
P P P . . . R . . O O . B B B . . G . . . Y Y Y
P P P P . . R . . O O O O B B B B . . Y G . Y . Y Y
R . R R G G . G
R R R G G G
R . . G
R G
最後に、行と列を入れ替えます:
B
BB
BBB
B.BB
PPP...B..GG.G
PPPP.....GGG
PP.....GY.G
P.......GG
.........
R........Y
R.RR....YY.
RRR...O...YY
R.RR...O.YYYY
OOO.
OOO
O.
O
空白はあちこちにありますが、印刷可能な文字は、東から南に読むと正しい順序になっています。
あとは、元のチェッカーボードのn 番目の印刷可能文字を最後の変更のn 番目の印刷可能文字に置き換えるだけです。
コード
e# Stack: String B, Integer A
{ }* e# Repeat A times:
_N/ e# Push a copy of B and split it at linefeeds.
ee e# Enumerate the lines of B.
Sf.*:s e# Execute S.*s for each line:
e# [4 "abc"] -> " abc"
W% e# Reverse the order of line lines.
z e# Zip; transpose rows with columns.
s e# Flatten the arrays of strings.
S- e# Remove spaces.
e# This pushes a string L.
\{ }/ e# For each character C in the unmodified B:
_' > e# Check if C is bigger than ' '.
{ }& e# If it is:
;( e# Discard C and shift out a char from L.
+ e# Append a char (C or from L) to L.
e# L is B rotated by 60 degrees. Set L := B.
_,,Sf*\.+W%ze_
。