情報領域演習第一:P演習

電気通信大学情報理工学域I類 (情報系)
2018年度後学期


[一覧に戻る]


課題E5

問題

「蛙跳びパズル」と呼ばれるパズルがある.これは,2n+1 個のマス目を左右にまっすぐつなげた盤面において,左側のnマスそれぞれに蛙を右向きに置き,右側のnマスそれぞれに蛙を左向きに置いた状況から開始する.

下の図は n = 3 の場合の例である.

目標は,この開始状態から,次のような終了状態に蛙を動かすことである.

右向きの蛙は右に,左向きの蛙は左にしか動かせない.また,一度に1匹の蛙しか動かすことができない.動かすための操作は次の2つのいずれかである.

↓ (1) ↓

↓ (2) ↓

「蛙跳びパズル」の操作を模倣するプログラムを以下のように作成せよ.

まず,盤面は要素数 2n+1 の配列で表現する.空白のマスは0,右向きの蛙は1,左向きの蛙は2で表す. 盤面を表す配列は広域変数 \$board とする.

そして,次のメソッドを用いて \$board の内容を変更する.

入力仕様

出力仕様

irb> initialize_board 2
=> [1, 1, 0, 2, 2]
irb> move 1
=> [1, 0, 1, 2, 2]
irb> move 3
=> [1, 2, 1, 0, 2]
irb> move 4
=> [1, 2, 1, 2, 0]
irb> move 2
=> [1, 2, 0, 2, 1]
irb> move 0
=> [0, 2, 1, 2, 1]
irb> move 1
=> [2, 0, 1, 2, 1]
irb> move 3
=> [2, 2, 1, 0, 1]
irb> move 2
=> [2, 2, 0, 1, 1]
irb> move 4
=> [2, 2, 0, 1, 1]
irb> initialize_board 3
=> [1, 1, 1, 0, 2, 2, 2]

提出法

CED (CentOS) にて,プログラムを作成したディレクトリで以下を実行せよ.
% ~oa000833/enshu1p/checker_e5.rb ファイル名
「Submission successfully completed.」と表示されれば,提出が完了したことになる.


[一覧に戻る]


[Teaching Top] [Top]
okamotoy@uec.ac.jp