Skip to content

Instantly share code, notes, and snippets.

@jaroslawjanas
Last active December 7, 2023 02:41
Show Gist options
  • Save jaroslawjanas/de51790f04fc2afaa0c7ba55b3d3f95e to your computer and use it in GitHub Desktop.
Save jaroslawjanas/de51790f04fc2afaa0c7ba55b3d3f95e to your computer and use it in GitHub Desktop.
AoC 2023 - Day 2.ipynb
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 0,
"metadata": {
"colab": {
"provenance": [],
"toc_visible": true,
"authorship_tag": "ABX9TyM+Oz9hM+/5F6QHXOOelhZt",
"include_colab_link": true
},
"kernelspec": {
"name": "python3",
"display_name": "Python 3"
},
"language_info": {
"name": "python"
}
},
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "view-in-github",
"colab_type": "text"
},
"source": [
"<a href=\"https://colab.research.google.com/gist/jaroslawjanas/de51790f04fc2afaa0c7ba55b3d3f95e/aoc-2023-day-2.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
]
},
{
"cell_type": "markdown",
"source": [
"# Advent of Code 2023"
],
"metadata": {
"id": "vOnQmuEiZh6r"
}
},
{
"cell_type": "markdown",
"source": [
"# Puzzle - part 1\n",
"\n",
"**--- Day 2: Cube Conundrum ---**\n",
"\n",
"You're launched high into the atmosphere! The apex of your trajectory just barely reaches the surface of a large island floating in the sky. You gently land in a fluffy pile of leaves. It's quite cold, but you don't see much snow. An Elf runs over to greet you.\n",
"\n",
"The Elf explains that you've arrived at **Snow Island** and apologizes for the lack of snow. He'll be happy to explain the situation, but it's a bit of a walk, so you have some time. They don't get many visitors up here; would you like to play a game in the meantime?\n",
"\n",
"As you walk, the Elf shows you a small bag and some cubes which are either red, green, or blue. Each time you play this game, he will hide a secret number of cubes of each color in the bag, and your goal is to figure out information about the number of cubes.\n",
"\n",
"To get information, once a bag has been loaded with cubes, the Elf will reach into the bag, grab a handful of random cubes, show them to you, and then put them back in the bag. He'll do this a few times per game.\n",
"\n",
"You play several games and record the information from each game (your puzzle input). Each game is listed with its ID number (like the `11` in `Game 11: ...`) followed by a semicolon-separated list of subsets of cubes that were revealed from the bag (like `3 red, 5 green, 4 blue`).\n",
"\n",
"For example, the record of a few games might look like this:\n",
"\n",
"```\n",
"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green\n",
"Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue\n",
"Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red\n",
"Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red\n",
"Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green\n",
"```\n",
"\n",
"In _game 1_, three sets of cubes are revealed from the bag (and then put back again). The first set is _3 blue cubes_ and _4 red cubes_; the second set is _1 red cube_, _2 green cubes_, and _6 blue cubes_; the third set is only _2 green cubes_.\n",
"\n",
"The Elf would first like to know which games would have been possible if the bag contained **only 12 red cubes, 13 green cubes, and 14 blue cubes**?\n",
"\n",
"In the example above, _games 1_, _2_, and _5_ would have been **possible** if the bag had been loaded with that configuration. However, _game 3_ would have been **impossible** because at one point the Elf showed you _20 red cubes_ at once; similarly, _game 4_ would also have been **impossible** because the Elf showed you _15 blue cubes_ at once. If you add up the IDs of the games that would have been possible, you get **8**.\n",
"\n",
"Determine which games would have been possible if the bag had been loaded with only 12 red cubes, 13 green cubes, and 14 blue cubes.\n",
"\n",
"**What is the sum of the IDs of those games?**"
],
"metadata": {
"id": "fLPC1VabZo4X"
}
},
{
"cell_type": "markdown",
"source": [
"## Input"
],
"metadata": {
"id": "orRRYgF86xTc"
}
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"id": "T9NaEgSIZbLO"
},
"outputs": [],
"source": [
"txt_in = \\\n",
"\"\"\"Game 1: 7 red, 8 blue; 6 blue, 6 red, 2 green; 2 red, 6 green, 8 blue; 9 green, 2 red, 4 blue; 6 blue, 4 green\n",
"Game 2: 2 green, 8 blue, 9 red; 5 blue, 11 red; 5 blue, 3 green, 4 red; 7 blue, 8 red; 5 red, 3 green, 3 blue; 1 red, 5 blue, 2 green\n",
"Game 3: 4 red, 8 green, 2 blue; 6 green, 2 red, 2 blue; 12 red, 12 green, 2 blue; 10 green, 6 red\n",
"Game 4: 12 red, 3 green; 1 green, 2 blue, 2 red; 16 red, 4 green; 14 red, 3 green; 2 blue, 5 red; 11 red, 4 green\n",
"Game 5: 19 red, 1 green; 7 red, 1 green, 1 blue; 7 red; 13 red, 2 green\n",
"Game 6: 8 green, 2 blue, 2 red; 1 red, 7 green; 6 green, 8 blue, 3 red; 14 green, 2 red, 9 blue; 13 green; 10 blue, 2 red, 4 green\n",
"Game 7: 2 red, 7 green; 9 red, 5 blue, 18 green; 16 blue, 10 green, 6 red; 13 blue, 12 green, 6 red; 19 blue, 12 red, 11 green\n",
"Game 8: 5 blue, 3 red, 1 green; 8 red, 1 blue, 3 green; 8 green, 9 blue, 8 red; 5 blue, 11 green, 3 red; 2 red, 3 blue, 1 green; 3 green, 7 red\n",
"Game 9: 3 red, 3 blue; 7 green, 9 blue, 14 red; 12 blue, 9 green, 3 red\n",
"Game 10: 6 blue, 1 green, 1 red; 17 red, 8 blue, 1 green; 4 blue, 10 red\n",
"Game 11: 2 green, 1 blue, 8 red; 14 red, 5 blue, 10 green; 14 blue, 6 red, 9 green; 7 red, 1 blue, 1 green\n",
"Game 12: 16 green, 1 blue; 1 green, 4 blue; 1 red, 2 blue, 16 green; 17 green, 3 blue; 14 green, 4 blue, 3 red; 7 green, 8 blue\n",
"Game 13: 13 red, 10 blue, 19 green; 2 blue, 12 red, 8 green; 8 blue, 11 red, 13 green\n",
"Game 14: 16 red, 7 blue, 7 green; 8 green, 10 red, 6 blue; 6 blue, 11 red, 4 green\n",
"Game 15: 6 red, 10 blue, 2 green; 10 red, 1 blue, 1 green; 5 blue, 3 red, 2 green; 16 blue, 10 red, 2 green; 13 blue\n",
"Game 16: 8 green, 10 red, 1 blue; 6 red, 9 green, 12 blue; 7 blue, 3 green, 1 red; 5 red, 6 blue, 3 green; 1 blue, 6 green, 8 red; 6 green, 8 red\n",
"Game 17: 4 green, 4 blue; 2 green, 2 red; 1 red, 8 green, 7 blue\n",
"Game 18: 6 blue, 8 green, 9 red; 4 green, 3 blue, 8 red; 8 blue, 12 red, 2 green; 4 blue, 8 red, 2 green\n",
"Game 19: 12 blue, 3 green; 2 blue, 2 green, 4 red; 3 green, 6 red, 14 blue; 3 green, 1 red, 17 blue; 10 green, 10 red, 1 blue; 8 green, 8 blue, 4 red\n",
"Game 20: 4 green, 3 blue, 1 red; 9 red, 14 blue, 9 green; 1 blue, 17 red, 2 green; 8 red, 13 blue, 8 green; 7 red, 2 green, 20 blue; 6 green, 13 red, 5 blue\n",
"Game 21: 7 red, 1 blue; 1 blue, 5 red, 4 green; 5 green, 5 red; 7 red, 2 green; 4 green, 2 red, 1 blue\n",
"Game 22: 6 red, 8 green, 18 blue; 2 green, 7 blue, 2 red; 18 blue, 8 green, 1 red; 10 red, 7 green, 20 blue; 5 blue, 10 green, 4 red\n",
"Game 23: 2 green, 2 red, 15 blue; 2 red, 6 green, 4 blue; 8 red, 5 green\n",
"Game 24: 9 blue, 7 green; 3 green, 9 blue, 1 red; 2 red, 6 blue; 3 green, 11 blue, 4 red\n",
"Game 25: 2 green, 3 red, 5 blue; 2 red, 5 green; 3 red, 2 blue, 5 green; 1 blue, 4 green, 3 red\n",
"Game 26: 1 green, 7 red; 6 green, 2 blue, 7 red; 11 green, 3 blue, 1 red; 6 red, 5 blue; 1 blue, 5 green; 8 green\n",
"Game 27: 2 green, 10 red, 3 blue; 5 red, 5 green; 2 green, 4 blue, 10 red; 4 red, 1 blue; 3 green, 3 blue, 2 red; 8 blue, 2 green\n",
"Game 28: 9 red, 7 blue; 6 blue, 11 red; 10 red, 10 blue, 3 green\n",
"Game 29: 15 blue, 10 green, 1 red; 1 blue, 10 green; 2 red, 19 green, 14 blue; 4 blue, 18 green, 7 red; 8 blue, 10 green, 5 red\n",
"Game 30: 7 blue, 3 green, 2 red; 12 blue, 5 green; 1 red, 5 green, 5 blue\n",
"Game 31: 6 green, 5 red; 7 red, 7 green, 5 blue; 2 red, 7 blue, 7 green; 2 red, 8 blue, 7 green\n",
"Game 32: 9 red, 2 green, 2 blue; 3 blue, 7 green, 3 red; 2 blue, 1 red\n",
"Game 33: 13 blue, 7 red, 1 green; 5 red, 17 blue, 1 green; 2 green, 14 red, 19 blue; 2 blue, 1 red; 13 blue, 8 red; 3 blue, 15 red\n",
"Game 34: 3 blue, 4 red, 1 green; 7 green, 2 blue; 17 green, 1 red; 7 green, 3 blue; 2 red, 1 green; 2 blue, 1 green, 2 red\n",
"Game 35: 5 red, 2 green, 4 blue; 5 blue; 2 blue, 4 green, 4 red; 8 green, 1 blue, 5 red; 3 green, 3 blue, 5 red\n",
"Game 36: 4 blue, 4 red, 4 green; 8 red, 8 blue, 4 green; 3 green, 9 red, 5 blue; 1 red, 4 green, 13 blue; 7 blue, 9 green, 9 red; 13 blue, 8 red\n",
"Game 37: 6 green, 10 red, 5 blue; 5 red, 9 green, 2 blue; 4 red, 4 blue, 1 green; 12 green, 3 red, 2 blue; 4 red, 11 green, 1 blue\n",
"Game 38: 3 red; 1 blue, 3 red; 2 red, 2 green; 2 blue, 3 green; 4 green, 2 blue, 2 red; 3 red, 2 blue\n",
"Game 39: 6 red, 4 blue, 9 green; 17 blue, 2 green, 3 red; 5 red, 15 green, 12 blue; 3 red, 5 green, 8 blue\n",
"Game 40: 20 red, 10 blue, 8 green; 7 red, 3 green, 10 blue; 14 green, 8 blue, 14 red; 4 red, 9 blue, 8 green; 11 red, 4 blue, 8 green\n",
"Game 41: 2 blue; 4 red, 2 blue, 2 green; 5 green, 9 red, 3 blue; 8 red, 4 green\n",
"Game 42: 3 red, 13 blue; 2 blue, 1 green; 6 green, 16 blue, 10 red\n",
"Game 43: 9 red, 1 green; 1 green, 7 blue, 8 red; 8 blue, 2 green, 5 red\n",
"Game 44: 15 blue, 5 green; 5 green, 1 red, 6 blue; 1 red, 4 blue\n",
"Game 45: 3 green; 2 blue, 1 green; 4 green, 4 blue; 1 red, 5 blue, 11 green\n",
"Game 46: 20 green, 10 blue, 10 red; 4 red, 13 green, 1 blue; 2 red, 2 green, 10 blue\n",
"Game 47: 5 blue, 2 red, 3 green; 5 blue, 2 red, 1 green; 2 green, 3 red, 5 blue; 1 red, 4 green, 4 blue; 2 blue\n",
"Game 48: 2 red, 10 blue, 1 green; 6 blue, 6 green, 6 red; 11 blue, 7 red, 5 green; 1 red, 6 green, 14 blue; 1 green, 9 blue, 3 red\n",
"Game 49: 3 blue, 16 green, 6 red; 14 red, 3 green, 5 blue; 12 green, 6 red, 4 blue; 4 red, 6 blue, 15 green; 6 green, 11 blue, 9 red\n",
"Game 50: 1 green, 7 red, 2 blue; 3 green, 2 blue, 5 red; 4 red, 2 blue, 4 green\n",
"Game 51: 3 green, 7 red; 2 red, 4 green, 2 blue; 10 green, 3 blue, 6 red; 1 blue, 11 green; 1 green, 3 blue; 2 blue, 7 green\n",
"Game 52: 2 green, 1 blue, 2 red; 7 red, 3 green; 2 blue, 8 green; 1 blue, 13 green, 6 red\n",
"Game 53: 7 red, 2 green; 1 blue, 16 red, 7 green; 12 red, 7 green; 1 blue, 11 red, 5 green\n",
"Game 54: 1 green, 1 blue, 16 red; 4 blue, 1 green, 6 red; 4 red, 1 blue, 3 green; 1 green, 4 red, 4 blue; 1 red, 2 green\n",
"Game 55: 2 blue, 2 green, 5 red; 1 blue, 4 red, 5 green; 2 blue, 2 green, 6 red; 2 blue, 5 red, 6 green; 6 green, 1 red\n",
"Game 56: 3 red, 14 green, 14 blue; 7 green, 14 red, 13 blue; 12 red, 13 blue, 6 green\n",
"Game 57: 6 red, 11 green, 5 blue; 6 blue, 2 green, 4 red; 4 red, 6 green; 4 green, 1 red, 2 blue; 1 green, 5 blue\n",
"Game 58: 8 red, 6 green, 10 blue; 8 blue, 9 red; 1 red, 12 blue, 1 green; 5 green, 3 blue, 8 red; 9 blue, 2 green, 4 red\n",
"Game 59: 11 green, 1 red; 5 red, 10 blue, 12 green; 6 red, 6 blue, 2 green; 1 blue, 10 green, 4 red; 8 green, 11 blue; 6 blue, 1 red, 11 green\n",
"Game 60: 16 green, 14 red, 1 blue; 2 blue, 8 green; 14 green; 1 green, 11 red, 2 blue; 1 blue, 11 green\n",
"Game 61: 11 blue, 3 green, 1 red; 9 red, 18 green; 7 red, 15 green, 5 blue; 19 blue, 2 green\n",
"Game 62: 2 green, 2 blue; 1 green, 3 red; 1 blue, 4 red, 8 green; 2 blue, 11 green; 5 red, 9 green; 7 green, 1 blue, 8 red\n",
"Game 63: 14 blue, 6 red, 5 green; 3 blue, 10 red; 8 blue, 1 green, 8 red; 9 blue, 14 red, 4 green\n",
"Game 64: 8 blue, 3 green, 1 red; 1 green, 13 blue; 4 green, 15 blue, 1 red; 9 blue, 3 green\n",
"Game 65: 5 red, 5 green, 3 blue; 7 red, 2 blue, 1 green; 2 blue, 7 red, 2 green; 6 green, 12 red, 2 blue\n",
"Game 66: 9 blue, 1 green, 1 red; 8 blue, 2 red, 2 green; 1 red, 1 green; 2 green, 1 red, 5 blue; 14 blue, 2 red; 2 red, 13 blue, 2 green\n",
"Game 67: 7 green, 2 blue, 3 red; 16 red, 15 blue, 4 green; 6 green, 3 blue, 1 red; 1 red, 5 green, 9 blue\n",
"Game 68: 11 blue, 4 red; 6 red, 1 blue; 1 green, 8 red, 11 blue; 10 blue, 7 red; 7 blue, 2 red; 9 blue, 1 green, 11 red\n",
"Game 69: 9 red, 8 green, 6 blue; 2 blue, 3 red; 4 green, 9 blue, 9 red; 3 blue, 5 green, 5 red; 1 green, 7 red, 5 blue; 1 blue, 3 green, 9 red\n",
"Game 70: 5 blue, 1 green, 3 red; 1 red, 5 green, 3 blue; 4 green, 3 blue; 2 green, 8 blue; 10 blue, 12 green\n",
"Game 71: 1 green, 5 blue, 14 red; 6 red, 2 green, 5 blue; 7 blue, 5 green, 2 red; 2 green, 2 red, 1 blue; 6 red, 5 green; 6 red\n",
"Game 72: 12 red, 6 green; 11 red, 2 green; 3 green, 1 red; 14 red, 5 green, 1 blue\n",
"Game 73: 3 green, 3 red; 4 green, 4 red, 5 blue; 2 red, 5 blue, 2 green; 4 green, 8 red, 6 blue\n",
"Game 74: 12 red, 1 blue; 3 blue, 17 red, 1 green; 5 red, 1 blue\n",
"Game 75: 14 green, 1 red; 3 green, 5 red, 16 blue; 10 blue, 20 green, 5 red\n",
"Game 76: 4 green, 9 blue, 12 red; 4 blue, 6 red, 3 green; 10 red, 8 green, 1 blue; 9 red, 6 green, 1 blue; 8 blue, 1 green, 6 red; 8 blue, 3 red\n",
"Game 77: 7 red, 12 blue, 10 green; 12 green; 8 red, 8 blue, 4 green; 11 green, 9 red, 9 blue\n",
"Game 78: 9 green, 14 blue, 16 red; 7 blue, 8 green, 1 red; 5 green, 13 red, 7 blue; 9 green, 6 red\n",
"Game 79: 2 red, 3 blue, 8 green; 1 green; 1 blue, 2 green, 1 red; 1 green; 4 blue, 2 green, 1 red\n",
"Game 80: 8 red, 3 blue, 10 green; 12 red; 13 red, 4 green, 6 blue; 2 red, 14 blue, 9 green; 13 blue, 1 red, 5 green; 13 blue, 9 red, 2 green\n",
"Game 81: 2 green, 4 blue, 9 red; 1 red, 6 blue, 14 green; 4 green, 1 blue, 5 red; 3 blue, 8 red, 9 green; 6 blue, 5 green, 11 red\n",
"Game 82: 6 blue, 6 red, 13 green; 5 blue, 4 green, 7 red; 1 green, 1 blue, 2 red\n",
"Game 83: 2 red, 8 green; 7 red, 7 green; 11 red, 6 green; 14 red, 2 green, 2 blue; 2 green, 1 blue; 8 green, 11 red, 2 blue\n",
"Game 84: 3 blue, 4 green, 9 red; 7 blue, 13 green, 17 red; 14 blue, 16 green, 14 red; 7 blue, 16 green, 3 red; 9 red, 2 blue, 14 green; 13 blue, 3 green, 7 red\n",
"Game 85: 1 green, 6 red, 2 blue; 1 blue, 8 green, 5 red; 11 green, 1 red\n",
"Game 86: 2 green, 6 blue, 2 red; 4 green, 3 blue, 3 red; 3 blue, 5 green, 8 red; 1 red; 9 red, 4 blue, 2 green; 4 green, 8 blue, 9 red\n",
"Game 87: 1 red, 3 blue, 2 green; 14 red, 8 blue, 2 green; 9 blue, 13 red, 5 green; 5 green, 2 blue; 1 green, 10 blue, 14 red; 6 blue, 12 red, 15 green\n",
"Game 88: 3 red, 7 green, 1 blue; 2 blue, 4 red, 4 green; 13 green, 3 red, 4 blue\n",
"Game 89: 2 red, 14 green, 1 blue; 6 green, 2 red; 8 red, 8 green; 1 blue; 4 red, 1 blue, 15 green; 1 blue, 1 green, 8 red\n",
"Game 90: 4 red, 4 blue; 9 red, 7 blue, 2 green; 9 blue, 8 red; 3 red, 1 blue; 15 blue, 9 red; 4 red, 4 blue, 2 green\n",
"Game 91: 14 green, 4 red; 10 red, 13 green, 5 blue; 1 green, 7 red, 20 blue\n",
"Game 92: 10 green, 7 blue; 12 green, 4 blue; 12 green, 4 red\n",
"Game 93: 1 blue, 6 red; 2 blue, 10 red, 2 green; 2 green, 2 blue; 4 red, 2 blue; 4 red, 3 green\n",
"Game 94: 2 red, 1 blue; 7 red, 1 green, 1 blue; 1 blue, 5 red; 1 green, 10 red\n",
"Game 95: 1 red, 10 blue; 6 red, 4 blue; 2 blue, 4 red; 1 red, 2 green, 7 blue; 1 red, 6 blue\n",
"Game 96: 1 green, 16 blue, 1 red; 7 red, 10 blue, 1 green; 18 blue, 12 red\n",
"Game 97: 5 blue, 3 red, 8 green; 7 red, 14 green, 1 blue; 11 green\n",
"Game 98: 1 green, 12 blue, 7 red; 6 red, 7 blue, 1 green; 5 red, 11 blue, 1 green; 2 green, 8 red, 8 blue\n",
"Game 99: 11 red, 7 blue, 15 green; 3 red, 11 green, 5 blue; 19 green, 5 red, 1 blue; 7 green, 4 red\n",
"Game 100: 10 red; 11 blue, 12 red; 1 green, 7 blue, 6 red\"\"\""
]
},
{
"cell_type": "code",
"source": [
"print(txt_in[:110])"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "uOVkRXVi65Qs",
"outputId": "3657647f-3a09-4ceb-989f-556fecfdf009"
},
"execution_count": 3,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"Game 1: 7 red, 8 blue; 6 blue, 6 red, 2 green; 2 red, 6 green, 8 blue; 9 green, 2 red, 4 blue; 6 blue, 4 green\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"## Input Formatting"
],
"metadata": {
"id": "9NVQY5mM66oT"
}
},
{
"cell_type": "code",
"source": [
"import re"
],
"metadata": {
"id": "9sxIkZoR67ur"
},
"execution_count": 4,
"outputs": []
},
{
"cell_type": "code",
"source": [
"def cleaner(txt):\n",
"\n",
" clean_txt = re.sub(r\"Game \", \"\", txt)\n",
"\n",
" clean_txt = re.sub(r\" red\", \"r\", clean_txt)\n",
" clean_txt = re.sub(r\" green\", \"g\", clean_txt)\n",
" clean_txt = re.sub(r\" blue\", \"b\", clean_txt)\n",
"\n",
" clean_txt = re.sub(r\",\", \"\", clean_txt)\n",
" clean_txt = re.sub(r\": \", \":\", clean_txt)\n",
" clean_txt = re.sub(r\"; \", \";\", clean_txt)\n",
"\n",
"\n",
" return clean_txt\n"
],
"metadata": {
"id": "ejHhqavS7FAX"
},
"execution_count": 5,
"outputs": []
},
{
"cell_type": "code",
"source": [
"cleaned_txt = cleaner(txt_in)\n",
"\n",
"print(cleaned_txt[:102])"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "7u4fbTvA7fEW",
"outputId": "4b5aac13-4fc9-4e53-b41c-d298ebf7d8b5"
},
"execution_count": 6,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"1:7r 8b;6b 6r 2g;2r 6g 8b;9g 2r 4b;6b 4g\n",
"2:2g 8b 9r;5b 11r;5b 3g 4r;7b 8r;5r 3g 3b;1r 5b 2g\n",
"3:4r 8g 2b\n"
]
}
]
},
{
"cell_type": "code",
"source": [
"# Split into separate lines\n",
"games_txt = cleaned_txt.split(\"\\n\")\n",
"\n",
"print(games_txt[0])"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "hPLgzLL68f2U",
"outputId": "2f35e610-7c90-4b98-bfb3-e58d81f0fdbf"
},
"execution_count": 7,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"1:7r 8b;6b 6r 2g;2r 6g 8b;9g 2r 4b;6b 4g\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"## Data Builder"
],
"metadata": {
"id": "pT-QhRH38Y9b"
}
},
{
"cell_type": "code",
"source": [
"def builder(lines):\n",
"\n",
" # games = {\n",
" # game_id: [[r, g, b], [r, g, b]]\n",
" # }\n",
"\n",
" games = {}\n",
"\n",
" for line in lines:\n",
" game_id, game_data = line.split(\":\")\n",
" game_id = int(game_id)\n",
" games[game_id] = []\n",
"\n",
" game_sets = game_data.split(\";\")\n",
"\n",
" for cubes_set in game_sets:\n",
" cubes_set = cubes_set.split(\" \")\n",
"\n",
" red_cubes = 0\n",
" green_cubes = 0\n",
" blue_cubes = 0\n",
"\n",
" for cubes in cubes_set:\n",
" cubes_count = int(cubes[:-1])\n",
" colour = cubes[-1]\n",
"\n",
" if colour == \"r\":\n",
" red_cubes = cubes_count\n",
"\n",
" elif colour == \"g\":\n",
" green_cubes = cubes_count\n",
"\n",
" elif colour == \"b\":\n",
" blue_cubes = cubes_count\n",
"\n",
" cubes_set_data = [red_cubes, green_cubes, blue_cubes]\n",
" games[game_id].append(cubes_set_data)\n",
"\n",
" return games"
],
"metadata": {
"id": "LRjmmjoa7lBe"
},
"execution_count": 8,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"### Test"
],
"metadata": {
"id": "jPdSkoB7A10f"
}
},
{
"cell_type": "code",
"source": [
"print(builder(games_txt[:1]))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "3RKZg3jx87vc",
"outputId": "ff6200fd-4219-4707-86e8-298798350277"
},
"execution_count": 9,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"{1: [[7, 0, 8], [6, 2, 6], [2, 6, 8], [2, 9, 4], [0, 4, 6]]}\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"## Build Data"
],
"metadata": {
"id": "tvUND2kkBAm3"
}
},
{
"cell_type": "code",
"source": [
"games_data = builder(games_txt)\n",
"\n",
"print(games_data[1])"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "wcHD2lm2A3Cv",
"outputId": "0a86b526-080b-42ea-9b5e-82f2233f0229"
},
"execution_count": 10,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[[7, 0, 8], [6, 2, 6], [2, 6, 8], [2, 9, 4], [0, 4, 6]]\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"## Game Possibility"
],
"metadata": {
"id": "q_MbIri6EcNu"
}
},
{
"cell_type": "code",
"source": [
"def is_game_possible(game_sets, max_set):\n",
"\n",
" # cubes_sets = [[r, g, b],...]\n",
" # game_set = [r, g, b]\n",
" for game_set in game_sets:\n",
" # cubes = r | g |b\n",
" # max_cubes = r | g | b\n",
" for cubes, max_cubes in zip(game_set, max_set):\n",
" if cubes > max_cubes:\n",
" return False\n",
"\n",
" return True"
],
"metadata": {
"id": "V3pPESEBBPH1"
},
"execution_count": 11,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"### Test"
],
"metadata": {
"id": "o3GBzedCMhjq"
}
},
{
"cell_type": "code",
"source": [
"test = [\n",
" [1, 2, 3],\n",
" [2, 3, 7],\n",
" [0, 5, 0]\n",
"]\n",
"\n",
"print(is_game_possible(test, [2, 5, 9]))\n",
"print(is_game_possible(test, [2, 4, 9]))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "2_cXUciFJZ3G",
"outputId": "a8b45758-a7e6-48a2-8087-5862cd0cff0a"
},
"execution_count": 12,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"True\n",
"False\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"## All Possible Games"
],
"metadata": {
"id": "lalVMqZJMizg"
}
},
{
"cell_type": "code",
"source": [
"def get_possible_games(games, max_cubes):\n",
" possible_ids = []\n",
"\n",
" for game_id, game_sets in games.items():\n",
" if is_game_possible(game_sets, max_cubes):\n",
" possible_ids.append(game_id)\n",
"\n",
" return possible_ids"
],
"metadata": {
"id": "uMazNaUZG09R"
},
"execution_count": 13,
"outputs": []
},
{
"cell_type": "code",
"source": [
"possible_games = get_possible_games(games_data, [12, 13, 14])"
],
"metadata": {
"id": "QMWcmmQIIbgp"
},
"execution_count": 14,
"outputs": []
},
{
"cell_type": "code",
"source": [
"print(f\"There are {len(possible_games)} number of possible games\")\n",
"print(f\"The sum of their ids is {sum(possible_games)}\")"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "9ccwGandIo0l",
"outputId": "12dde8ae-91fc-4e35-fd09-2323f27e433f"
},
"execution_count": 15,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"There are 52 number of possible games\n",
"The sum of their ids is 2679\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"# Puzzle - part 2\n",
"\n",
"**--- Part Two ---**\n",
"\n",
"The Elf says they've stopped producing snow because they aren't getting any water! He isn't sure why the water stopped; however, he can show you how to get to the water source to check it out for yourself. It's just up ahead!\n",
"\n",
"As you continue your walk, the Elf poses a second question: in each game you played, what is the **fewest number of cubes of each color** that could have been in the bag to make the game possible?\n",
"\n",
"Again consider the example games from earlier:\n",
"\n",
"```\n",
"Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green\n",
"Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue\n",
"Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red\n",
"Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red\n",
"Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green\n",
"```\n",
"\n",
"In game 1, the game could have been played with as few as 4 red, 2 green, and 6 blue cubes. If any color had even one fewer cube, the game would have been impossible.\n",
"Game 2 could have been played with a minimum of 1 red, 3 green, and 4 blue cubes.\n",
"Game 3 must have been played with at least 20 red, 13 green, and 6 blue cubes.\n",
"Game 4 required at least 14 red, 3 green, and 15 blue cubes.\n",
"Game 5 needed no fewer than 6 red, 3 green, and 2 blue cubes in the bag.\n",
"The power of a set of cubes is equal to the numbers of red, green, and blue cubes multiplied together. The power of the minimum set of cubes in game 1 is 48. In games 2-5 it was `12`, `1560`, `630`, and `36`, respectively. Adding up these five powers produces the sum `2286`.\n",
"\n",
"For each game, find the minimum set of cubes that must have been present.\n",
"\n",
"**What is the sum of the power of these sets?**"
],
"metadata": {
"id": "2plzUNcVMqVO"
}
},
{
"cell_type": "markdown",
"source": [
"## Game Set Cube Minimizer"
],
"metadata": {
"id": "rppG32ljE0ux"
}
},
{
"cell_type": "code",
"source": [
"def game_sets_min_cubes(game_sets):\n",
" r, g, b = 0, 0, 0\n",
"\n",
" for game_set in game_sets:\n",
" r = max(r, game_set[0])\n",
" g = max(g, game_set[1])\n",
" b = max(b, game_set[2])\n",
"\n",
" return [r, g, b]"
],
"metadata": {
"id": "_eP1ZUKcMsrD"
},
"execution_count": 18,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"### Test"
],
"metadata": {
"id": "vNQpzT8TFfTO"
}
},
{
"cell_type": "code",
"source": [
"test = [[1, 0, 5], [3, 2, 1], [9, 0, 3]]\n",
"# answer is [9, 2, 5]\n",
"\n",
"print(game_sets_min_cubes(test))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "yDxDcZ5JFgFq",
"outputId": "e091cc8e-00c5-4c53-92db-6a373d5a88cc"
},
"execution_count": 19,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[9, 2, 5]\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"## Games Minimizer"
],
"metadata": {
"id": "tz9elo8OGBJj"
}
},
{
"cell_type": "code",
"source": [
"def games_minimizer(games):\n",
" games_min_cubes = []\n",
"\n",
" for game_id, game_sets in games.items():\n",
"\n",
" min_cubes = game_sets_min_cubes(game_sets)\n",
" games_min_cubes.append(min_cubes)\n",
"\n",
" return games_min_cubes"
],
"metadata": {
"id": "xrs4QdRCFsBO"
},
"execution_count": 26,
"outputs": []
},
{
"cell_type": "markdown",
"source": [
"### Test"
],
"metadata": {
"id": "OLN8g_muGxm9"
}
},
{
"cell_type": "code",
"source": [
"test = {\n",
" 1: [[1, 0, 5], [3, 2, 1], [9, 0, 3]],\n",
" 2: [[1, 0, 5], [3, 2, 1], [9, 0, 3]],\n",
" 3: [[1, 0, 5], [3, 2, 1], [9, 0, 3]]\n",
"}\n",
"\n",
"print(games_minimizer(test))"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "5q_0JiDhGbi2",
"outputId": "ae07f571-2fa6-4ac6-e27b-ee2cbb78342a"
},
"execution_count": 27,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"[[9, 2, 5], [9, 2, 5], [9, 2, 5]]\n"
]
}
]
},
{
"cell_type": "markdown",
"source": [
"## Sum of Products"
],
"metadata": {
"id": "AJH1ZI_sGyw7"
}
},
{
"cell_type": "code",
"source": [
"import numpy as np"
],
"metadata": {
"id": "g5-ExxO2Hknj"
},
"execution_count": 31,
"outputs": []
},
{
"cell_type": "code",
"source": [
"games_min_cubes = games_minimizer(games_data)\n",
"\n",
"sum_of_products = 0\n",
"for min_cubes in games_min_cubes:\n",
" product = np.prod(min_cubes)\n",
" sum_of_products += product\n",
"\n",
"print(f\"The sum of all products of minimum possible cubes is {sum_of_products}\")"
],
"metadata": {
"colab": {
"base_uri": "https://localhost:8080/"
},
"id": "En9PjZX8G1fo",
"outputId": "17f662a7-9242-4b54-caee-64970efb825d"
},
"execution_count": 32,
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": [
"The sum of all products of minimum possible cubes is 77607\n"
]
}
]
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment