8000 2022: Add day 16-1. · HoffmannChristian/adventofcode@86faccf · GitHub
[go: up one dir, main page]

Skip to content

Commit 86faccf

Browse files
2022: Add day 16-1.
1 parent 699b317 commit 86faccf

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

2022/advent_of_code_2022.ipynb

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1207,6 +1207,90 @@
12071207
"sensor = get_first_possible_sensor_position(sensors, beacons)\n",
12081208
"get_tuning_freqency(sensor)"
12091209
]
1210+
},
1211+
{
1212+
"attachments": {},
1213+
"cell_type": "markdown",
1214+
"metadata": {},
1215+
"source": [
1216+
"## Day 16: Proboscidea Volcanium\n",
1217+
"\n",
1218+
"What is the most pressure you can release?"
1219+
]
1220+
},
1221+
{
1222+
"cell_type": "code",
1223+
"execution_count": null,
1224+
"metadata": {},
1225+
"outputs": [],
1226+
"source": [
1227+
"from collections import namedtuple\n",
1228+
"\n",
1229+
"def get_flow_rate_and_neighbors_per_valve(lines):\n",
1230+
" flow_rates = {}\n",
1231+
" neighbors = {}\n",
1232+
" for line in lines:\n",
1233+
" line = line.replace('=', ' ').replace(';', '').replace(',', '').split()\n",
1234+
" valve = line[1]\n",
1235+
" flow_rates[valve] = int(line[5])\n",
1236+
" neighbors[valve] = line[10:]\n",
1237+
" return flow_rates, neighbors\n",
1238+
"\n",
1239+
"def get_released_pressure_for_next_minute(state):\n",
1240+
" return state.released_pressure + sum([flow_rates[valve] for valve in state.opened_valves])\n",
1241+
"\n",
1242+
"def is_valve_openable(flow_rates, state, valve):\n",
1243+
" return valve not in state.opened_valves and flow_rates[valve] > 0\n",
1244+
"\n",
1245+
"max_minutes = 30\n",
1246+
"State = namedtuple('State', 'minute opened_valves current_valve released_pressure')\n",
1247+
"\n",
1248+
"lines = open('16_input.txt', 'r').readlines()\n",
1249+
"lines = [line.strip() for line in lines]\n",
1250+
"\n",
1251+
"flow_rates, neighbors = get_flow_rate_and_neighbors_per_valve(lines)\n",
1252+
"\n",
1253+
"states_to_visit = [State(0, [], 'AA', 0)]\n",
1254+
"visited_states = set()\n",
1255+
"max_released_pressure = 0\n",
1256+
"\n",
1257+
"while states_to_visit:\n",
1258+
" state = states_to_visit.pop(0)\n",
1259+
" if state.minute == max_minutes:\n",
1260+
" max_released_pressure = max(state.released_pressure, max_released_pressure)\n",
1261+
" continue\n",
1262+
" if (tuple(state.opened_valves), state.current_valve) in visited_states:\n",
1263+
" continue\n",
1264+
" \n",
1265+
" next_minute = state.minute + 1\n",
1266+
" released_pressure = get_released_pressure_for_next_minute(state)\n",
1267+
" visited_states.add((tuple(state.opened_valves), state.current_valve))\n",
1268+
"\n",
1269+
" if is_valve_openable(flow_rates, state, state.current_valve):\n",
1270+
" states_to_visit.append(State(next_minute, state.opened_valves+[state.current_valve], state.current_valve, released_pressure))\n",
1271+
"\n",
1272+
" for neighbor in neighbors[state.current_valve]:\n",
1273+
" states_to_visit.append(State(next_minute, state.opened_valves, neighbor, released_pressure))\n",
1274+
"\n",
1275+
"max_released_pressure"
1276+
]
1277+
},
1278+
{
1279+
"attachments": {},
1280+
"cell_type": "markdown",
1281+
"metadata": {},
1282+
"source": [
1283+
"With you and an elephant working together for 26 minutes, what is the most pressure you could release?"
1284+
]
1285+
},
1286+
{
1287+
"cell_type": "code",
1288+
"execution_count": null,
1289+
"metadata": {},
1290+
"outputs": [],
1291+
"source": [
1292+
"#TODO"
1293+
]
12101294
}
12111295
],
12121296
"metadata": {

0 commit comments

Comments
 (0)
0