Help us understand the problem. What is going on with this article?

Pythonでハノイの塔を再現

More than 1 year has passed since last update.

ハノイの塔とは

ハノイの塔(ハノイのとう、Tower of Hanoi)はパズルの一種。
500px-Tower_of_Hanoi.jpeg

ルール

以下のルールに従ってすべての円盤を右端の杭に移動させられれば完成。

  • 3本の杭と、中央に穴の開いた大きさの異なる複数の円盤から構成される。
  • 最初はすべての円盤が左端の杭に小さいものが上になるように順に積み重ねられている。
  • 円盤を一回に一枚ずつどれかの杭に移動させることができるが、小さな円盤の上に大きな円盤を乗せることはできない。

Tower_of_Hanoi_4.gif

数学的な見地

上記のルールに沿って、整理された状態からだと、n枚の円盤すべてを移動させるにかかる手数は、(2n − 1)の式で計算可能である。

参考

https://ja.wikipedia.org/wiki/ハノイの塔

思いついた経緯

もともと、最近ハマっていたパズルゲームでもあり、
所持していた書籍でも解説されていたが、殆どが、手数の計算についてであったので、
視覚的に、ハノイ盤の動きを再現できるか?、実際に計算結果と同じになるか?を目で確認したく、着手しました。

github

github.com/biz-nakashima001/python_hanoi

実行方法

pythonスクリプト hanoi.pyを起動後、
hanoiの数を聞かれるので、希望の段数を入力して下さい。

その後、予測手数の計算結果が出力されるので、
確認後、スリープ時間を入力して下さい。
1秒単位で設定でき、スリープ不要なら0秒を設定して下さい。

python3 hanoi.py 
hanoiの数<: 6
予想手数: 2^n -1 ->  63
スリープ(秒)<: 1

実行イメージ

スクリーンショット 2019-04-22 10.07.16.png

スクリーンショット 2019-04-22 13.10.55.png

やり残し

  • numpyをもっと駆使して、縦方向で表示したい。
  • 他のアルゴリズム、パズルも視覚的(webページ等)に表現してみたい。

参考書籍

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした