【Project Euler】Problem 220 Heighway Dragonの感想(その1)
Heighway Dragonとは
はじめて投稿します。Proejct Eulerをやられている方は結構いらっしゃるみたいですが100番以降になると、なかなか日本語の投稿が見つからなかったので、なんとか解けたもの感想等を投稿して行きたいと思います。(解答のコードは掲載していません)
元の問題はこちら->Project Euler 220 Heighway Dragon
要はD50のHeighway Dragon曲線の1012番目の点の座標を求めろという問題です。
開発環境はGoogle Colaboratory上でPythonで書いています。
まずHeighway Dragonを描いてみた
Heighway Dragonがどんなものか知らなかったのでまず素直に定義通りにプログラムを書いて描いてみました。関数HDragonを再帰的に使っています。
# Heighway Dragon ; s: string, dp: depth
def HDragon(s,dp):
if dp == -1: return
for c in s:
if c == "a": HDragon("aRbFR", dp-1)
elif c == "b": HDragon("LFaLb", dp-1)
elif c == "F": pos = hdpath.forward()
elif c == "R": dir = hdpath.turnR()
elif c == "L": dir = hdpath.turnL()
return
depth = 18
posx, posy = [0], [0]
hdpath = path(np.array([0,0]),0,0)
HDragon("Fa", depth)
print(f"End: step={hdpath.step}, dir={hdpath.dir}")
Class Pathは各文字のF,R,Lに従って座標や方向の変数を書き換えています。
DL = np.array([[0,1],[1,0],[0,-1],[-1,0]]) # U, R, D, L
class path:
def __init__(self,pos,dir,step):
self.pos = pos
self.dir = dir
self.step = step
def forward(self):
self.pos += DL[self.dir]
self.step += 1
posx.append(self.pos[0])
posy.append(self.pos[1])
return self.pos
def turnR(self):
self.dir = (self.dir+1)%4
return self.dir
def turnL(self):
self.dir = (self.dir-1)%4
return self.dir
この結果得られた座標のリストを使ってmatplotlibで書いたものはこちらです(Depth=18)。
Author And Source
この問題について(【Project Euler】Problem 220 Heighway Dragonの感想(その1)), 我々は、より多くの情報をここで見つけました https://qiita.com/masa0599/items/1c6a4d941df9a7bc65fc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .