以下のようになっていれば成功です。offsetの値が表示されました。以上でピースを置く場所の算出ができました。(KATAMINOを解くプログラムを作成する)KATAMINOを解くプログラム★前回の記事yucatio.hatenablog.comsolve関数を実装していきます。この関数内では、スタックからフィールドとピースの組み合わせを1つ取り出し、すべてのピースがフィールドに置けるまで(もしくはすべての組み合わせを試して、解けないことが確定するまで)フィールドにピースを置くということを繰り返します。前回スタックに投入したデータを1つずつ取り出してみましょう。0)で配列にデータがあるあいだ、ブロックを実行します。solver.solverStack.pop()でスタックからデータを取り出します。以下のように表示されていれば成功です。スタックにpushしたのと逆順に表示されます。リファクタリング今後の実装のために、取り出したデータの各プロパティをローカル変数に代入して置くと便利です。分割代入を使用すると簡潔に書けます。},}以上でスタックから情報を取り出すことができました。(KATAMINOを解くプログラムを作成する)KATAMINOを解くプログラム★前回の記事yucatio.hatenablog.comスタックへデータを投入します。スタックを使用するアルゴリズムについては以下の記事を参照してください。yucatio.hatenablog.com実装フィールドと次に置くことができるピースをスタックへ投入します。スタックsolverStackを定義します。解く対象のピースtargetPieceの各スピンをスタックに投入します。},}ここまでで、スタックの内容は以下のようになっています。ここのままでも解けそうですが、1つ問題点があります。1番のピースの1番のスピンがフィールドに置けたとき、1番のピースはもうこれ以上置くことはできません。ピース番号が分からないため、1番のピース以外を次に置く候補としてスタックに入れることができません。そこでピース番号pieceIdとまだ置かれていないピースの配列unPlacedPieceをスタックに入れる情報に追加します。ピースをフィールドに置いた時に、置いたピースの番号をunPlacedPieceから削除することで同じピースを重複して置くことを防ぎます。デバッグのために、spinIdもスタックに入れます(STEP2でspinIdも使用します)。},}ところで、スタックから取り出した後に、1番番号が小さい(左上の)空白を埋めるようにピースを置いてみるのでした。毎回スタックから取り出すごとに計算するのも面倒なので、フィールドの状態ごとに計算してスタックに入れておくことにしましょう。},}以上でスタックへの初期データの投入が完了しました。(KATAMINOを解くプログラムを作成する)KATAMINOを解くプログラム★前回の記事yucatio.hatenablog.comKATAMINOのピースを置くフィールドを初期化します。(置くピースの数)です。詳しくは以下の記事を参照してください。yucatio.hatenablog.com実装フィールドの各値を-1で初期化します。いう関数を使用しています。以下のようになっていれば成功です。今回は引数で渡されたピースが3つなので、5×3の配列が作成されています。リファクタリング長さ5の配列を定義し、mapを使用することで以下のように書き換えることもできます。Array(5)とmapの間にfillを挟む理由は以下の記事を参照してください。yucatio.hatenablog.com以上でフィールドの初期化を行うことができました。「ピーターからの問題」1から9までを使って分数の穴埋め算。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。