Repository navigation
Expand file tree
/
Copy pathacfrac.py
More file actions
72 lines (68 loc) · 1.74 KB
/
Copy pathacfrac.py
File metadata and controls
72 lines (68 loc) · 1.74 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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# 2026-04-12
# translated to Python 3 from cfrac.cpp and cfrac2.cpp
import math
def cfrac(p, q):
v = []
while True:
g = math.gcd(p, q)
p //= g;
q //= g;
if q == 1: break
v.append(p // q)
p, q = q, p % q
v.append(p - 1)
width = 3*len(v) + 1
for x in v:
width += len(str(x))
result = [['.' for _ in range(width)] for _ in range(2*len(v) + 1)]
col = 0
for i in range(len(v)):
line = 2*i + 1
s = str(v[i])
for c in s:
result[line][col] = c
col += 1
result[line][col] = '.'
result[line][col + 1] = '+'
result[line][col + 2] = '.'
col += 3
for col2 in range(col, width): result[line][col2] = '-'
onepos = (col + (width - 1)) // 2
result[line - 1][onepos] = '1'
result[-1][-1] = '1'
for l in result: print(''.join(l))
def cfrac2(inp):
a = []
for i in range(len(inp)):
if i % 2 != 0:
j = 0
while inp[i][j] == '.': j += 1
k = j + 1
while inp[i][k] != '.': k += 1
a.append(int(inp[i][j:k]))
p = 1
q = 1
for i in range(len(a) - 1, -1, -1):
p, q = q, p
p += a[i] * q
print(f'{p} {q}')
kind = None
cnum = 0
while True:
cnum += 1
if kind == None: kind = input()
if kind == 'C': break
if kind == 'A':
print(f'Case {cnum}:')
cfrac(*(int(word) for word in input().split()))
kind = None
else:
inp = []
while True:
line = input()
if line == 'A' or line == 'B' or line == 'C':
kind = line
break
inp.append(line)
print(f'Case {cnum}:')
cfrac2(inp)