ビルパズルとはどんなパズルですか?
ビルパズルは、N×Nの盤面の各マスに高さ1〜Nのビルを建て、同じ行・同じ列に同じ高さを入れず、端に書かれた数字の分だけその方向からビルが見えるようにするパズルです。海外では Skyscrapers(スカイスクレーパー)やタワーパズルと呼ばれ、ナンプレと同じラテン方陣の仲間です。
大切なのは「高いビルは後ろの低いビルを隠す」というひとつの事実だけです。端に立つ人が自分の列を見ると、手前のどのビルよりも高いビルが現れるたびに1つ多く見えます。高さが2、4、1、3の順なら、見えるのは2と4だけで、1と3は4に隠れるので、その人の数字は2です。このゲームでは数字を入れると区画にビルが実際に建ち上がるので、どのビルがどのビルを隠すかを目で確かめられます。
ルールは正確には何ですか?
ルールは3つです。同じ行に同じ高さを入れない、同じ列に同じ高さを入れない、端の数字とその方向から見えるビルの数を一致させる。3つすべてを満たす配置は盤面ごとに1つだけです。
| ルール | 意味 |
|---|---|
| 行 | 横1行に高さ1〜Nを1回ずつ。5×5なら1階から5階までのビルが1棟ずつ |
| 列 | 縦1列にも1〜Nを1回ずつ |
| 数字 | 端の人の横にある数字は、その人が自分の行や列を見たときに見えるビルの数。手前のビルより高いときだけ見えます |
| 初期のビル | 灰色のビルは最初から建っていて取り壊せません。大きな盤面でだけ数棟出てきます |
| 完成 | すべての区画にビルが建ち、ルールに合わない行や数字がなければ完成。日が沈み、窓に明かりがともります |
端の数字はどう読みますか?
いちばん役に立つのは1とNです。1が書いてあれば、その人のすぐ前のマスが最も高いNです。Nが書いてあれば、その列は手前から1、2、3、…Nの順に高くなります。ほかの数字も、最初のマスに入る高さを大きく絞ります。
| 数字 | 分かること(N = 5の場合) |
|---|---|
| 1 | すぐ前のマスが5。後ろは全部隠れるので、どんな順でもかまいません |
| 5(= N) | 手前から1、2、3、4、5に確定 |
| 2 | 最初のマスは5ではない。最初が4なら5はどこでもよく、最初が3なら4は5より手前に建てられません |
| k | 最初のマスの高さはN - k + 1以下。5はその側からk番目のマスか、それより奥に建ちます |
| 両端の合計がN + 1 | 左がa、右がbでa + b = 6なら、5は左からa番目のマスに確定。たとえば2と4なら2番目のマスが5 |
| 両端の合計がN + 1より大きい | ありえない組み合わせなので、盤面には出てきません |
解き方のコツは?
- 1とNの数字から片づけましょう。1の前にはN、Nの前には1から順番に。一度に何マスも確定します。
- N階のビルの場所を先に決めましょう。いちばん高いビルはどちらから見ても見え、後ろを全部隠します。数字kがあればNはその側からk番目のマスより奥にしか建てられないので、各行でNが入りうるマスをメモしておくと早く解けます。
- 両端の数字を足してみましょう。合計がN + 1なら、Nの位置がすぐ決まります。
- 最初のマスの上限を書きましょう。数字kの側の最初のマスはN - k + 1を超えられません。5×5で数字3の側の最初のマスは3以下です。
- 行・列で足りない高さを数えましょう。4棟建っていれば、残りの区画は足りない高さ1つに確定します。ある高さがその行で入れるマスが1つしかなければ、ほかの候補があってもそのマスです。
- 行き詰まったらチェックボタン。ルールに合わない行が赤く塗られ、その数字も赤くなります。ヒントは今の状態から確定するビルを1棟代わりに建ててくれます。
大きさごとの難しさはどう違いますか?
4×4は数字の読み方を覚える練習用、5×5がいちばん一般的な標準サイズ、6×6・7×7はメモなしでは解きにくい上級者向けです。大きな盤面では、推理だけで解けるように最初から建っているビルが数棟与えられます。
| 大きさ | 数字 | 初期のビル | 目標タイム |
|---|---|---|---|
| かんたん 4×4 | 16個中8個前後 | 0〜2棟 | 1分前後 |
| ふつう 5×5 | 20個中9個前後 | 0〜2棟 | 3分前後 |
| むずかしい 6×6 | 24個中11個前後 | 3〜6棟 | 6分前後 |
| 達人 7×7 | 28個中13個前後 | 4〜8棟 | 10分以上 |
どの盤面も推理だけで最後まで解けるように作っています。当てずっぽうで入れて祈るような盤面はありません。結果画面の称号はかかった時間で決まり、ヒントの回数は別に表示されます。
盤面はどうやって作られますか?
まず1〜Nが各行・各列に1回ずつ入ったラテン方陣をランダムに混ぜて作り、四方から見えるビルの数を数えて4N個の数字を書き、それを1つずつ抜いてみます。伝播型の解答プログラム(行ごとにありうる並びをすべて調べて候補を絞る方式)だけでまだ解けるなら抜いたままにし、解けなければ戻します。大きな盤面では解答プログラムが止まらないように先に数棟建てておき、それも同じ方法で減らします。最後にバックトラック型の解答プログラムで答えが1つだけか確かめます。
そのため同じ大きさでも盤面ごとに数字の数と初期のビルの数が少しずつ違います。結果をシェアして作ったリンクを開くと同じ番号の盤面がそのまま出るので、友だちとタイムを競えます。
今日の問題とは何ですか?
今日の問題は毎日変わる5×5の盤面で、同じ日なら誰でも同じ盤面になります。韓国時間の午前0時に切り替わり、完成させると出席の記録に残ります。
記録は大きさごとにベストタイムが別々に保存されます。途中でやめてもつづきからボタンでその場所から再開できます。
操作方法
- スマホ・マウス: 区画やビルをタップするとオレンジの枠で選ばれ、下(横画面では右)の高さボタンを押すとビルが建ち上がります。同じ高さをもう一度押すと取り壊されます。メモをオンにすると数字が区画に候補として小さく書かれます。
- キーボード: 数字1〜Nで建てる、Backspace・Delete・0で取り壊す、矢印キーで区画を移動、Nでメモの切り替え、Hヒント、Z戻す、Cチェック。
- ボタン: 戻すは最後の入力から順にさかのぼります。ヒントの使用回数は結果に一緒に表示されます。
記録と途中の盤面は今使っているブラウザーにだけ保存され、サーバーには送りません。ブラウザーのデータを消すと記録も消えます。