1
+ {
2
+ "cells" : [
3
+ {
4
+ "cell_type" : " markdown" ,
5
+ "source" : [
6
+ " # Advent of Code 2018 - Day 9"
7
+ ],
8
+ "metadata" : {}
9
+ },
10
+ {
11
+ "cell_type" : " markdown" ,
12
+ "source" : [
13
+ " ## Input"
14
+ ],
15
+ "metadata" : {}
16
+ },
17
+ {
18
+ "cell_type" : " code" ,
19
+ "source" : [
20
+ " # data - part 1 - 410 players; last marble is worth 72059 points\n " ,
21
+ " # player_count, final_marble_value, high_score, winner_id = 410, 72059, 0, 370\n " ,
22
+ " \n " ,
23
+ " # data - part 2 - 410 players; last marble is worth 7205900 points\n " ,
24
+ " # brute force approach (let it run for hours)\n " ,
25
+ " player_count, final_marble_value, high_score, winner_id = 410, 7205900, 0, 370\n " ,
26
+ " \n " ,
27
+ " #\n " ,
28
+ " # data examples:\n " ,
29
+ " #\n " ,
30
+ " # player_count, final_marble_value, high_score, winner_id = 9, 25, 32, 5\n " ,
31
+ " # player_count, final_marble_value, high_score, winner_id = 10, 1618, 8317, 10\n " ,
32
+ " # player_count, final_marble_value, high_score, winner_id = 13, 7999, 146373, 12\n " ,
33
+ " # player_count, final_marble_value, high_score, winner_id = 17, 1104, 2764, 16\n " ,
34
+ " # player_count, final_marble_value, high_score, winner_id = 21, 6111, 54718, 5\n " ,
35
+ " # player_count, final_marble_value, high_score, winner_id = 30, 5807, 37305, 20"
36
+ ],
37
+ "outputs" : [],
38
+ "execution_count" : 58 ,
39
+ "metadata" : {
40
+ "collapsed" : false ,
41
+ "outputHidden" : false ,
42
+ "inputHidden" : false
43
+ }
44
+ },
45
+ {
46
+ "cell_type" : " markdown" ,
47
+ "source" : [
48
+ " ## Part 1"
49
+ ],
50
+ "metadata" : {}
51
+ },
52
+ {
53
+ "cell_type" : " code" ,
54
+ "source" : [
55
+ " marble_list = [0]\n " ,
56
+ " curr_marble_idx = 0\n " ,
57
+ " player_scores = {}\n " ,
58
+ " \n " ,
59
+ " for curr_marble_val in range(1, final_marble_val + 1):\n " ,
60
+ " # adjust for marble value 0 belonging to no player\n " ,
61
+ " # (this could be cleaner)\n " ,
62
+ " player_nbr = ((curr_marble_val - 1) % player_count) + 1\n " ,
63
+ " \n " ,
64
+ " if curr_marble_val == 1:\n " ,
65
+ " marble_list.append(1)\n " ,
66
+ " curr_marble_idx = 1\n " ,
67
+ " \n " ,
68
+ " elif curr_marble_val % 23 == 0:\n " ,
69
+ " marble_to_remove_idx = (curr_marble_idx - 7) % len(marble_list)\n " ,
70
+ " marble_to_remove_val = marble_list.pop(marble_to_remove_idx)\n " ,
71
+ " curr_marble_idx = marble_to_remove_idx\n " ,
72
+ " \n " ,
73
+ " player_scores[player_nbr] = (player_scores.get(player_nbr, 0)\n " ,
74
+ " + curr_marble_val\n " ,
75
+ " + marble_to_remove_val)\n " ,
76
+ " \n " ,
77
+ " else:\n " ,
78
+ " # next pos calc is a little weird to append when pos = list len\n " ,
79
+ " next_marble_idx = ((curr_marble_idx + 1) % len(marble_list)) + 1\n " ,
80
+ " marble_list.insert(next_marble_idx, curr_marble_val)\n " ,
81
+ " curr_marble_idx = next_marble_idx\n " ,
82
+ " \n\n " ,
83
+ " def print_high_score(player_scores):\n " ,
84
+ " player_id = max(player_scores, key=player_scores.get)\n " ,
85
+ " print '{}: {}'.format(player_id, player_scores[player_id])\n " ,
86
+ " \n print_high_score(player_scores)"
87
+ ],
88
+ "outputs" : [
89
+ {
90
+ "output_type" : " stream" ,
91
+ "name" : " stdout" ,
92
+ "text" : [
93
+ " 215: 3624387659\n "
94
+ ]
95
+ }
96
+ ],
97
+ "execution_count" : 59 ,
98
+ "metadata" : {
99
+ "collapsed" : false ,
100
+ "outputHidden" : false ,
101
+ "inputHidden" : false
102
+ }
103
+ }
104
+ ],
105
+ "metadata" : {
106
+ "kernel_info" : {
107
+ "name" : " boto3"
108
+ },
109
+ "language_info" : {
110
+ "mimetype" : " text/x-python" ,
111
+ "nbconvert_exporter" : " python" ,
112
+ "name" : " python" ,
113
+ "pygments_lexer" : " ipython2" ,
114
+ "version" : " 2.7.10" ,
115
+ "file_extension" : " .py" ,
116
+ "codemirror_mode" : {
117
+ "version" : 2 ,
118
+ "name" : " ipython"
119
+ }
120
+ },
121
+ "kernelspec" : {
122
+ "name" : " boto3" ,
123
+ "language" : " python" ,
124
+ "display_name" : " boto3"
125
+ },
126
+ "nteract" : {
127
+ "version" : " 0.12.3"
128
+ }
129
+ },
130
+ "nbformat" : 4 ,
131
+ "nbformat_minor" : 4
132
+ }
0 commit comments