🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1496閲覧

ラングトンのアリ python

Shimizu__

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/12/14 14:06

編集2020/12/14 14:07

前提・実現したいこと

Pythonでラングトンのアリのみたいなコードを書きたいです。
2匹の蟻がグリッドを這い回るプログラムのことですが、各蟻は一定の方法でグリッドを動きます。

  • グリッドの大きさはユーザーに入力されて作らせます。
  • 蟻は最初にランダムに生成された場所から、ランダムに指定された方向に1マス前方に移動します。次の地点に到着すると右に90°回転します。
  • そして、最初の地点の除き、蟻が歩いた場所は黒く(✴︎)なり、次にアリが黒くなった場所を通ると左に90°回転して進みます。(黒くなったところを通るとそのマスは元に戻る(白くなる))
  • ボード外に移動した蟻は、シミュレーションから削除されます。
  • そして、一匹目の蟻が黒くなったところを歩くと蟻2が生成し、移動を開始します。
  • 蟻が最初に配置された場所は白から始まります。
  • 更新されたグリッドを毎秒ユーザーに表示します。両方のアリが指定されたグリッドの外に出たら、プログラムを終了します。

以下の図が一匹のアリの行動パターンです。
イメージ説明

試したこと

色々試して、グリッドに最初の蟻をランダムに表示できましたがそのあとがコードがどうにも思いつけないのです...教えて頂けると幸いです。
※蟻をAとして表示しています

python

1import random 2import time 3 4width = int(input("State the width of the grid: ")) 5height = int(input("State the height of the grid: ")) 6 7symbols = ["A"] 8grid = {} 9 10for y in range(height): 11 for x in range(width): 12 coordinate = (x, y) 13 grid[coordinate] = " " 14 15for element in range(1): 16 place, ant_one_place = random.choice(list(grid.items())) 17 ant_one_direction = random.choice(symbols) 18 grid[place] = ant_one_direction 19 20def print_grid(): 21 for y in range(height): 22 for i in range(width): 23 print("+---", end="") 24 print("+") 25 for x in range(width): 26 if x == 0: 27 print("|", end="") 28 coordinate = (x, y) 29 print("", grid[coordinate], end=" |") 30 if y != height: 31 print("") 32 for i in range(width): 33 print("+---", end="") 34 print("+") 35 36 37print_grid()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

とりあえずボードを引数にとって状態を進める関数と、ボードを描画する関数に分けて考えてみると良いでしょう。こんなふうに。

Python

1def step(board): 2 ... 3 return next 4 5def draw(board): 6 ... 7 8def main(): 9 board = ... # 初期化する処理 10 while True: 11 next = step(board) 12 draw(next) 13 board = next

これだと終了処理ができてないですが、step() の中で適当に例外でも投げればいいでしょう。これでだいぶ思考がまとまりやすくなるはずです。

投稿2020/12/14 14:45

A_kirisaki

総合スコア2853

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問