次の標準的な15×15 クロスワードパズルグリッドについて考えてみましょう。
これをASCII #
ブロックで表すには、forブロックと(スペース)を白い正方形に使用します。
# #
# #
#
# #
### ## ##
## #
# #
# ##
## ## ###
# #
#
# #
# #
上記のASCIIアート形式のクロスワードグリッドを前提として、それが保持する単語数を決定します。(上記のグリッドには78ワードあります。先週の月曜日のニューヨークタイムズパズルです。)
単語は、垂直または水平に走る2つ以上の連続したスペースのグループです。単語は、ブロックまたはグリッドのエッジのいずれかで開始および終了し、常に上から下または左から右に実行されます。対角線または後方には決して実行されません。上のパズルの6行目のように、単語はパズルの幅全体に及ぶ場合があることに注意してください。単語を別の単語に関連付ける必要はありません。
細部
- 入力は常に文字
#
または(スペース)を含む長方形で、行は改行(
\n
)で区切られます。グリッドは、およびの代わりに、2つの異なる印刷可能なASCII文字で構成されると想定できます。#
- オプションの末尾の改行があると想定する場合があります。末尾の空白文字は、単語数に影響を与えるため、カウントされます。
- グリッドは常に対称であるとは限らず、すべてスペースまたはすべてブロックである場合があります。
- プログラムは理論的にはあらゆるサイズのグリッドで機能する必要がありますが、この課題では21×21を超えることはありません。
- グリッド自体を入力として、またはグリッドを含むファイルの名前として使用できます。
- stdinまたはコマンドライン引数から入力を取り、stdoutに出力します。
- 必要に応じて、プログラムの代わりに名前付き関数を使用して、グリッドを文字列引数として取得し、stdoutまたは関数returnを介して整数または文字列を出力できます。
テストケース
入力:
# # #
出力:(
7
各の前にスペースが4つあります#
。各番号記号を削除した場合の結果は同じですが、Markdownは空の行からスペースを削除します。)入力:
## # ##
出力:
0
(1文字の単語はカウントされません。)入力:
###### # # #### # ## # # ## # #### #
出力:
4
入力:(5月10日の日曜日のNYタイムズパズル)
# ## # # # # # # # ### ## # # ## # # # ## # ## # ## # # ### ## # ## ## # ## ### # # ## # ## # ## # # # ## # # ## ### # # # # # # # ## #
出力:
140