-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday10.py
119 lines (87 loc) · 2.58 KB
/
day10.py
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import itertools
def clean_data():
f = open('day10b.txt','r')
data = [int(x.replace('\n','')) for x in f.readlines()]
data.sort()
return data
def sort_adapters(data):
dif1 = 1
dif3 = 1
for i in range(len(data)-1):
dif = data[i+1] - data[i]
#print(f'{i} -- {data[i+1]} - {data[i]} -- {data[i+1] - data[i]} -- {dif1} -- {dif3}')
if dif == 1:
dif1 += 1
elif dif == 3:
dif3 += 1
return dif1*dif3
def count_arrangements(data):
new = [0]
new += data[:]
diff = [[],[]]
print(new)
for j in range(2,4):
for i in range(len(new)-j):
diff1 = []
#print(j,i,new[i],new[i+j])
if new[i+j] - new[i] <= 3:
for jj in range(j-1):
diff1.append(new[i+jj+1])
if len(diff1)>0:
diff[j-2].append(diff1)
#diff.append(sorted(list(set(diff1))))
print(diff)
print(len(diff[0]))
print(len(diff[1]))
print(diff)
print(new)
result = combination(diff[0])
result = combination(diff[1])
print(result);
return result
def combination(diff):
combs = 0
n = len(diff)
tot = 0
#diff1 = diff[:]
#for i in range(len(diff)-2):
# if diff[i+2] - diff[i+1] ==1 and diff[i+1] - diff[i] == 1:
# diff1.remove(diff[i])
for i in range(len(diff)):
combs1 = int(factorial(n) / (factorial(n-i) * factorial(i)))
combs += combs1
print(f'Getting combinations of {i} elements of {n} = {combs}')
#n = len(diff1)
#for i in range(3,n+1):
# combs1 = int(factorial(n) / (factorial(n-i) * factorial(i)))
# combs += combs1
# print(f'Getting combinations of {i} elements of {n} = {combs}')
print(diff)
#print(diff1)
#print(f'Combinations = {combs} ')
print(tot)
return combs
def combination1(diff):
combs = 0
res = []
n = len(diff)
for i in range(1,n+1):
#combs1 = int(factorial(n) / (factorial(n-i) * factorial(i)))
#combs += combs1
combs1 = list(itertools.combinations(diff,i))
combs.append(res1)
print(f'Getting combinations of {i} elements of {n} = {combs1} = {res}')
print(f'Combinations = {combs} -- {res} ')
print(len(res[2]))
return combs
def factorial(n):
fact = 1
for i in range(n,0,-1):
fact *= i
#print(f'Factorial of {n} = {fact}')
return fact
data = clean_data()
result = sort_adapters(data)
print(f'Part 1: {result}')
arrangements = count_arrangements(data)
print(f'Part 2: {arrangements}')