In [3]:
import numpy as np
np.random.seed(42)
" → ".join(np.random.permutation("Felix Sebastian Magdalena".split()))
Out[3]:
'Felix → Sebastian → Magdalena'
In [3]:
with open("input", "r") as file:
data = file.read()
data = data.split("\n\n")
rules = data[0].split("\n")
rules = [rule.split("|") for rule in rules]
for i in range(len(rules)):
rules[i] = [int(rules[i][0]), int(rules[i][1])]
print(rules)
[[57, 24], [64, 37], [64, 45], [19, 47], [19, 45], [19, 95], [98, 57], [98, 37], [98, 34], [98, 87], [96, 87], [96, 74], [96, 37], [96, 97], [96, 58], [11, 44], [11, 98], [11, 94], [11, 87], [11, 91], [11, 55], [62, 57], [62, 67], [62, 76], [62, 45], [62, 92], [62, 38], [62, 19], [54, 38], [54, 11], [54, 94], [54, 97], [54, 34], [54, 84], [54, 47], [54, 45], [27, 48], [27, 65], [27, 13], [27, 95], [27, 47], [27, 89], [27, 94], [27, 55], [27, 24], [13, 42], [13, 57], [13, 98], [13, 92], [13, 81], [13, 64], [13, 34], [13, 74], [13, 62], [13, 96], [99, 84], [99, 26], [99, 45], [99, 38], [99, 27], [99, 92], [99, 35], [99, 64], [99, 97], [99, 48], [99, 37], [37, 11], [37, 68], [37, 84], [37, 12], [37, 27], [37, 63], [37, 45], [37, 48], [37, 65], [37, 38], [37, 47], [37, 69], [58, 68], [58, 95], [58, 48], [58, 35], [58, 92], [58, 37], [58, 67], [58, 57], [58, 19], [58, 84], [58, 34], [58, 45], [58, 64], [89, 42], [89, 19], [89, 54], [89, 65], [89, 75], [89, 52], [89, 73], [89, 53], [89, 12], [89, 62], [89, 22], [89, 91], [89, 55], [89, 98], [73, 54], [73, 87], [73, 99], [73, 84], [73, 37], [73, 74], [73, 19], [73, 97], [73, 81], [73, 91], [73, 57], [73, 93], [73, 63], [73, 95], [73, 62], [12, 53], [12, 22], [12, 98], [12, 44], [12, 87], [12, 14], [12, 73], [12, 54], [12, 19], [12, 52], [12, 92], [12, 81], [12, 91], [12, 69], [12, 97], [12, 65], [84, 89], [84, 68], [84, 47], [84, 24], [84, 22], [84, 78], [84, 52], [84, 55], [84, 11], [84, 76], [84, 45], [84, 38], [84, 65], [84, 69], [84, 44], [84, 14], [84, 94], [95, 47], [95, 75], [95, 76], [95, 44], [95, 69], [95, 13], [95, 11], [95, 78], [95, 35], [95, 38], [95, 89], [95, 55], [95, 14], [95, 48], [95, 68], [95, 84], [95, 65], [95, 94], [22, 81], [22, 99], [22, 73], [22, 19], [22, 96], [22, 78], [22, 57], [22, 42], [22, 91], [22, 34], [22, 87], [22, 53], [22, 63], [22, 67], [22, 64], [22, 54], [22, 74], [22, 98], [22, 44], [93, 11], [93, 22], [93, 45], [93, 65], [93, 89], [93, 52], [93, 68], [93, 12], [93, 44], [93, 78], [93, 35], [93, 98], [93, 96], [93, 38], [93, 24], [93, 76], [93, 94], [93, 69], [93, 14], [93, 13], [44, 37], [44, 73], [44, 42], [44, 64], [44, 19], [44, 54], [44, 63], [44, 91], [44, 81], [44, 87], [44, 96], [44, 58], [44, 57], [44, 62], [44, 74], [44, 67], [44, 53], [44, 34], [44, 98], [44, 92], [44, 97], [81, 34], [81, 99], [81, 87], [81, 68], [81, 95], [81, 92], [81, 42], [81, 58], [81, 62], [81, 64], [81, 57], [81, 27], [81, 97], [81, 37], [81, 91], [81, 84], [81, 26], [81, 53], [81, 74], [81, 93], [81, 67], [81, 63], [87, 63], [87, 19], [87, 53], [87, 58], [87, 34], [87, 42], [87, 74], [87, 95], [87, 57], [87, 27], [87, 62], [87, 26], [87, 68], [87, 92], [87, 91], [87, 67], [87, 84], [87, 48], [87, 97], [87, 54], [87, 99], [87, 93], [87, 37], [26, 69], [26, 55], [26, 45], [26, 65], [26, 22], [26, 76], [26, 24], [26, 38], [26, 35], [26, 52], [26, 84], [26, 47], [26, 14], [26, 13], [26, 12], [26, 95], [26, 94], [26, 89], [26, 93], [26, 44], [26, 48], [26, 11], [26, 68], [26, 75], [63, 95], [63, 89], [63, 27], [63, 45], [63, 48], [63, 93], [63, 14], [63, 35], [63, 34], [63, 55], [63, 75], [63, 38], [63, 47], [63, 65], [63, 11], [63, 69], [63, 24], [63, 12], [63, 76], [63, 68], [63, 84], [63, 67], [63, 94], [63, 26], [45, 14], [45, 96], [45, 87], [45, 13], [45, 73], [45, 89], [45, 69], [45, 47], [45, 75], [45, 81], [45, 78], [45, 38], [45, 55], [45, 52], [45, 42], [45, 94], [45, 44], [45, 91], [45, 65], [45, 24], [45, 11], [45, 12], [45, 98], [45, 22], [35, 76], [35, 78], [35, 52], [35, 87], [35, 94], [35, 65], [35, 45], [35, 47], [35, 69], [35, 12], [35, 81], [35, 89], [35, 75], [35, 14], [35, 24], [35, 13], [35, 98], [35, 73], [35, 44], [35, 11], [35, 22], [35, 96], [35, 38], [35, 55], [69, 13], [69, 64], [69, 91], [69, 19], [69, 92], [69, 14], [69, 54], [69, 57], [69, 78], [69, 53], [69, 96], [69, 52], [69, 87], [69, 42], [69, 22], [69, 73], [69, 99], [69, 98], [69, 58], [69, 62], [69, 81], [69, 97], [69, 44], [69, 65], [48, 13], [48, 76], [48, 75], [48, 65], [48, 52], [48, 96], [48, 89], [48, 44], [48, 94], [48, 69], [48, 55], [48, 73], [48, 78], [48, 22], [48, 11], [48, 47], [48, 45], [48, 35], [48, 81], [48, 12], [48, 24], [48, 14], [48, 38], [48, 98], [38, 65], [38, 75], [38, 96], [38, 44], [38, 58], [38, 13], [38, 22], [38, 52], [38, 89], [38, 87], [38, 94], [38, 78], [38, 12], [38, 24], [38, 91], [38, 55], [38, 81], [38, 42], [38, 53], [38, 98], [38, 73], [38, 11], [38, 14], [38, 69], [67, 65], [67, 68], [67, 35], [67, 14], [67, 24], [67, 26], [67, 12], [67, 84], [67, 89], [67, 11], [67, 38], [67, 27], [67, 13], [67, 55], [67, 76], [67, 47], [67, 94], [67, 93], [67, 95], [67, 69], [67, 75], [67, 45], [67, 48], [67, 52], [53, 27], [53, 19], [53, 92], [53, 48], [53, 68], [53, 47], [53, 95], [53, 67], [53, 97], [53, 64], [53, 84], [53, 76], [53, 62], [53, 34], [53, 37], [53, 35], [53, 74], [53, 45], [53, 99], [53, 54], [53, 57], [53, 63], [53, 26], [53, 93], [68, 47], [68, 69], [68, 65], [68, 94], [68, 45], [68, 73], [68, 98], [68, 89], [68, 35], [68, 52], [68, 11], [68, 14], [68, 44], [68, 55], [68, 75], [68, 78], [68, 76], [68, 12], [68, 24], [68, 38], [68, 96], [68, 48], [68, 13], [68, 22], [97, 24], [97, 45], [97, 92], [97, 74], [97, 38], [97, 34], [97, 64], [97, 76], [97, 68], [97, 47], [97, 57], [97, 94], [97, 67], [97, 93], [97, 48], [97, 89], [97, 37], [97, 27], [97, 11], [97, 26], [97, 95], [97, 84], [97, 35], [97, 63], [74, 11], [74, 63], [74, 12], [74, 84], [74, 75], [74, 55], [74, 95], [74, 69], [74, 76], [74, 93], [74, 68], [74, 24], [74, 27], [74, 38], [74, 45], [74, 26], [74, 67], [74, 37], [74, 89], [74, 34], [74, 48], [74, 47], [74, 94], [74, 35], [91, 62], [91, 37], [91, 34], [91, 64], [91, 26], [91, 74], [91, 54], [91, 63], [91, 92], [91, 42], [91, 68], [91, 84], [91, 99], [91, 57], [91, 95], [91, 27], [91, 19], [91, 58], [91, 67], [91, 48], [91, 93], [91, 53], [91, 35], [91, 97], [76, 52], [76, 12], [76, 55], [76, 98], [76, 78], [76, 87], [76, 81], [76, 22], [76, 38], [76, 75], [76, 65], [76, 73], [76, 91], [76, 47], [76, 89], [76, 13], [76, 69], [76, 11], [76, 94], [76, 44], [76, 96], [76, 45], [76, 24], [76, 14], [55, 96], [55, 98], [55, 81], [55, 99], [55, 75], [55, 13], [55, 19], [55, 54], [55, 44], [55, 12], [55, 52], [55, 87], [55, 53], [55, 58], [55, 97], [55, 69], [55, 22], [55, 91], [55, 62], [55, 73], [55, 65], [55, 78], [55, 42], [55, 14], [75, 42], [75, 14], [75, 69], [75, 78], [75, 54], [75, 64], [75, 53], [75, 81], [75, 92], [75, 62], [75, 13], [75, 73], [75, 22], [75, 91], [75, 65], [75, 98], [75, 52], [75, 44], [75, 58], [75, 19], [75, 87], [75, 97], [75, 96], [75, 99], [24, 42], [24, 14], [24, 81], [24, 58], [24, 55], [24, 62], [24, 96], [24, 44], [24, 91], [24, 75], [24, 99], [24, 53], [24, 89], [24, 54], [24, 98], [24, 65], [24, 52], [24, 12], [24, 73], [24, 69], [24, 13], [24, 22], [24, 78], [24, 87], [34, 45], [34, 76], [34, 65], [34, 47], [34, 48], [34, 93], [34, 11], [34, 68], [34, 89], [34, 84], [34, 94], [34, 27], [34, 38], [34, 67], [34, 75], [34, 95], [34, 12], [34, 35], [34, 24], [34, 69], [34, 26], [34, 52], [34, 55], [34, 14], [92, 76], [92, 74], [92, 38], [92, 45], [92, 55], [92, 89], [92, 34], [92, 64], [92, 84], [92, 93], [92, 94], [92, 57], [92, 37], [92, 48], [92, 95], [92, 26], [92, 11], [92, 27], [92, 24], [92, 63], [92, 68], [92, 67], [92, 35], [92, 47], [42, 19], [42, 34], [42, 84], [42, 63], [42, 76], [42, 64], [42, 57], [42, 74], [42, 26], [42, 62], [42, 27], [42, 54], [42, 53], [42, 95], [42, 92], [42, 48], [42, 67], [42, 93], [42, 97], [42, 35], [42, 99], [42, 68], [42, 58], [42, 37], [78, 54], [78, 63], [78, 67], [78, 58], [78, 97], [78, 98], [78, 96], [78, 53], [78, 81], [78, 27], [78, 92], [78, 99], [78, 62], [78, 57], [78, 42], [78, 73], [78, 37], [78, 34], [78, 19], [78, 74], [78, 64], [78, 87], [78, 26], [78, 91], [65, 73], [65, 58], [65, 97], [65, 87], [65, 91], [65, 54], [65, 62], [65, 13], [65, 64], [65, 78], [65, 57], [65, 99], [65, 98], [65, 19], [65, 74], [65, 42], [65, 52], [65, 96], [65, 14], [65, 44], [65, 22], [65, 81], [65, 92], [65, 53], [52, 91], [52, 19], [52, 92], [52, 53], [52, 63], [52, 64], [52, 74], [52, 99], [52, 22], [52, 13], [52, 54], [52, 57], [52, 97], [52, 73], [52, 87], [52, 98], [52, 42], [52, 58], [52, 62], [52, 81], [52, 96], [52, 44], [52, 78], [52, 37], [47, 96], [47, 89], [47, 22], [47, 69], [47, 94], [47, 73], [47, 13], [47, 91], [47, 98], [47, 24], [47, 38], [47, 42], [47, 87], [47, 58], [47, 81], [47, 75], [47, 12], [47, 11], [47, 14], [47, 55], [47, 65], [47, 52], [47, 78], [47, 44], [94, 52], [94, 44], [94, 12], [94, 99], [94, 87], [94, 98], [94, 65], [94, 14], [94, 89], [94, 96], [94, 55], [94, 81], [94, 78], [94, 53], [94, 42], [94, 75], [94, 22], [94, 24], [94, 13], [94, 58], [94, 73], [94, 69], [94, 62], [94, 91], [14, 98], [14, 22], [14, 99], [14, 19], [14, 96], [14, 91], [14, 97], [14, 58], [14, 37], [14, 62], [14, 81], [14, 44], [14, 57], [14, 78], [14, 52], [14, 87], [14, 42], [14, 64], [14, 53], [14, 13], [14, 73], [14, 92], [14, 54], [14, 74], [57, 94], [57, 47], [57, 34], [57, 93], [57, 74], [57, 89], [57, 84], [57, 11], [57, 12], [57, 37], [57, 76], [57, 27], [57, 68], [57, 95], [57, 35], [57, 67], [57, 55], [57, 38], [57, 75], [57, 63], [57, 45], [57, 48], [57, 26], [64, 27], [64, 26], [64, 34], [64, 74], [64, 35], [64, 63], [64, 38], [64, 47], [64, 93], [64, 57], [64, 12], [64, 11], [64, 94], [64, 84], [64, 48], [64, 89], [64, 24], [64, 55], [64, 95], [64, 76], [64, 68], [64, 67], [19, 93], [19, 35], [19, 97], [19, 26], [19, 76], [19, 74], [19, 68], [19, 84], [19, 27], [19, 11], [19, 67], [19, 24], [19, 37], [19, 48], [19, 63], [19, 38], [19, 64], [19, 94], [19, 92], [19, 57], [19, 34], [98, 91], [98, 19], [98, 64], [98, 27], [98, 73], [98, 58], [98, 67], [98, 42], [98, 62], [98, 53], [98, 26], [98, 97], [98, 92], [98, 95], [98, 63], [98, 99], [98, 81], [98, 84], [98, 54], [98, 74], [96, 62], [96, 34], [96, 26], [96, 19], [96, 57], [96, 98], [96, 54], [96, 64], [96, 42], [96, 99], [96, 92], [96, 63], [96, 95], [96, 73], [96, 53], [96, 91], [96, 67], [96, 81], [96, 27], [11, 14], [11, 22], [11, 65], [11, 12], [11, 53], [11, 58], [11, 96], [11, 73], [11, 52], [11, 69], [11, 81], [11, 42], [11, 24], [11, 99], [11, 13], [11, 75], [11, 89], [11, 78], [62, 95], [62, 84], [62, 48], [62, 97], [62, 68], [62, 54], [62, 93], [62, 63], [62, 37], [62, 74], [62, 34], [62, 64], [62, 11], [62, 27], [62, 26], [62, 35], [62, 47], [54, 68], [54, 63], [54, 95], [54, 76], [54, 35], [54, 48], [54, 57], [54, 19], [54, 67], [54, 64], [54, 27], [54, 93], [54, 74], [54, 92], [54, 37], [54, 26], [27, 11], [27, 14], [27, 12], [27, 35], [27, 52], [27, 68], [27, 76], [27, 26], [27, 22], [27, 84], [27, 69], [27, 45], [27, 38], [27, 75], [27, 93], [13, 54], [13, 78], [13, 99], [13, 97], [13, 73], [13, 22], [13, 19], [13, 87], [13, 44], [13, 53], [13, 91], [13, 58], [13, 63], [13, 37], [99, 93], [99, 63], [99, 19], [99, 57], [99, 74], [99, 62], [99, 34], [99, 54], [99, 67], [99, 95], [99, 68], [99, 47], [99, 76], [37, 75], [37, 95], [37, 24], [37, 89], [37, 35], [37, 55], [37, 26], [37, 76], [37, 94], [37, 34], [37, 67], [37, 93], [58, 97], [58, 74], [58, 26], [58, 53], [58, 76], [58, 62], [58, 54], [58, 27], [58, 93], [58, 63], [58, 99], [89, 87], [89, 58], [89, 78], [89, 13], [89, 69], [89, 14], [89, 99], [89, 44], [89, 96], [89, 81], [73, 42], [73, 92], [73, 26], [73, 34], [73, 27], [73, 53], [73, 58], [73, 67], [73, 64], [12, 75], [12, 78], [12, 58], [12, 96], [12, 13], [12, 99], [12, 62], [12, 42], [84, 13], [84, 48], [84, 35], [84, 75], [84, 96], [84, 12], [84, 93], [95, 22], [95, 12], [95, 24], [95, 52], [95, 45], [95, 93], [22, 37], [22, 58], [22, 92], [22, 62], [22, 97], [93, 55], [93, 75], [93, 47], [93, 48], [44, 78], [44, 27], [44, 99], [81, 54], [81, 19], [87, 64]]
In [4]:
def check_rules(update_list, rules):
sum = 0;
for sublists in update_list:
for rule in rules:
correct = True
if not all([number in sublists for number in rule]):
continue
else:
x = sublists.index(rule[0])
y = sublists.index(rule[1])
if not x<y:
correct = False
break
if correct:
middle_index = len(sublists)//2
sum += sublists[middle_index]
# print(middle_index, len(sublists))
print(sum)
In [5]:
update_list = data[1].split("\n")
update_list = [sublist.split(',') for sublist in update_list]
update_list = update_list[:-1]
for i in range(len(update_list)):
update_list[i] = [int(update_list[i][j]) for j in range(len(update_list[i]))]
# print(update_list)
In [6]:
check_rules(update_list, rules)
6505