0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Project Euler】Problem 220 Heighway Dragonの感想(その1)

Last updated at Posted at 2021-08-22

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)。

[Dragon Curve D=18]image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?