フィジカルの練習問題(難) (きしだのはてな)

一応できました。

public abstract class Creature {
	enum Position {START, BOAT, GOAL}
	Position _position = Position.START;
	public abstract boolean isPossibleToEat(Creature[] creatures);
	public abstract boolean isNavigator();
	public Position getPosition() {
		return _position;
	}
	public void setPosition(Potision position) {
		_position = position;
	}
}
  • こんな感じのクラスを継承して各役割(父とか)のクラスを作成
  • isPossibleToEatでは、自分と同じPositionにいる者たちを食べれるかチェックする処理を記述
  • isNavigatorでは、船頭になれる場合true、なれない場合falseを返すようにしておく


あとは以下の順番をぐるぐる回して各処理ごとに食べられるかチェックを行い誰かが食べられたら一からやり直し。という方法でできるまでやっただけという単純な方法です。

  1. ボートに乗る(だれが乗るか、および一人か二人かはランダム、ただし船頭役が必ず一人は居ること)
  2. 彼岸にたどり着く
  3. ボートに乗る(だれが乗るか、および一人か二人かはランダム、ただし船頭役が必ず一人は居ること)
  4. 此岸にたどり着く

力技で重複している動きを除けば最短で17回(往復で2回とカウント)っぽいような気が。
かなりダサいけど一応出来てよかった。最近プログラムを触る機会が無いのでいい頭の体操になりました。