前書き
最小バイトを使用して、ひととりパズルのソルバーを作成します。
チャレンジ
あなたの仕事は、ヒトリ(ひとり、日本語で「一人で」の単語。ゲーム名の意味は「一人でいる」)の論理パズルを書くことです。ルールは次のとおりです。
- n行n列のセルのグリッドが表示され、各セルには1〜nの整数が含まれます。
- 目標は、次の2つのルールで示された制限に従って、指定されたグリッドから番号を削除することにより、グリッドの各行と各列に複数の番号が表示されないようにすることです。
- 2つの隣接する(水平または垂直)セルから2つの数値を削除することはできません。
- 残りの番号付きセルはすべて相互に接続する必要があります。残りの2つの番号付きセルは、隣接する残りの番号(水平または垂直)を接続するセグメントのみで構成される曲線で接続できることを意味します。(これが欠落していることを指摘してくれた@ user202729に感謝)
今までにルールが明確になっていることを願っています。ルールについて不明な点がある場合は、ウィキペディアのページを確認してください。
テストケース
番号が削除されるセルは0で表されます。
Input -> Output
4
2 2 2 4 0 2 0 4
1 4 2 3 -> 1 4 2 3
2 3 2 1 2 3 0 1
3 4 1 2 3 0 1 2
4
4 2 4 3 0 2 4 3
4 1 1 2 -> 4 1 0 2
3 1 2 1 3 0 2 1
4 3 1 3 0 3 1 0
5
1 5 3 1 2 1 5 3 0 2
5 4 1 3 4 5 0 1 3 4
3 4 3 1 5 -> 3 4 0 1 5
4 4 2 3 3 4 0 2 0 3
2 1 5 4 4 2 1 5 4 0
8
4 8 1 6 3 2 5 7 0 8 0 6 3 2 0 7
3 6 7 2 1 6 5 4 3 6 7 2 1 0 5 4
2 3 4 8 2 8 6 1 0 3 4 0 2 8 6 1
4 1 6 5 7 7 3 5 -> 4 1 0 5 7 0 3 0
7 2 3 1 8 5 1 2 7 0 3 0 8 5 1 2
3 5 6 7 3 1 8 4 0 5 6 7 0 1 8 0
6 4 2 3 5 4 7 8 6 0 2 3 5 4 7 8
8 7 1 4 2 3 5 6 8 7 1 4 0 3 0 6
9
8 6 5 6 8 1 2 2 9 8 0 5 6 0 1 2 0 9
5 6 2 4 1 7 9 8 3 5 6 2 4 1 7 9 8 3
5 8 2 5 9 9 8 2 6 0 8 0 5 0 9 0 2 0
9 5 6 6 4 3 8 4 1 9 5 6 0 4 3 8 0 1
1 1 6 3 9 9 5 6 2 -> 0 1 0 3 9 0 5 6 2
1 1 4 7 3 8 3 8 6 1 0 4 7 0 8 3 0 6
3 7 4 1 2 6 4 5 5 3 7 0 1 2 6 4 5 0
3 3 1 9 8 7 7 4 5 0 3 1 9 8 0 7 4 5
2 9 7 5 3 5 9 1 3 2 9 7 0 3 5 0 1 0
これらのテストケースは、それぞれConcept Is Puzzles、PuzzleBooks、Concept Is Puzzles、Wikipedia、およびYoutubeから取得されます。
スペック
例外処理を心配する必要はありません。
入力は常にユニークなソリューションを備えた有効なパズルであり、これを利用してコードを記述することができると想定できます。
これはcode-golfであり、最小バイト数が勝ちます。
4 <= n <= 9(元々16、Stewie Griffinの提案に従って9に変更され、IOのトラブルも軽減)
任意の標準フォームを介して入力および出力を行うことができ、フォーマットを自由に選択できます。
出力形式に関するいくつかの提案があります(ただし、これらに限定されません)
- 最終グリッドを出力する
- 削除されたすべての数値を含むグリッドを出力する
- 上記のいずれかの座標のリストを出力します
いつものように、デフォルトの抜け穴がここに適用されます。
関連(このチャレンジに触発された):マトリックス内のすべての要素が接続されているかどうかを確認する
私の最後の課題:セブンスのゲームの拡張
4 <= n <= 16
が、最大のテストケースはですn=9
。n=16
テストケースを投稿するか、と言うことをお勧めします4 <= n <= 9
。ちなみに素敵なチャレンジ:)