Xmas Contest 2017 B 問題 Hello, Xmas Contest 2017 解説

Xmas Contest 2017 の B 問題「Hello, Xmas Contest 2017」の解説です。

問題概要

長方形グリッドの各マスに文字を書いて(書かないマスがあってもよい)、そのグリッドを 0 度・90 度・180 度・270 度のいずれの角度に回転した場合でも "XmasContest2017" という文字列が読み取れるようにせよ。ただし文字列の読み取りは以下のように行われる。

  • 上の行から順番に一行ずつ見ていく。
  • 見ている行に文字が書かれたマスが1個もなければ無視する。
  • 見ている行に文字が書かれたマスがあれば、そのうち最も左にあるものに注目する。そこに書かれた文字がアスタリスク '*' なら、この行を無視する。そうでなければ、その文字を読み取る。

グリッドのサイズも 100x100 を超えない範囲で自由に決めてよい。文字の書かれたマスが 32 個以下で満点 (100点)、100個 以上なら 0 点で、その間は 100 点から 0 点まで線形に点数が得られる。

解答

64 文字解答
17 17
*7102tsetnoCsamX*
X...............7
m...............1
a...............0
s...............2
C...............t
o...............s
n...............e
t...............t
e...............n
s...............o
t...............C
2...............s
0...............a
1...............m
7...............X
*XmasContest2017*

どう回転しても、各行の最初の文字に読ませたい文字を置いておけばそれを読んでくれることを使えば、四辺に読ませたい文字列を書くことで条件を満たす看板が作れます。

32 文字回答
16 16
*7..............
X.1.............
.m.0............
..a.2...........
...s.t..........
....C.s.........
.....o.e........
......n.t.......
.......t.n......
........e.o.....
.........s.C....
..........t.s...
...........2.a..
............0.m.
.............1.X
..............7*

文字列を斜めに並べることで、1 つの文字列を 2 つの方向から読み取らせることができるようになります。

そのほか

共通する文字を頑張って省く、斜めに一本だけ文字列を置いて残りを辺で埋めるなど、32文字と64文字の間の解もコンテスト中にいくつか見られました。