Skip to content

Commit cdf4d3b

Browse files
committed
2017 11
2 parents 5a430c9 + 80aef8e commit cdf4d3b

File tree

6 files changed

+240
-0
lines changed

6 files changed

+240
-0
lines changed

2015/20/main.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
2+
import sys
3+
4+
data = open(sys.argv[1]).read()
5+
lines = data.split("\n")
6+
7+
def sum_factors(n):
8+
res = 0
9+
for i in range(1, int(n**0.5) + 1):
10+
if n % i == 0:
11+
res += i
12+
if i != n // i:
13+
res += n // i
14+
return res
15+
16+
cur = 1
17+
while True:
18+
if sum_factors(cur) * 10 >= 33100000:
19+
print(cur)
20+
break
21+
cur += 1
22+
23+
def sum_factors2(n):
24+
first = n//50 + 1
25+
sqrt = int(n**0.5) + 1
26+
res = 0
27+
for i in range(min(first, sqrt), max(first, sqrt)):
28+
if n % i == 0:
29+
res += i
30+
if i != n // i:
31+
res += n // i
32+
return res
33+
34+
cur = 1
35+
while True:
36+
if sum_factors2(cur) * 11 >= 33100000:
37+
print('ans', cur)
38+
break
39+
cur += 1
40+

2015/23/main.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import sys
2+
from itertools import permutations
3+
4+
data = open(sys.argv[1]).read()
5+
6+
lines = data.split("\n")
7+
8+
instructions = [line.split() for line in lines]
9+
10+
regs = {'a': 0, 'b': 0}
11+
12+
i = 0
13+
while i < len(instructions):
14+
instr = instructions[i][0]
15+
if instr in ('hlf', 'tpl', 'inc'):
16+
reg = instructions[i][1]
17+
match instr:
18+
case 'hlf': regs[reg] //= 2
19+
case 'tpl': regs[reg] *= 3
20+
case 'inc': regs[reg] += 1
21+
i += 1
22+
elif instr == 'jmp':
23+
i += int(instructions[i][1])
24+
elif instr in ('jie', 'jio'):
25+
reg_val = regs[instructions[i][1][0]]
26+
jmp = int(instructions[i][2])
27+
if instr == 'jie' and reg_val % 2 == 0:
28+
i += jmp
29+
elif instr == 'jio' and reg_val == 1:
30+
i += jmp
31+
else:
32+
i += 1
33+
34+
print(regs['b'])
35+
36+
regs = {'a': 1, 'b': 0}
37+
38+
i = 0
39+
while i < len(instructions):
40+
instr = instructions[i][0]
41+
if instr in ('hlf', 'tpl', 'inc'):
42+
reg = instructions[i][1]
43+
match instr:
44+
case 'hlf': regs[reg] //= 2
45+
case 'tpl': regs[reg] *= 3
46+
case 'inc': regs[reg] += 1
47+
i += 1
48+
elif instr == 'jmp':
49+
i += int(instructions[i][1])
50+
elif instr in ('jie', 'jio'):
51+
reg_val = regs[instructions[i][1][0]]
52+
jmp = int(instructions[i][2])
53+
if instr == 'jie' and reg_val % 2 == 0:
54+
i += jmp
55+
elif instr == 'jio' and reg_val == 1:
56+
i += jmp
57+
else:
58+
i += 1
59+
60+
print(regs['b'])

2015/25/main.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
def get_num(c, r):
2+
return (c*(c+1))//2 + (r-1)*c + ((r-1)*(r-2))//2
3+
4+
cache = {
5+
1: 20151125
6+
}
7+
8+
def f(n):
9+
if n in cache:
10+
return cache[n]
11+
fn = (cache[n-1]*252533)%33_554_393
12+
cache[n] = fn
13+
return fn
14+
15+
ans = 0
16+
for i in range(1, get_num(3029, 2947)+1):
17+
ans = f(i)
18+
print(ans)
19+

2017/11/main.clj

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
(require '[clojure.string :as str])
2+
3+
(def data (slurp "in.txt"))
4+
5+
(def lines (str/split-lines data))
6+
7+
(def moves (str/split (first lines) #","))
8+
9+
(def dirs {"n" [1 -1 0]
10+
"s" [-1 1 0]
11+
"ne" [1 0 -1]
12+
"sw" [-1 0 1]
13+
"nw" [0 -1 1]
14+
"se" [0 1 -1]})
15+
16+
(defn hex-dist [coords] (apply max (map Math/abs coords)))
17+
18+
(def ans
19+
(loop [moves moves
20+
coords [0 0 0]
21+
max-dist 0]
22+
(if (empty? moves)
23+
[(hex-dist coords) max-dist]
24+
(let [move (first moves)
25+
coords' (mapv + coords (dirs move))
26+
max-dist' (max max-dist (hex-dist coords'))]
27+
(recur (rest moves) coords' max-dist')))))
28+
29+
(println (first ans))
30+
(println (second ans))

2017/11/main.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,23 @@
55
lines = data.split('\n')
66

77
moves = lines[0].split(',')
8+
9+
dirs = {
10+
'n': (1, -1, 0),
11+
's': (-1, 1, 0),
12+
'ne': (1, 0, -1),
13+
'sw': (-1, 0, 1),
14+
'nw': (0, 1, -1),
15+
'se': (0, -1, 1)
16+
}
17+
18+
coords = [0, 0, 0]
19+
20+
ans, ans2 = 0, 0
21+
for move in moves:
22+
coords = [coords[i] + dirs[move][i] for i in range(3)]
23+
ans = max([abs(c) for c in coords])
24+
ans2 = max(ans2, ans)
25+
26+
print(ans)
27+
print(ans2)

2020/25/main.py

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
card_pub_key = 5764801
2+
3+
door_pub_key = 17807724
4+
5+
6+
cache = {
7+
7: {
8+
0: 1
9+
}
10+
}
11+
12+
def transform(subject_num, loop_size):
13+
if subject_num not in cache:
14+
cache[subject_num] = {0: 1}
15+
if loop_size in cache[subject_num]:
16+
return cache[subject_num][loop_size]
17+
v = cache[subject_num][loop_size-1]
18+
v *= subject_num
19+
v %= 20201227
20+
cache[subject_num][loop_size] = v
21+
return v
22+
23+
door_loop_size = 11
24+
for i in range(1, door_loop_size+1):
25+
print(transform(7, i))
26+
print()
27+
28+
card_loop_size = 8
29+
for i in range(1, card_loop_size+1):
30+
print(transform(7, i))
31+
print()
32+
33+
# exit()
34+
35+
36+
for i in range(1, card_loop_size+1):
37+
print(transform(door_pub_key, i))
38+
print()
39+
40+
for i in range(1, door_loop_size+1):
41+
print(transform(card_pub_key, i))
42+
print()
43+
44+
######
45+
46+
card_pub_key = 5290733
47+
door_pub_key = 15231938
48+
49+
card_loop_size = None
50+
for i in range(1, 10_000_000):
51+
if transform(7, i) == card_pub_key:
52+
card_loop_size = i
53+
break
54+
print('card loop', card_loop_size)
55+
56+
door_loop_size = None
57+
for i in range(1, 10_000_000):
58+
if transform(7, i) == door_pub_key:
59+
door_loop_size = i
60+
break
61+
print('door loop', door_loop_size)
62+
63+
ans = 0
64+
for i in range(1, card_loop_size+1):
65+
ans = transform(door_pub_key, i)
66+
print(ans)
67+
68+
ans = 0
69+
for i in range(1, door_loop_size+1):
70+
ans = transform(card_pub_key, i)
71+
print(ans)

0 commit comments

Comments
 (0)