No.3805 Crossword Key Maker
問題文
$H \times W$ の大きさのクロスワードがあります。
フレロビくんはクロスワードの盤面を作ったので、答えを決めようとしています。
$H \times W$ の盤面が、 $H$ 個の文字列 $S_1,S_2,\cdots,S_H$ によって与えられます。
上から $i$ 番目、左から $j$ 番目のマスは、 $S_i$ の $j$ 文字目が # の場合は黒マス、.の場合は白マスです。
このクロスワードを成立させるようなカギを出力してください。
なお、クロスワードが成立しているとは、次の条件をどちらも満たすものとします。
- それぞれのカギについて、文字列の長さとそこから連続する白マスの数が等しい。
- それぞれのカギに文字列を当てはめたとき、横のカギと縦のカギが重なる部分は同じ文字である。
カギのある位置は、次の条件を満たすものとします。
- 横のカギ: そのマスが白マスかつ、そのマスの左が黒マスまたは盤面の外であり、そのマスの右が白マスである。
- 縦のカギ: そのマスが白マスかつ、そのマスの上が黒マスまたは盤面の外であり、そのマスの下が白マスである。
横のカギと縦のカギが重複する場合があることに注意してください。その場合はどちらも同じ添字を使います。
また、カギの添字は1から始まり、盤面の上側の方が小さく、同じ行では左側が小さいものとします。
カギの数は、カギの添字の最大値に等しいです。
この問題の制約上では、条件を満たすような出力が必ず存在します。
制約
- $2 \le H,W \le 100$
- $H,W$ は整数
- $S_i$ は
#または.で構成される長さ $W$ の文字列 - $S$ に
.が少なくとも2つはある - 全ての
.には少なくとも上下左右のいずれかに他の.が隣接している
入力
$H\ W$ $S_1$ $S_2$ $\vdots$ $S_H$
出力
カギの数を $K$ とします。 添字 $i$ のカギについて、横のカギの答えを $R_i$ 、縦のカギの答えを $C_i$ として、次のように出力してください。
$K$ $R_1\ C_1$ $R_2\ C_2$ $\vdots$ $R_K\ C_K$
ただし、該当する横のカギまたは縦のカギが存在しない場合には、代わりに - を出力してください。
条件を満たすものであれば、どれを出力しても正解と判定されます。
サンプル
サンプル1
入力
3 5 ##### #...# #####
出力
1 out -
このクロスワードは、上から2番目、左から2番目のマスにある横のカギのみあります。
その横のカギは、3文字であれば何でも良いので、例えば hit や win などでも正解と判定されます。
サンプル2
入力
4 4 .... .#.# ##.# ....
出力
3 goat go - algo good -
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。
ふらわぁ