人工知能の本を読んでいて宣教師とモンスターというのをみつけて
ランダムで解くものを作ってみました。
https://colab.research.google.com/drive/1gX3jmv-fhXPnhvPL_OE0WdPGcAQ9e6EV?usp=sharing
最初はデータ設計から
陸を2つ用意して片一方にモンスターと宣教師を3人ずつ配置
船の位置は一方の陸
なんやかんや船を動かして
対岸に6人渡れれば終了します
完成形1です。
実は片岸にモンスターだけいるのはOKという条件を見逃していて
デバックに時間かかってしまいました #print(r)が名残です。
land[0] 岸0にいる人々
land[0] 岸1にいる人々
ship_pos 船の位置
no_pos 船のない位置
count 実行回数
修正系です。
ロジックはそのままですが、同じ処理を何度もしていた箇所を関数にまとめています。
高速化です。
最初の岸に2人いて船もあれば強制的に2人渡らせます。
高速化の失敗例です。
最初の岸に6人にならないようにしてみました。
すると場合の想定漏れが発生して無限ループに入ってしまうことがあります。(最初にモンスターが1人でわたった時)
実行結果です。できすぎのケースで平均500回ぐらいでしょうか?
実行時間はプログラムでは測定してませんが1秒も必要ないです。