パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

状態遷移のコーディング 宣教師と人食い人種

2021-03-31 | プログラムをマスター計画2021

人工知能の本を読んでいて宣教師とモンスターというのをみつけて

ランダムで解くものを作ってみました。

 

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秒も必要ないです。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。