-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathProblem_28.py
More file actions
52 lines (42 loc) · 1.78 KB
/
Problem_28.py
File metadata and controls
52 lines (42 loc) · 1.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
class Spiral:
def __init__(self):
self.side = {-1:0, 0:1}
self.totalElements = {-1:0, 0:1}
def sideInCircleN(self, n):
if n not in self.side:
self.side[n] = self.sideInCircleN(n-1)+2
return self.side[n]
def totalElementsCircleN(self, n):
if n not in self.totalElements:
self.totalElements[n] = self.totalElementsCircleN(n-1) + self.elementsInCircleN(n)
return self.totalElements[n]
def elementsInCircleN(self, n):
return 4*self.sideInCircleN(n) - 4
def neElementCircleN(self, n):
return self.totalElementsCircleN(n)
def seElementCircleN(self, n):
if n not in self.side or n not in self.totalElements:
a = self.totalElementsCircleN(n)
a = self.sideInCircleN(n)
return self.totalElements[n] - self.side[n-1] - 1
# return -1
def swElementCircleN(self, n):
if n not in self.side or n not in self.totalElements:
a = self.totalElementsCircleN(n)
a = self.sideInCircleN(n)
return self.totalElements[n-1] + self.side[n] - 1
def nwElementCircleN(self, n):
if n not in self.side or n not in self.totalElements:
a = self.totalElementsCircleN(n)
a = self.sideInCircleN(n)
return self.swElementCircleN(n) + self.side[n] - 1
def strSpiral(self, n):
return f"{self.neElementCircleN(n)} -- {self.seElementCircleN(n)} -- {self.swElementCircleN(n)} -- {self.nwElementCircleN(n)}"
if __name__=='__main__':
spi = Spiral()
i = 0
sumSpiral = 0
while spi.sideInCircleN(i) <= 1001:
sumSpiral += spi.neElementCircleN(i) + spi.seElementCircleN(i) + spi.swElementCircleN(i) + spi.nwElementCircleN(i)
i += 1
print(sumSpiral)