From 44e3f851e66d9dd3bc3543998d4d172fee134f3d Mon Sep 17 00:00:00 2001 From: Dazbo Date: Tue, 19 Dec 2023 13:52:01 +0000 Subject: [PATCH] 2023d19 done --- resources/part_category_ranges.excalidraw | 1868 +++++++++++++++++ .../Dazbo's_Advent_of_Code_2023.ipynb | 1103 +++++++++- src/AoC_2023/d19/input/input.txt | Bin 0 -> 21599 bytes 3 files changed, 2954 insertions(+), 17 deletions(-) create mode 100644 resources/part_category_ranges.excalidraw create mode 100644 src/AoC_2023/d19/input/input.txt diff --git a/resources/part_category_ranges.excalidraw b/resources/part_category_ranges.excalidraw new file mode 100644 index 00000000..bf18d538 --- /dev/null +++ b/resources/part_category_ranges.excalidraw @@ -0,0 +1,1868 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "id": "YJC0M49jzlKRzcQY-cbg3", + "type": "line", + "x": 447.78759765625, + "y": -43.23892296310021, + "width": 585.8406982421875, + "height": 0, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 922831269, + "version": 117, + "versionNonce": 1752953829, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 585.8406982421875, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "id": "g2MJA3hsd7uF2TAmE4Sm9", + "type": "text", + "x": 438.93804931640625, + "y": -67.13273705001427, + "width": 13.759994506835938, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 270970955, + "version": 19, + "versionNonce": 1683581163, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "0", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "0", + "lineHeight": 1.25 + }, + { + "id": "Rwdcggn_BXPuGE8m7-L76", + "type": "text", + "x": 715.0442504882812, + "y": -72.44247520919396, + "width": 55.51997375488281, + "height": 25, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 572177413, + "version": 39, + "versionNonce": 922627909, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "2000", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "2000", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 99, + "versionNonce": 1655903115, + "isDeleted": false, + "id": "k4R-nAZEZsqzIYzAnjqkG", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1002.6559066772461, + "y": -71.73010338302208, + "strokeColor": "#1e1e1e", + "backgroundColor": "transparent", + "width": 54.07997131347656, + "height": 25, + "seed": 1590768043, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "4000", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "4000", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "id": "Jjln1uMHh2ThIAfqxoyu0", + "type": "rectangle", + "x": 446.0177001953125, + "y": -22.000000843959583, + "width": 589.3804931640625, + "height": 28.318588256835938, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 847049483, + "version": 111, + "versionNonce": 610401957, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "id": "JjtoK2GxhgOYViebA2wCE", + "type": "text", + "x": 1061.06201171875, + "y": -14.920349965053333, + "width": 101.97991943359375, + "height": 25, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 864379723, + "version": 48, + "versionNonce": 1237215787, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "range(cat)", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "range(cat)", + "lineHeight": 1.25 + }, + { + "id": "K5coKMx9Y2jS9VdWc8qIy", + "type": "rectangle", + "x": 446.9027099609375, + "y": 34.09730445389198, + "width": 254.8671875, + "height": 30, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "seed": 586909803, + "version": 162, + "versionNonce": 123003397, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "CWIMXY6ap0qdkElZQJ37r" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "id": "CWIMXY6ap0qdkElZQJ37r", + "type": "text", + "x": 567.9043045043945, + "y": 39.09730445389198, + "width": 12.863998413085938, + "height": 20, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 2037441739, + "version": 44, + "versionNonce": 1852173515, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "T", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 13, + "containerId": "K5coKMx9Y2jS9VdWc8qIy", + "originalText": "T", + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 202, + "versionNonce": 81025381, + "isDeleted": false, + "id": "vTCMTDDUpj7smoDbkPnuY", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 707.0796508789062, + "y": 34.336234202427136, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 325.6636962890625, + "height": 30, + "seed": 4339083, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "yKl6kJjOE9S65HzQ96k17" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "id": "yKl6kJjOE9S65HzQ96k17", + "type": "text", + "x": 865.3195037841797, + "y": 39.336234202427136, + "width": 9.183990478515625, + "height": 20, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 913026309, + "version": 15, + "versionNonce": 608443243, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "F", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 13, + "containerId": "vTCMTDDUpj7smoDbkPnuY", + "originalText": "F", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 148, + "versionNonce": 1177412805, + "isDeleted": false, + "id": "yi7AE88Bq69CSWOJPUe6G", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1062.2136535644531, + "y": 33.93359290604042, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffc9c9", + "width": 191.51983642578125, + "height": 25, + "seed": 161696363, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "condition split: T, F", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "condition split: T, F", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 917, + "versionNonce": 1738765835, + "isDeleted": false, + "id": "BnEI5E_Fazcycy3duBEVr", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 451.09532141210934, + "y": 130.09736548904823, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "width": 161.45394921777344, + "height": 25.000000337123645, + "seed": 1688482443, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 139, + "versionNonce": 1862206501, + "isDeleted": false, + "id": "BTNj94Rs3pz-nBzNabxi9", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1062.9917755126953, + "y": 130.09736548904823, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "width": 101.97991943359375, + "height": 25, + "seed": 1312008491, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "range(cat)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "range(cat)", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 235, + "versionNonce": 1199471787, + "isDeleted": false, + "id": "NJ7ikE9Gr5ODSa84YUP-B", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 448.8324737548828, + "y": 176.11505042557167, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 256.6370849609375, + "height": 30, + "seed": 1339771851, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "qxfY0Ejr5bw6nZNXODnPH" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "id": "qxfY0Ejr5bw6nZNXODnPH", + "type": "text", + "x": 570.7190170288086, + "y": 181.11505042557167, + "width": 12.863998413085938, + "height": 20, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 56906795, + "version": 12, + "versionNonce": 1395996549, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "T", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 13, + "containerId": "NJ7ikE9Gr5ODSa84YUP-B", + "originalText": "T", + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 289, + "versionNonce": 260026187, + "isDeleted": false, + "id": "tIkWmBuzU9ZGBKEM4-P8v", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 711.6642608642578, + "y": 176.3539496565287, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 325.6636962890625, + "height": 30, + "seed": 230005355, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "ka9-Mwhgb4zjcp8Q4gf3T" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "id": "ka9-Mwhgb4zjcp8Q4gf3T", + "type": "text", + "x": 869.9041137695312, + "y": 181.3539496565287, + "width": 9.183990478515625, + "height": 20, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 140251205, + "version": 10, + "versionNonce": 1829633765, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "F", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 13, + "containerId": "tIkWmBuzU9ZGBKEM4-P8v", + "originalText": "F", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 215, + "versionNonce": 838962667, + "isDeleted": false, + "id": "n-r4nH7YIxkyRhTyR4jAa", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1065.028305053711, + "y": 176.83631812576698, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffc9c9", + "width": 133.9798583984375, + "height": 25, + "seed": 1150096651, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "condition split", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "condition split", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 281, + "versionNonce": 320264773, + "isDeleted": false, + "id": "DBIlI6IkY5TjdB4SgwtsR", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 447.58416748046875, + "y": 71.64161979202675, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "width": 254.8671875, + "height": 30, + "seed": 701789547, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "w9oId30GZLc5JZQnBrFBV" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "id": "w9oId30GZLc5JZQnBrFBV", + "type": "text", + "x": 550.1857757568359, + "y": 76.64161979202675, + "width": 49.663970947265625, + "height": 20, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 443455563, + "version": 46, + "versionNonce": 1913559179, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "New T", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 13, + "containerId": "DBIlI6IkY5TjdB4SgwtsR", + "originalText": "New T", + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 800, + "versionNonce": 1298222891, + "isDeleted": false, + "id": "YUzU8gP3FNgcICtpUM-ra", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 448.4071350097656, + "y": 212.64597236160682, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "width": 163.2571868203124, + "height": 30, + "seed": 146236325, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "nR-WVHpRv0LIsR8uWxQx6" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "id": "nR-WVHpRv0LIsR8uWxQx6", + "type": "text", + "x": 515.635742152832, + "y": 217.64597236160682, + "width": 28.799972534179688, + "height": 20, + "angle": 0, + "strokeColor": "#f08c00", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 470212555, + "version": 13, + "versionNonce": 869689829, + "isDeleted": false, + "boundElements": null, + "updated": 1702993707053, + "link": null, + "locked": false, + "text": "New", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 13, + "containerId": "YUzU8gP3FNgcICtpUM-ra", + "originalText": "New", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 422, + "versionNonce": 1569616235, + "isDeleted": false, + "id": "Mbq27keTrtJ5IpOr8FpoT", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1062.4082641601562, + "y": 69.28762732986854, + "strokeColor": "#f08c00", + "backgroundColor": "#ffc9c9", + "width": 150.23989868164062, + "height": 25, + "seed": 1553962597, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993681931, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "new cat ranges", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "new cat ranges", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 276, + "versionNonce": 1461260229, + "isDeleted": false, + "id": "adkCisCVBC36aRv4m0I4V", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 469.74364471435547, + "y": 340.49996909413346, + "strokeColor": "#ffffff", + "backgroundColor": "transparent", + "width": 505.3096923828125, + "height": 25.663711547851562, + "seed": 520357963, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "type": "rectangle", + "version": 1118, + "versionNonce": 244611851, + "isDeleted": false, + "id": "rEJ1XL4pcFKY0osNHzK6Z", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 873.9363172006836, + "y": 268.70350523747857, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "width": 161.45394921777344, + "height": 25.000000337123645, + "seed": 1637009131, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 243, + "versionNonce": 793562917, + "isDeleted": false, + "id": "_dKryqG736jBis-WpKlfB", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1062.8239517211914, + "y": 268.70350523747857, + "strokeColor": "#e03131", + "backgroundColor": "#ffc9c9", + "width": 101.97991943359375, + "height": 25, + "seed": 1829810571, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "range(cat)", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "range(cat)", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 356, + "versionNonce": 1409737131, + "isDeleted": false, + "id": "99fbupEiw3yVIkQYIvHkF", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 448.6646499633789, + "y": 314.721190174002, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 255.75213623046875, + "height": 30, + "seed": 850937899, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "ZqhJtIXQyLAHR8QSHPBwT" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "id": "ZqhJtIXQyLAHR8QSHPBwT", + "type": "text", + "x": 570.1087188720703, + "y": 319.721190174002, + "width": 12.863998413085938, + "height": 20, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1822236235, + "version": 29, + "versionNonce": 2106696325, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "T", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 13, + "containerId": "99fbupEiw3yVIkQYIvHkF", + "originalText": "T", + "lineHeight": 1.25 + }, + { + "type": "rectangle", + "version": 394, + "versionNonce": 397636683, + "isDeleted": false, + "id": "rufFjjc8SLs2taSDfstXx", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 710.6114883422852, + "y": 314.96008940495904, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 325.6636962890625, + "height": 30, + "seed": 410258123, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "O9pRhAGUj-K4PZMy2IwoU" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "id": "O9pRhAGUj-K4PZMy2IwoU", + "type": "text", + "x": 868.8513412475586, + "y": 319.96008940495904, + "width": 9.183990478515625, + "height": 20, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 143829515, + "version": 11, + "versionNonce": 111479269, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "F", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 13, + "containerId": "rufFjjc8SLs2taSDfstXx", + "originalText": "F", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 330, + "versionNonce": 1769255659, + "isDeleted": false, + "id": "MJWRfkeEZ44H_kMh2CHxr", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1068.400276184082, + "y": 318.0973345831817, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffc9c9", + "width": 133.9798583984375, + "height": 25, + "seed": 1658747243, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "condition split", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "condition split", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "id": "bDAKlpum5mWIR_iXrAvqP", + "type": "text", + "x": 431.8583984375, + "y": -37.04425133224083, + "width": 11.979995727539062, + "height": 25, + "angle": 0, + "strokeColor": "#e03131", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1686203429, + "version": 71, + "versionNonce": 68105259, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "L", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "L", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 149, + "versionNonce": 1858975749, + "isDeleted": false, + "id": "FBMkG92xiUvuytd2GaFRZ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1034.2400741577148, + "y": -40.92480553145958, + "strokeColor": "#e03131", + "backgroundColor": "#ffec99", + "width": 11.019989013671875, + "height": 25, + "seed": 893957093, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "H", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "H", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 107, + "versionNonce": 2014148299, + "isDeleted": false, + "id": "WXtUxrrYxM3or2x26ZD_T", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 440.3523292541504, + "y": 112.33410560135292, + "strokeColor": "#e03131", + "backgroundColor": "#ffec99", + "width": 11.979995727539062, + "height": 25, + "seed": 704499717, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "L", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "L", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 250, + "versionNonce": 1925345125, + "isDeleted": false, + "id": "zdcKMHpAvnPLMTp8h6llH", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 610.8756065368652, + "y": 111.10842811111854, + "strokeColor": "#e03131", + "backgroundColor": "#ffec99", + "width": 11.019989013671875, + "height": 25, + "seed": 3114853, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "H", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "H", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 186, + "versionNonce": 544243723, + "isDeleted": false, + "id": "HOnnQySFYucaTzxx8AHQE", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 862.4407691955566, + "y": 246.98896705154823, + "strokeColor": "#e03131", + "backgroundColor": "#ffec99", + "width": 11.979995727539062, + "height": 25, + "seed": 222813739, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "L", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "L", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 329, + "versionNonce": 1021286949, + "isDeleted": false, + "id": "j0gLO_Nx_lCzEYzk_cReZ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1032.9640464782715, + "y": 245.76328956131385, + "strokeColor": "#e03131", + "backgroundColor": "#ffec99", + "width": 11.019989013671875, + "height": 25, + "seed": 1755373771, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "H", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "H", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "id": "j_SrkJaL_P_A4NPIncQcg", + "type": "text", + "x": 690.265625, + "y": 13.743331065220104, + "width": 23.899993896484375, + "height": 25, + "angle": 0, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1068286187, + "version": 58, + "versionNonce": 907691691, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "text": "RV", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "RV", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 94, + "versionNonce": 76746117, + "isDeleted": false, + "id": "7sArbBHZ29ms_wbazoNub", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 693.8730010986328, + "y": 154.26992713455604, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "width": 23.899993896484375, + "height": 25, + "seed": 1107222603, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "RV", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "RV", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 166, + "versionNonce": 202520907, + "isDeleted": false, + "id": "tAgOxj2rfmcRqAVAiWyMn", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 696.7756500244141, + "y": 292.4380789900248, + "strokeColor": "#2f9e44", + "backgroundColor": "#ffec99", + "width": 23.899993896484375, + "height": 25, + "seed": 1034598731, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "RV", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "RV", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 382, + "versionNonce": 1534537797, + "isDeleted": false, + "id": "ijUvqic95H7dery3NDiin", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 710.49560546875, + "y": 71.69027625564979, + "strokeColor": "#6741d9", + "backgroundColor": "#d0bfff", + "width": 321.23883056640625, + "height": 30, + "seed": 1908196485, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "_vTC04sU5Fd19iXTOz8JG" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 147, + "versionNonce": 520528523, + "isDeleted": false, + "id": "_vTC04sU5Fd19iXTOz8JG", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 848.1230392456055, + "y": 76.69027625564979, + "strokeColor": "#6741d9", + "backgroundColor": "#ffec99", + "width": 45.98396301269531, + "height": 20, + "seed": 1293675493, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "New F", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "ijUvqic95H7dery3NDiin", + "originalText": "New F", + "lineHeight": 1.25, + "baseline": 13 + }, + { + "type": "rectangle", + "version": 484, + "versionNonce": 272737029, + "isDeleted": false, + "id": "1YPo4iQJQ2uShP5QU8AX_", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 873.1328430175781, + "y": 355.18585120682167, + "strokeColor": "#6741d9", + "backgroundColor": "#d0bfff", + "width": 162.83172607421875, + "height": 30, + "seed": 379874763, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 3 + }, + "boundElements": [ + { + "type": "text", + "id": "2a6y49UUs1qBmVgq9YvSX" + } + ], + "updated": 1702993507076, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 251, + "versionNonce": 377240133, + "isDeleted": false, + "id": "2a6y49UUs1qBmVgq9YvSX", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 940.1487197875977, + "y": 360.18585120682167, + "strokeColor": "#6741d9", + "backgroundColor": "#ffec99", + "width": 28.799972534179688, + "height": 20, + "seed": 587889771, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993699184, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "New", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "1YPo4iQJQ2uShP5QU8AX_", + "originalText": "New", + "lineHeight": 1.25, + "baseline": 13 + }, + { + "type": "text", + "version": 489, + "versionNonce": 606285451, + "isDeleted": false, + "id": "oQsvdhs5uLyWh9DdRjcH4", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1067.2151412963867, + "y": 208.4380789900248, + "strokeColor": "#f08c00", + "backgroundColor": "#ffc9c9", + "width": 150.23989868164062, + "height": 25, + "seed": 2050868197, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993687403, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "new cat ranges", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "new cat ranges", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "text", + "version": 539, + "versionNonce": 192634533, + "isDeleted": false, + "id": "nBePyYzIlhK1-u0jAW8aV", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 1069.4010543823242, + "y": 355.24334632400917, + "strokeColor": "#f08c00", + "backgroundColor": "#ffc9c9", + "width": 150.23989868164062, + "height": 25, + "seed": 1155432805, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993692522, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "new cat ranges", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "new cat ranges", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "id": "tuq8FnnfZxY6SsZXV3kxw", + "type": "line", + "x": 385.8407287597656, + "y": 122.24775611404823, + "width": 0, + "height": 127.43365478515625, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 772059755, + "version": 180, + "versionNonce": 859404421, + "isDeleted": false, + "boundElements": null, + "updated": 1702993507076, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 127.43365478515625 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": null, + "startArrowhead": null, + "endArrowhead": null + }, + { + "type": "line", + "version": 147, + "versionNonce": 1369177675, + "isDeleted": false, + "id": "WkpEfrZTEXcGlR3uA_qxk", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 386.67468759585165, + "y": -23.408437506346687, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "width": 0, + "height": 127.43365478515625, + "seed": 886474219, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 127.43365478515625 + ] + ] + }, + { + "type": "line", + "version": 192, + "versionNonce": 618799077, + "isDeleted": false, + "id": "Up0z46Bxd6W5uNldECSaG", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 386.8034852406999, + "y": 264.00755629197255, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "width": 0, + "height": 127.43365478515625, + "seed": 2113927851, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1702993507076, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 127.43365478515625 + ] + ] + }, + { + "id": "Gd54gqv-a7zYMAxWzjqs8", + "type": "text", + "x": 309.0022506713867, + "y": 148.00327195975137, + "width": 91.40792846679688, + "height": 40, + "angle": 4.71238898038469, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": null, + "seed": 1009776491, + "version": 202, + "versionNonce": 898613253, + "isDeleted": false, + "boundElements": null, + "updated": 1702993660851, + "link": null, + "locked": false, + "text": "scenario 2:\nfalse empty", + "fontSize": 16, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "top", + "baseline": 33, + "containerId": null, + "originalText": "scenario 2:\nfalse empty", + "lineHeight": 1.25 + }, + { + "type": "text", + "version": 291, + "versionNonce": 1464986725, + "isDeleted": false, + "id": "ITQrkgwGmdPLTArmLrvDZ", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 4.71238898038469, + "x": 321.4640197753906, + "y": 23.176970591587292, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "width": 79.07196044921875, + "height": 40, + "seed": 918848869, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": null, + "updated": 1702993652537, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "scenario 1:\n", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "scenario 1:\n", + "lineHeight": 1.25, + "baseline": 33 + }, + { + "type": "text", + "version": 354, + "versionNonce": 257644165, + "isDeleted": false, + "id": "lGMjZsSU9mA7wYniJOHmy", + "fillStyle": "solid", + "strokeWidth": 2, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 4.71238898038469, + "x": 311.24227142333984, + "y": 314.3273917341654, + "strokeColor": "#1e1e1e", + "backgroundColor": "#d0bfff", + "width": 88.89595031738281, + "height": 40, + "seed": 549598731, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1702993673622, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "scenario 3:\nTrue empty", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "scenario 3:\nTrue empty", + "lineHeight": 1.25, + "baseline": 33 + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/src/AoC_2023/Dazbo's_Advent_of_Code_2023.ipynb b/src/AoC_2023/Dazbo's_Advent_of_Code_2023.ipynb index c246c3ac..d754808e 100644 --- a/src/AoC_2023/Dazbo's_Advent_of_Code_2023.ipynb +++ b/src/AoC_2023/Dazbo's_Advent_of_Code_2023.ipynb @@ -6592,9 +6592,809 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m06:39:29.226:aoc2023 - DBG: input.txt already exists\u001b[39m\n", + "\u001b[32m06:39:29.228:aoc2023 - INF: Input data:\n", + "xr{a<2738:hnx,nxz}\n", + "tnx{a>2206:R,s>1050:R,a>2105:R,R}\n", + "fq{x<3126:R,x<3349:R,x<3419:A,R}\n", + "jlv{s<1423:A,R}\n", + "xfj{a<3264:jk,x<1480:R,s>371:mjg,df}\n", + "pmn{m>568:A,R}\n", + "dt{m>3711:A,R}\n", + "vpv{m<2270:A,s<2876:R,A}\n", + "dgm{x>1168:R,m<1657:R,s>321:R,A}\n", + "tm{x>569:R,m>2103:A,a>2493:R,R}\n", + "nk{x<1590:A,x>1812:xv,a<2730:A,R}\n", + "tl{m<1299:A,x<326:R,s>3596:A,R}\n", + "vth{m<777:fh,a>958:ct,a>843:gbt,xvx}\n", + "ssf{a<2461:rvl,s>709:fs,a<3031:zjr,dj}\n", + "fk{x>976:A,a<3806:zcd,vr}\n", + "zbd{s>3482:A,m>2428:R,m>2268:A,A}\n", + "dhb{x<1242:A,x<1401:A,R}\n", + "nds{m>2792:R,dtr}\n", + "plb{a>3402:nns,x<3206:R,R}\n", + "cdh{s>2417:A,a<1027:R,x<1700:A,mjt}\n", + "hrv{x<2742:A,m<881:R,x<2775:R,R}\n", + "xh{m<2283:A,a<2206:A,R}\n", + "fvk{x>703:R,m<2096:A,m<2121:A,A}\n", + "lv{a<1074:A,x<262:R,a>1749:A,R}\n", + "qhr{m>2648:R,m<2530:A,m<2581:A,R}\n", + "mv{a>3151:R,ncd}\n", + "lfd{a>3333:A,A}\n", + "ldt{s>465:A,R}\n", + "qqz{x>2634:R,x>1467:A,m>134:A,A}\n", + "fqd{m>3145:A,s>337:A,A}\n", + "hmg{m>1999:A,s<1374:R,A}\n", + "dl{s<2343:R,A}\n", + "tnh{m>635:pht,m>250:vvf,a>2919:fjp,jjx}\n", + "hlj{a>1084:R,a>1067:A,A}\n", + "mk{a>1590:R,hkr}\n", + "hsx{m>2094:R,R}\n", + "hgn{m>1281:gjd,rl}\n", + "qm{s>110:A,x<981:R,R}\n", + "mjt{m<1253:A,R}\n", + "qqv{m>892:A,R}\n", + "ffr{x>3494:A,A}\n", + "jjx{s<537:qqz,a>2880:A,a<2848:ktd,ntm}\n", + "lz{a<1367:jxb,gpr}\n", + "mq{s<2569:R,s<2602:R,x>2631:A,A}\n", + "rlq{m<1606:R,a<3436:A,s>1030:R,A}\n", + "qvn{a>524:R,a<325:R,R}\n", + "mpf{s>346:mm,R}\n", + "pnp{x>3107:R,m<849:R,R}\n", + "fj{s>942:hv,cdj}\n", + "ml{m<932:A,m<1546:R,x<2968:R,A}\n", + "jk{x<2322:A,A}\n", + "mj{x<953:R,A}\n", + "src{x<2376:R,s<827:A,R}\n", + "sn{a<2735:A,x>2229:R,m<854:R,A}\n", + "hgl{x<3535:A,s<2734:A,R}\n", + "nr{x>2220:R,x<2124:A,x<2164:A,R}\n", + "mp{a<360:A,s>3629:R,A}\n", + "dxh{x<1732:jcp,rbd}\n", + "zr{a>785:R,a<547:nb,s>1372:A,fsq}\n", + "pkb{x<2264:R,s<1389:A,s>1562:A,R}\n", + "tk{m<2503:ql,vvt}\n", + "gv{x<1976:qvj,x>3112:kfs,x>2422:pdl,A}\n", + "xxf{s>779:A,a>565:R,A}\n", + "gf{a>2608:R,s<604:R,vsq}\n", + "pf{a>1065:A,a<1012:R,R}\n", + "hmz{s>2510:A,A}\n", + "gm{a>1801:A,R}\n", + "zfv{s>2589:R,hmz}\n", + "qkg{x<2039:R,x>2076:R,A}\n", + "zk{x<1131:A,a>3242:A,a<3132:nq,A}\n", + "sjt{x<3151:A,m<960:A,a<3687:A,R}\n", + "shr{m>2072:vjv,xpf}\n", + "gq{x<1024:mpf,a<2558:jq,s<450:mpz,gf}\n", + "cxb{a<3791:R,m<3248:A,R}\n", + "vh{m>1713:A,a<2750:R,x>3327:R,R}\n", + "vdt{s<1494:rgr,s>1601:hdz,m>2652:nl,qdz}\n", + "jl{x>774:R,fmv}\n", + "rqd{x<264:R,A}\n", + "qj{x<1450:R,R}\n", + "jb{a>591:A,A}\n", + "tlk{m<2442:A,s>3144:R,R}\n", + "tb{s>3603:R,x<2380:A,A}\n", + "lvg{a<3369:A,A}\n", + "fmv{x>489:A,a>3142:R,R}\n", + "nzc{x<1699:mnj,x<2687:snj,hhm}\n", + "nqd{x>1714:A,rb}\n", + "ffh{m>2056:R,s<999:A,R}\n", + "gkn{x>2114:A,a<3264:R,a>3434:R,R}\n", + "msm{m<2250:rf,m<2318:gt,nxh}\n", + "qfn{x<2674:A,m>2446:A,R}\n", + "qv{s<1234:A,x<698:R,x<1068:A,A}\n", + "lvl{x<741:R,A}\n", + "hsl{s<1364:R,a>2539:R,A}\n", + "ltm{s<556:A,A}\n", + "hnm{a>3612:A,a<3551:A,R}\n", + "qr{a<3123:R,a>3230:A,a>3172:R,A}\n", + "qhs{x<1385:A,x>1530:R,R}\n", + "ph{m>498:A,R}\n", + "pj{m<3141:A,x<1574:R,R}\n", + "pl{s>2852:R,a>2264:R,R}\n", + "thb{x<3288:A,s>44:R,A}\n", + "cgp{a<3718:A,A}\n", + "zx{m>1249:R,R}\n", + "hrc{s>467:R,a>369:R,A}\n", + "jn{s>478:R,R}\n", + "gxl{x>542:zxb,m<1766:A,a>3709:nt,A}\n", + "hf{m<1973:mb,m>2825:clp,ctv}\n", + "mnj{m<2896:A,a>3314:R,x>1091:jnx,R}\n", + "dhk{m<1408:A,a>2612:R,m<1964:R,A}\n", + "jbd{m>3608:A,a>3246:btv,s>108:jkg,A}\n", + "fv{a<2946:vh,x>3172:hgl,A}\n", + "skj{x<968:A,R}\n", + "rzn{a>966:A,a<427:R,A}\n", + "ncd{s>1952:R,s>1807:A,A}\n", + "dmq{a<2580:lmd,a<3301:hhg,s>3227:tk,cj}\n", + "qdz{s>1558:bbf,cmd}\n", + "kjl{m<1835:R,A}\n", + "jnx{s>596:R,x>1309:A,A}\n", + "rhg{s>1291:A,x<2642:A,a>868:A,R}\n", + "hql{a>715:ctp,a<469:mr,cbs}\n", + "ps{x<1604:nn,A}\n", + "hmx{a<2596:hsl,sgs}\n", + "glx{m>963:R,s>936:R,R}\n", + "px{x<1809:R,x<1867:A,R}\n", + "hv{m>2406:zcf,s>1014:pff,A}\n", + "btv{x<3252:R,x<3747:A,m>3479:A,R}\n", + "sfq{s>1562:R,x<2043:R,x<3301:mbb,ghj}\n", + "kkt{x>3042:R,A}\n", + "bnk{x<1916:A,A}\n", + "mtf{x>542:R,A}\n", + "gsh{a<3582:R,A}\n", + "kcl{x<2873:R,R}\n", + "rg{a<1665:fdx,m>2368:dh,a>2769:msm,czv}\n", + "jt{a<721:R,m>2323:A,a>886:R,R}\n", + "pxd{m>3549:R,R}\n", + "ctv{m>2433:A,s<602:A,cmv}\n", + "ghj{x>3625:A,m>3233:A,A}\n", + "dz{s>1616:R,s>1613:A,R}\n", + "gbk{a>3908:stx,x<3498:fq,x>3832:A,R}\n", + "vg{m<2209:A,a>880:A,x>447:A,A}\n", + "fg{a<2323:A,m<2298:R,a<2374:A,R}\n", + "ql{x<2022:vk,a<3625:tb,bfq}\n", + "vjv{m>2857:cnn,x>2663:lz,x>1248:dmq,rg}\n", + "fnl{m<3214:R,R}\n", + "xxj{s>286:A,s>175:A,a<2789:R,R}\n", + "mpz{x<1276:A,m<2304:dhk,R}\n", + "cqm{m<2396:gbk,a<3913:ktj,x<3333:qhd,rq}\n", + "nnt{m<2137:tm,R}\n", + "rhx{x<586:lv,A}\n", + "ms{s>869:R,A}\n", + "fn{m<3668:A,m<3806:A,m>3934:A,A}\n", + "lmb{m>2566:xmd,x>1354:ntr,dkx}\n", + "jcp{a<3756:R,s>2919:R,x<1535:A,A}\n", + "fh{m>444:R,a<922:ng,m>153:A,R}\n", + "brr{x<2563:znz,a>3775:cqm,x>3081:vz,ttt}\n", + "mbb{a<3572:R,R}\n", + "ks{a<596:xmv,m>673:nzk,gzq}\n", + "qx{s<258:A,a<3753:A,A}\n", + "gjd{a<3341:fv,x<3247:tmd,rk}\n", + "kfs{s<2117:A,a>1508:A,a<841:A,R}\n", + "rf{m>2134:R,fvk}\n", + "qp{x<3466:A,x<3649:R,a<2300:rfh,hbg}\n", + "hz{m>2042:dbc,dmf}\n", + "qd{s>340:R,a<1978:A,mj}\n", + "hdz{s>1664:lqr,m>1721:mjq,a>3675:qgh,qhc}\n", + "zf{s<1068:jt,hmg}\n", + "hnx{x>3334:R,x>3042:R,A}\n", + "rrn{a<1958:lx,sfs}\n", + "zb{a>264:R,a>132:R,R}\n", + "bp{s>262:dzp,m<688:R,x<725:vf,A}\n", + "fx{m>1759:jhp,s>2478:mq,R}\n", + "fjk{a>2746:ps,a<2722:cpf,x>2663:xr,mgv}\n", + "mrf{m<489:A,s<528:R,s>542:A,A}\n", + "srt{a<761:A,A}\n", + "gtc{a<2510:A,a>2530:A,x<1318:A,A}\n", + "cql{x>592:A,m<1360:R,kzl}\n", + "zjv{s<3081:A,m>2334:R,x<2919:A,R}\n", + "xq{s<2228:A,s>2357:R,x>3154:R,R}\n", + "rs{m>2291:R,A}\n", + "kt{s<1049:A,s>1143:A,A}\n", + "hjf{m>732:A,s>124:xpm,zfz}\n", + "hzp{m>458:A,m>277:R,R}\n", + "lj{m>1487:hj,s<352:hdk,a>2817:tnh,fjk}\n", + "hnv{a<1695:A,s<3347:R,R}\n", + "mfh{s>232:rhc,kgr}\n", + "mt{x<3500:A,x<3798:zbd,s<3651:gb,R}\n", + "bjz{m>932:A,x>1636:cgl,hzp}\n", + "jm{x<768:pz,a>3055:jnp,nk}\n", + "vhm{s>1096:R,x>3521:R,R}\n", + "nxz{s<492:A,m<516:R,A}\n", + "cmf{m<3598:A,s>2612:hnv,x>2417:xq,bnk}\n", + "kkz{a>1384:gm,xs}\n", + "bx{m<3495:A,x>2544:R,R}\n", + "rgs{x>846:A,m>3177:R,js}\n", + "rr{x>1771:tlr,gq}\n", + "vgl{m<1481:A,R}\n", + "nz{a<1090:tlk,s>3172:R,a<2062:A,pl}\n", + "qcr{a<3136:snf,zrv}\n", + "ng{x<2253:A,m<184:R,a>833:A,A}\n", + "nb{a>503:R,m<2471:A,m<2643:A,R}\n", + "htp{m<1676:R,R}\n", + "zp{m<2524:R,x<854:cxb,x<1523:dhb,zdc}\n", + "tnf{x<3229:A,m>2582:R,x>3273:A,A}\n", + "ggm{s>1813:A,s<1775:A,a<449:xf,R}\n", + "lzb{m<2892:xfj,kl}\n", + "thp{m>2931:R,m>2459:R,R}\n", + "pdl{a<982:R,m>1681:R,a<1895:R,A}\n", + "jj{x<547:R,a>3354:skj,A}\n", + "pff{a>1674:R,m<2017:A,A}\n", + "nrx{a<630:rqd,s>330:jn,m<2657:vg,A}\n", + "bfp{s>1004:R,A}\n", + "xps{m>2596:R,A}\n", + "kxq{m<2896:rs,m>3444:dt,znv}\n", + "xj{a>3487:pm,s>3022:jm,mxs}\n", + "qvj{m<1476:A,a>1321:R,R}\n", + "qlq{s>1326:A,s<1008:A,x<3562:R,A}\n", + "lnk{x<1260:A,x>1890:A,s>1573:R,A}\n", + "hvh{a<3906:R,s<325:R,R}\n", + "bjc{s>486:R,x>1980:A,m<223:A,A}\n", + "bj{m>1311:R,A}\n", + "tjs{m>3593:rhx,rgs}\n", + "ksz{a<334:A,a<430:A,A}\n", + "hp{x<2652:R,s>238:A,A}\n", + "qf{a>3769:A,x>2594:A,R}\n", + "lp{a<3244:A,m>3198:A,s<88:A,A}\n", + "rss{s>2234:R,R}\n", + "tzg{s<2882:jfc,s<3402:bkg,a<3428:sk,mqh}\n", + "txz{m<1810:R,m>2652:R,a>3588:R,R}\n", + "pvn{a>3803:hvh,bpl}\n", + "gft{a<2913:xxj,s>431:krz,A}\n", + "qcc{x<873:R,m<587:R,R}\n", + "dbc{s>1362:A,s>992:R,m<2907:A,R}\n", + "phq{s>3117:A,a>765:R,s<2609:R,lvl}\n", + "vjd{s>571:zjn,bdm}\n", + "rvl{a>1110:zzq,x<1998:nf,x>2809:lpz,rdv}\n", + "lx{m<855:R,x>1922:ms,m>1147:dg,glx}\n", + "qgh{s<1643:xvc,s<1651:R,R}\n", + "xf{x>2654:A,a>195:A,R}\n", + "vr{x>617:R,m<396:A,s<3191:A,A}\n", + "tlr{a>2609:qfn,dm}\n", + "kg{s<242:A,A}\n", + "vk{x<1653:R,m>2231:A,A}\n", + "lsr{a>935:A,x>1110:R,s>462:A,A}\n", + "pn{m<2216:A,a<1631:A,R}\n", + "zfz{x>2899:R,s<52:R,A}\n", + "stg{a>832:R,R}\n", + "gjb{s<23:A,a<3359:R,R}\n", + "jvf{s>119:A,a>2527:A,R}\n", + "dkx{a<3212:cql,s>119:jj,x>524:psl,xb}\n", + "qtc{x<2528:A,m<385:R,A}\n", + "fjp{a<2992:kn,a<3011:dqd,m<146:R,A}\n", + "vvt{x<1894:fbs,a>3605:zbk,R}\n", + "xz{m<1515:A,A}\n", + "js{s>2570:R,A}\n", + "hpt{m>1643:R,x<884:A,m<1598:A,R}\n", + "zq{a>1969:xh,m<1614:kdf,A}\n", + "hbp{x>2963:R,A}\n", + "cpf{m<604:bjc,A}\n", + "jkg{m>3490:A,a>3111:R,m<3422:R,R}\n", + "vrd{m<2920:R,a<3288:A,A}\n", + "jfd{s>397:R,m>3282:vgc,m<3165:trj,fnl}\n", + "rh{x<2285:lks,bx}\n", + "nzp{a<3752:A,R}\n", + "fmf{a<900:bp,a<977:fp,rc}\n", + "lsb{m>2743:A,gkn}\n", + "kdp{a>707:lmq,m>3143:rh,kf}\n", + "gg{m>3476:A,m>3387:A,m<3351:R,R}\n", + "nd{m<360:A,x>3509:R,R}\n", + "cxc{a>2240:A,x<1886:A,A}\n", + "ntm{a<2861:A,R}\n", + "nqg{x>3769:A,x>3742:A,A}\n", + "tg{s<2140:A,m>2294:R,m<2193:R,R}\n", + "sx{s>237:R,A}\n", + "dg{m<1286:R,a>1656:A,m<1382:A,R}\n", + "jsn{x>3365:A,vgl}\n", + "kf{a>393:mc,m<2579:R,tfx}\n", + "bpl{m>863:A,m>467:R,A}\n", + "tz{x<668:A,A}\n", + "db{m>3088:kj,x<1576:lzs,A}\n", + "jmm{s<779:jfd,tzj}\n", + "zrv{m>1431:R,R}\n", + "php{a<1585:R,a<2226:R,A}\n", + "zcf{s<1042:R,A}\n", + "mm{x<534:A,A}\n", + "hdk{s>153:txj,nqd}\n", + "zdt{x>3687:R,kkk}\n", + "hc{x<2498:A,m>1186:A,A}\n", + "vgd{m<176:R,a<842:A,a>1015:R,A}\n", + "zh{a>561:A,s<746:A,x<2554:R,A}\n", + "zjr{a<2709:rr,lj}\n", + "lpm{s<2577:R,a>2647:A,m<2316:R,A}\n", + "smk{a>3635:R,txz}\n", + "cr{s<270:tgc,m>465:pnp,ft}\n", + "tmd{s<3028:qf,R}\n", + "cqx{x<2020:R,x>2434:A,x>2175:A,A}\n", + "xlx{s>3190:R,A}\n", + "ttt{a<3554:tkh,tkq}\n", + "jz{x<1102:R,R}\n", + "hcz{a>3152:A,m<2410:R,x>2244:A,A}\n", + "zqj{s>101:A,s>67:R,m>2989:thb,A}\n", + "kn{m>162:A,s<496:A,s<633:A,R}\n", + "qt{a<1311:A,x>1063:A,A}\n", + "sxk{a<3632:R,x<2553:R,x<2625:A,A}\n", + "xv{s>3601:R,A}\n", + "snx{x<792:R,a<1919:pq,a<2022:hq,bz}\n", + "qmg{x>3327:R,a>3626:bl,a<3496:rlq,tnf}\n", + "gz{s<940:sms,hnk}\n", + "zs{a<2803:hmx,hc}\n", + "mbz{x<1001:zf,hz}\n", + "rl{s>2922:sc,x<3395:dl,zdt}\n", + "sqx{s<144:R,a<3398:R,x>2223:A,A}\n", + "cp{m<2323:A,A}\n", + "cmg{s>1623:A,a<3759:R,a>3876:A,R}\n", + "vtp{m>2564:A,m<979:psh,x>3832:A,nv}\n", + "bq{s<2169:R,s>2329:A,R}\n", + "sxr{s>548:R,R}\n", + "vb{m<1546:bj,m>1725:A,a<3717:hpt,R}\n", + "zl{x>2548:R,m>3433:fn,A}\n", + "kbx{m>2247:A,a>606:R,s>2848:hm,A}\n", + "hr{a<3560:R,x>1405:A,m>1584:A,A}\n", + "ktd{m<167:R,R}\n", + "bk{s<362:A,s>368:R,a>3369:A,A}\n", + "vz{x>3657:vtp,s<954:gsh,s<1183:qmg,jsn}\n", + "jq{m<2577:qhs,gtc}\n", + "nf{s>712:mbz,m>1866:szx,a<647:ss,fmf}\n", + "lmq{x<2537:R,m>2563:R,s>1064:rhg,R}\n", + "znz{x<887:gxl,ffh}\n", + "bdm{s<482:A,s>535:sxr,R}\n", + "mxs{s>2254:jl,x<1103:mv,lf}\n", + "sfd{m<431:A,R}\n", + "rz{x>1978:xn,A}\n", + "lvv{x<2871:A,s<2781:A,s>3509:kkt,R}\n", + "dj{s>417:jg,a>3559:mfh,s>214:vmr,lmb}\n", + "spn{m>417:R,R}\n", + "mc{m<2406:A,m<2653:R,R}\n", + "pvm{x<2944:R,A}\n", + "zcd{a<3691:A,m<386:A,s>2946:R,R}\n", + "vvf{x>2029:ph,a>2937:tp,x<790:A,A}\n", + "vmq{a<850:A,s<3476:A,x<2359:A,A}\n", + "mb{a>3737:xmc,s<542:hnm,x>2277:R,st}\n", + "xjb{m<1846:xpv,s<268:lsb,kxq}\n", + "nt{m<2677:A,x>326:R,R}\n", + "ngf{m<1114:kkz,s>2628:zg,s<2243:qzx,sr}\n", + "tmq{m<3330:R,m>3679:rzn,gg}\n", + "qjd{a>587:bxd,s<1370:kc,s>1572:ksz,hbp}\n", + "lpz{m<2004:ks,m<2966:kr,m<3545:jmm,rqx}\n", + "rhj{m>3073:A,m>2754:R,R}\n", + "vmk{a>1591:A,m>1701:R,m<1465:R,R}\n", + "df{a>3391:R,x>2887:R,x>2143:R,R}\n", + "gdb{s>3482:R,a>3109:A,R}\n", + "sms{x>2207:R,m<524:zb,rrl}\n", + "ss{m>735:mg,x<1028:tq,s<388:sx,kpc}\n", + "kgr{x<2041:zp,a<3722:smk,m<1354:hjf,zqj}\n", + "gbt{a<904:A,a>935:R,a<917:A,A}\n", + "cmd{x<2195:A,s>1535:lvn,sjt}\n", + "lgg{s<293:A,a>3249:A,A}\n", + "trj{m<3048:R,R}\n", + "mgv{x>1466:sn,vt}\n", + "bmj{x<1748:R,A}\n", + "hhg{m>2584:gs,x<2018:qpd,a<2959:vpv,vm}\n", + "jxb{s<2968:tf,a<806:bvq,mt}\n", + "txj{a<2865:kg,hp}\n", + "prp{s<1203:A,R}\n", + "rc{s>427:pf,a<1046:A,s>181:A,hlj}\n", + "cz{a<1470:rss,a>1953:cxc,tg}\n", + "ctp{x<2600:A,s<703:pg,vn}\n", + "hg{m>1875:A,R}\n", + "tgc{s>103:R,x>2902:R,A}\n", + "xpf{a<2558:ngf,x>2202:hgn,xj}\n", + "lms{m>2763:R,x<2186:R,a<3059:A,R}\n", + "pz{m>1122:xz,s<3366:R,s<3707:gdb,A}\n", + "pb{s<3209:R,x<440:A,lpk}\n", + "jg{a>3464:hf,m>1784:nzc,vjd}\n", + "rdv{m>1536:kdp,x>2427:hql,a<735:gz,vth}\n", + "kzc{a>655:A,x>3522:hrc,R}\n", + "st{x>1014:A,s<605:R,R}\n", + "dmf{a<482:R,a<895:A,a<970:A,A}\n", + "znv{a>3379:R,m>3168:A,R}\n", + "zbk{s>3588:R,m>2703:R,x<2271:R,A}\n", + "lks{s<670:A,x<2097:A,A}\n", + "mbq{x<2183:qd,m<1342:cr,ht}\n", + "xmd{x<2331:ntg,m>3377:jbd,fm}\n", + "zln{s>1431:cgp,a<3713:hr,cgk}\n", + "ntg{s>120:A,x>1443:R,a<3366:R,R}\n", + "tzj{x<3372:prp,x>3702:xp,m>3170:R,qlq}\n", + "xs{s<2731:R,m<561:R,vmq}\n", + "tf{x<3480:A,m>2455:A,R}\n", + "rln{a>1779:xdr,R}\n", + "nn{x>822:R,x>491:R,x>227:R,R}\n", + "pm{m<866:fk,s>2803:vb,s>2416:zfv,jgv}\n", + "xnp{s>2075:A,R}\n", + "hbg{s<2746:A,x<3803:A,m<2542:A,A}\n", + "stx{s>975:R,x>3496:R,s>885:R,R}\n", + "lpk{m<2670:A,m>2794:A,R}\n", + "rgr{s<1386:hsx,zln}\n", + "dm{s<338:jvf,m>2519:zgj,ml}\n", + "hrq{m>1466:A,s<3469:zx,s>3766:A,tl}\n", + "mg{m<1308:R,dgm}\n", + "xvx{a<776:srt,a<810:vj,stg}\n", + "tkr{m<2953:R,s<1185:A,a<3952:A,A}\n", + "lf{a>3172:R,s<1944:R,A}\n", + "zbz{m>2489:mnc,a>2239:cp,a<1874:zjv,ftn}\n", + "cdj{m<2436:qtj,a<1945:pj,src}\n", + "jnp{s<3395:R,A}\n", + "lt{x<624:A,a>3655:A,R}\n", + "nrv{x<2171:zk,a>3212:plb,m>3713:hsq,dr}\n", + "tq{m<344:mgz,R}\n", + "bvq{m>2442:mp,rjz}\n", + "hhm{m<3069:R,s>570:hl,s<505:A,zj}\n", + "rqx{x>3506:ddz,vl}\n", + "hkr{s<1564:R,x>2795:A,x>2548:A,R}\n", + "tzp{x>1878:R,x<1197:bk,x>1460:A,A}\n", + "xmc{a<3841:R,m>977:R,s<520:A,R}\n", + "kpc{s>553:A,a>373:R,s>489:mrf,A}\n", + "vgc{x>3361:A,s>257:A,m>3414:A,R}\n", + "nq{x>1800:A,m>3752:A,a>3082:A,R}\n", + "fsq{s>1258:R,m<2431:A,m>2772:A,A}\n", + "ktj{x<3300:rhj,kt}\n", + "nzk{a<786:vhm,A}\n", + "tp{s>516:A,A}\n", + "mgz{s<343:R,R}\n", + "hmk{m>2242:rbh,zs}\n", + "tr{s<580:A,m>1084:A,A}\n", + "in{s>1709:shr,ssf}\n", + "fbs{m>2660:A,m<2567:R,R}\n", + "clc{m<3471:jb,s>2669:xtx,s>2279:R,R}\n", + "zgj{x<2962:A,m>3024:R,A}\n", + "ftn{s<2594:A,s<3498:A,s>3737:R,R}\n", + "nmc{s>1639:A,a>3562:R,x<2452:R,A}\n", + "ls{a<994:R,x<2713:vmk,x>3155:htp,php}\n", + "bbf{x<2285:lnk,x>2861:A,R}\n", + "lm{x>2624:R,A}\n", + "rfh{a<1918:A,s<3053:A,m<2456:A,A}\n", + "bl{x>3168:R,R}\n", + "xn{s<1829:A,A}\n", + "hj{x>1386:gft,fqd}\n", + "snf{a>3072:R,R}\n", + "pg{s<294:A,m<831:A,m>1263:A,A}\n", + "kkk{a<3490:R,x<3523:R,R}\n", + "xpv{x<1729:lgg,A}\n", + "dzp{s>458:R,x<1321:A,A}\n", + "ntr{a<3241:qcr,bfr}\n", + "rk{m>1700:R,m>1433:R,x<3539:A,R}\n", + "vl{s<701:qvn,a>732:A,R}\n", + "hq{s<2487:A,s<3014:R,R}\n", + "dlc{x<3041:clc,tmq}\n", + "zg{x>1814:ls,x<686:hrq,jpr}\n", + "pdr{x>816:R,R}\n", + "tjb{a>1942:zl,cmf}\n", + "sgs{s>1230:R,R}\n", + "cnn{a>2517:tzg,x<1521:tjs,a<1469:dlc,tjb}\n", + "sfs{m<628:R,s>930:tnx,m>1168:R,R}\n", + "cgk{s>1412:A,s<1399:R,R}\n", + "xb{x<285:A,A}\n", + "xmj{s<3313:A,m<2698:R,R}\n", + "jhp{a>1163:A,R}\n", + "jgv{s>2059:vx,x>989:R,m<1617:R,kjl}\n", + "gpr{x>3160:qp,a<3047:zbz,lvv}\n", + "tfx{m<2941:R,x>2491:A,A}\n", + "sr{m<1525:cdh,fx}\n", + "fql{x<1418:R,A}\n", + "ts{a<2631:R,A}\n", + "bfr{m>1646:R,s<85:qqv,x<3051:sqx,A}\n", + "zj{x<3373:R,m>3389:A,m>3219:A,A}\n", + "sk{a<2840:ts,s<3691:qr,s<3876:A,R}\n", + "xtx{a>762:R,m>3708:R,A}\n", + "rx{s<2605:A,qhr}\n", + "vx{s<2277:R,a>3680:R,a>3593:A,R}\n", + "kdf{m<544:A,s<1477:A,A}\n", + "cmv{s<657:R,x<1700:A,a>3646:R,R}\n", + "xpm{m>331:A,R}\n", + "qzx{s>1906:gv,a<1113:ggm,rz}\n", + "qrm{x<2907:R,m<2572:A,a<3489:R,R}\n", + "dtr{m<2474:R,R}\n", + "cx{a<2460:fg,a<2572:R,lpm}\n", + "mnc{m>2641:R,m>2575:R,m>2533:A,R}\n", + "hsq{s<385:R,s>405:bs,m>3834:R,kcl}\n", + "jpr{m<1719:qt,hg}\n", + "hl{m<3427:A,a<3178:A,s>624:R,R}\n", + "vf{a<765:R,m>1268:A,s<141:R,R}\n", + "bhg{s<952:A,R}\n", + "gt{m<2287:qjq,a<3194:R,m<2303:xlx,lt}\n", + "gd{a>2980:R,m<1203:R,R}\n", + "cgl{s<397:R,A}\n", + "cbs{x>2658:hrv,m<812:qtc,zh}\n", + "psh{m>546:R,A}\n", + "tpg{s>2985:A,m<3486:R,R}\n", + "rsv{x<3495:fst,a<247:klf,jlv}\n", + "vm{m>2318:hcz,s>2480:A,hk}\n", + "hnk{m>736:pkb,nr}\n", + "qbg{a<629:A,s>3209:R,mtf}\n", + "vmr{s<336:xjb,m<2583:qjp,m<3422:lzb,nrv}\n", + "dqd{s<491:R,x>2458:A,R}\n", + "jfc{a<3378:R,lm}\n", + "mjq{m>3216:cmg,s>1624:A,s<1610:nzp,dz}\n", + "fm{m>3056:lp,s>98:qtf,A}\n", + "clp{x>2129:R,A}\n", + "zzq{s>1114:hst,s<609:mbq,m<1439:rrn,fj}\n", + "klf{a>120:A,a>56:A,A}\n", + "nl{a>3745:qj,sfq}\n", + "szx{x<761:nrx,db}\n", + "pq{a<1830:R,A}\n", + "rq{x>3602:R,a>3950:tn,a<3931:A,ffr}\n", + "lzs{a>569:R,x<1250:R,R}\n", + "qtf{a<3358:R,x<2905:R,A}\n", + "fph{a<3718:A,x<2225:R,R}\n", + "snj{x>2131:thp,x>1912:qkg,a>3243:ltm,px}\n", + "jc{x<2498:A,a>221:R,m>877:A,R}\n", + "gzj{x>1807:A,m>3696:jz,qv}\n", + "rb{m<919:R,s<98:R,s>121:R,A}\n", + "ht{s>399:A,x>3166:A,m<2596:R,A}\n", + "rjz{a<370:R,A}\n", + "mjg{s<392:A,x<2790:R,A}\n", + "qpd{a>2828:R,bmj}\n", + "nns{s<385:A,s>403:A,A}\n", + "xvc{x>1676:R,s>1628:A,m>687:A,R}\n", + "zxb{x>718:A,R}\n", + "tn{a<3977:R,x<3440:R,R}\n", + "zdc{s<105:A,x>1709:A,R}\n", + "dr{s>368:pxd,R}\n", + "krz{a>2955:A,R}\n", + "fs{a<3398:hmk,s<1304:brr,vdt}\n", + "kzl{x<251:R,x>411:R,s<95:A,A}\n", + "hnd{x>1357:R,A}\n", + "fdx{m>2361:pb,m<2198:phq,m>2290:qbg,kbx}\n", + "rhc{m>2517:scg,x<1676:pvn,x>2698:qfk,fph}\n", + "jh{a>3482:A,R}\n", + "ddz{x<3705:gj,x>3834:A,m<3795:nqg,xxf}\n", + "czv{a<2106:snx,m<2262:nnt,cx}\n", + "xhg{m<2396:R,x<2899:A,R}\n", + "kc{m<2522:A,s<1213:A,a>229:A,R}\n", + "vt{m>515:A,s>566:A,A}\n", + "kl{m>3081:xc,s<378:R,m<2962:vrd,hnd}\n", + "xmv{m>896:A,s>941:nd,pmn}\n", + "qjq{a<3471:R,A}\n", + "tkh{s<1068:jh,qrm}\n", + "cj{s<2474:zrc,dxh}\n", + "mcj{s>3215:cq,pn}\n", + "bxd{a<891:R,a<1032:R,m<2541:A,R}\n", + "mtc{x<2110:R,m<3035:R,R}\n", + "psl{m>1354:lfd,s<67:gjb,s>101:qm,R}\n", + "lmd{m>2534:cqx,s<2646:cz,m<2340:mcj,nz}\n", + "xc{s<372:R,a<3274:A,R}\n", + "gj{a<465:A,m>3758:A,x>3598:A,A}\n", + "bz{m<2223:R,x<963:R,x>1101:A,A}\n", + "vsq{x>1282:A,a<2591:A,A}\n", + "pht{a>2948:gd,s>499:tr,s>425:ldt,R}\n", + "lvn{m<928:R,R}\n", + "gb{m>2419:R,a>1135:R,m<2258:R,R}\n", + "ct{s>866:R,x>2173:R,R}\n", + "vj{s>1039:A,x>2171:A,A}\n", + "ft{a<1806:R,m<255:A,A}\n", + "mqh{a<3675:R,fql}\n", + "bkg{s>3166:R,tpg}\n", + "cq{x<1886:A,A}\n", + "zrc{m>2535:A,x<2119:xnp,x>2452:sxk,bq}\n", + "nv{a<3611:R,R}\n", + "zjn{m<1047:A,R}\n", + "qtj{a<1943:R,x>2213:A,s>778:A,R}\n", + "tkq{m<1388:R,a<3674:bhg,xhg}\n", + "qjp{s>376:bjz,tzp}\n", + "bfq{x<2368:A,x<2523:A,a>3761:R,A}\n", + "mr{x>2674:R,x>2564:R,jc}\n", + "zkg{x<2949:R,x>3122:A,m<3032:A,A}\n", + "hst{s<1346:rln,x<2070:zq,mk}\n", + "fp{m>930:lsr,a<930:qcc,pdr}\n", + "ljh{x>1503:R,x>966:A,A}\n", + "bs{s<411:A,s>415:R,A}\n", + "gzq{s>573:spn,s<216:A,m<286:vgd,A}\n", + "qfk{a<3832:R,a>3913:A,A}\n", + "nxh{s>2539:tz,R}\n", + "hk{a>3128:A,R}\n", + "xdr{m<2195:A,R}\n", + "scg{m<3346:mtc,x<1621:R,s<303:qx,A}\n", + "sc{x>3385:lvg,a<3360:R,m<676:sfd,A}\n", + "kj{s<354:A,m<3555:R,s<487:R,A}\n", + "kr{s<1061:kzc,x<3218:qjd,a>424:zr,rsv}\n", + "qhc{x<2149:R,x>2781:R,m<953:R,nmc}\n", + "qhd{a<3942:bfp,s<1085:zkg,a<3963:tkr,pvm}\n", + "gs{a<2897:A,s>2780:xmj,lms}\n", + "rbh{m<3151:nds,gzj}\n", + "rbd{m>2470:A,m<2224:R,R}\n", + "fst{s<1304:A,m>2596:A,x>3343:A,R}\n", + "hm{s<3488:A,s>3768:A,x>608:R,R}\n", + "vn{s<1194:R,A}\n", + "xp{m<3163:A,m>3391:R,s>1334:A,A}\n", + "dh{x>532:xps,rx}\n", + "lqr{m>2480:A,ljh}\n", + "rrl{s>375:A,x>2075:A,R}\n", + "\n", + "{x=1741,m=2523,a=1038,s=869}\n", + "{x=427,m=395,a=33,s=3014}\n", + "{x=170,m=331,a=1510,s=1074}\n", + "{x=152,m=897,a=1242,s=952}\n", + "{x=1569,m=9,a=779,s=1744}\n", + "{x=454,m=751,a=1610,s=820}\n", + "{x=764,m=1526,a=319,s=1001}\n", + "{x=565,m=667,a=3092,s=133}\n", + "{x=717,m=127,a=2,s=1405}\n", + "{x=1484,m=340,a=1336,s=44}\n", + "{x=2043,m=256,a=1683,s=698}\n", + "{x=974,m=1247,a=1136,s=1947}\n", + "{x=1100,m=160,a=981,s=849}\n", + "{x=1433,m=2789,a=2062,s=11}\n", + "{x=1447,m=197,a=580,s=564}\n", + "{x=9,m=1277,a=1689,s=142}\n", + "{x=3014,m=1127,a=71,s=1035}\n", + "{x=2455,m=919,a=1403,s=1924}\n", + "{x=811,m=1025,a=373,s=1349}\n", + "{x=46,m=2453,a=991,s=1}\n", + "{x=1385,m=1299,a=225,s=1462}\n", + "{x=802,m=123,a=2922,s=2545}\n", + "{x=342,m=693,a=1722,s=1162}\n", + "{x=321,m=221,a=428,s=2130}\n", + "{x=3344,m=622,a=92,s=579}\n", + "{x=1349,m=1013,a=2894,s=1315}\n", + "{x=169,m=8,a=677,s=1053}\n", + "{x=1785,m=1334,a=1554,s=314}\n", + "{x=252,m=86,a=3588,s=1268}\n", + "{x=135,m=6,a=477,s=1356}\n", + "{x=75,m=3120,a=89,s=1078}\n", + "{x=2614,m=733,a=1553,s=1666}\n", + "{x=39,m=918,a=2810,s=2292}\n", + "{x=269,m=771,a=2312,s=996}\n", + "{x=1062,m=889,a=2333,s=1295}\n", + "{x=2178,m=1688,a=458,s=1039}\n", + "{x=45,m=148,a=1642,s=22}\n", + "{x=834,m=794,a=98,s=1313}\n", + "{x=972,m=863,a=877,s=731}\n", + "{x=2321,m=436,a=2342,s=874}\n", + "{x=96,m=647,a=297,s=901}\n", + "{x=822,m=710,a=600,s=1514}\n", + "{x=600,m=401,a=2863,s=683}\n", + "{x=1318,m=493,a=2953,s=595}\n", + "{x=1,m=327,a=1516,s=374}\n", + "{x=3193,m=1755,a=3006,s=872}\n", + "{x=1410,m=1798,a=1427,s=790}\n", + "{x=1526,m=831,a=69,s=777}\n", + "{x=1237,m=104,a=3914,s=412}\n", + "{x=36,m=415,a=79,s=2432}\n", + "{x=101,m=1571,a=17,s=788}\n", + "{x=3117,m=1449,a=163,s=309}\n", + "{x=517,m=1333,a=1122,s=336}\n", + "{x=2907,m=982,a=873,s=524}\n", + "{x=2907,m=1025,a=422,s=833}\n", + "{x=1111,m=1295,a=1088,s=1646}\n", + "{x=2188,m=1467,a=53,s=1973}\n", + "{x=34,m=3017,a=34,s=1428}\n", + "{x=240,m=3881,a=143,s=521}\n", + "{x=274,m=1911,a=31,s=1721}\n", + "{x=618,m=2495,a=1063,s=144}\n", + "{x=1000,m=478,a=944,s=2741}\n", + "{x=2445,m=132,a=4,s=809}\n", + "{x=1653,m=569,a=2011,s=608}\n", + "{x=827,m=1195,a=2518,s=504}\n", + "{x=401,m=711,a=905,s=777}\n", + "{x=1132,m=3298,a=1503,s=439}\n", + "{x=757,m=3640,a=1349,s=682}\n", + "{x=3850,m=164,a=1903,s=775}\n", + "{x=1285,m=662,a=454,s=561}\n", + "{x=216,m=161,a=172,s=183}\n", + "{x=1164,m=1043,a=1275,s=2226}\n", + "{x=2857,m=247,a=1301,s=31}\n", + "{x=855,m=1998,a=1484,s=1567}\n", + "{x=469,m=627,a=557,s=1481}\n", + "{x=2763,m=3064,a=1040,s=2434}\n", + "{x=2249,m=5,a=1411,s=279}\n", + "{x=454,m=3189,a=993,s=1560}\n", + "{x=140,m=1004,a=2119,s=898}\n", + "{x=1115,m=2195,a=259,s=510}\n", + "{x=343,m=2038,a=1527,s=1459}\n", + "{x=2066,m=899,a=675,s=2545}\n", + "{x=2436,m=923,a=608,s=342}\n", + "{x=100,m=42,a=1368,s=71}\n", + "{x=1477,m=153,a=2079,s=286}\n", + "{x=1838,m=1330,a=6,s=1383}\n", + "{x=1630,m=413,a=1027,s=631}\n", + "{x=247,m=651,a=49,s=347}\n", + "{x=409,m=467,a=1329,s=934}\n", + "{x=1367,m=1805,a=535,s=803}\n", + "{x=2157,m=2335,a=969,s=976}\n", + "{x=1778,m=1165,a=1341,s=89}\n", + "{x=162,m=1286,a=1595,s=491}\n", + "{x=1901,m=31,a=10,s=1900}\n", + "{x=102,m=1156,a=955,s=1226}\n", + "{x=138,m=256,a=1556,s=2215}\n", + "{x=2116,m=1849,a=83,s=1338}\n", + "{x=20,m=53,a=608,s=569}\n", + "{x=2861,m=369,a=1042,s=1528}\n", + "{x=194,m=10,a=964,s=297}\n", + "{x=2318,m=328,a=730,s=850}\n", + "{x=1958,m=2008,a=3122,s=1207}\n", + "{x=1221,m=2256,a=38,s=8}\n", + "{x=54,m=2430,a=53,s=936}\n", + "{x=1420,m=952,a=1419,s=59}\n", + "{x=1021,m=561,a=463,s=813}\n", + "{x=12,m=98,a=850,s=46}\n", + "{x=1155,m=1768,a=200,s=1668}\n", + "{x=140,m=1439,a=1916,s=193}\n", + "{x=754,m=397,a=23,s=314}\n", + "{x=1566,m=1054,a=1418,s=392}\n", + "{x=1482,m=1238,a=941,s=1459}\n", + "{x=491,m=551,a=1941,s=1376}\n", + "{x=1695,m=77,a=260,s=2519}\n", + "{x=144,m=204,a=45,s=334}\n", + "{x=351,m=412,a=2647,s=317}\n", + "{x=1176,m=2189,a=383,s=3006}\n", + "{x=298,m=1992,a=2519,s=1478}\n", + "{x=2,m=409,a=1668,s=95}\n", + "{x=38,m=871,a=2346,s=226}\n", + "{x=178,m=151,a=922,s=1006}\n", + "{x=271,m=717,a=498,s=26}\n", + "{x=704,m=1943,a=55,s=260}\n", + "{x=1281,m=1773,a=994,s=818}\n", + "{x=388,m=556,a=2899,s=455}\n", + "{x=2045,m=747,a=732,s=372}\n", + "{x=1,m=2749,a=109,s=852}\n", + "{x=402,m=2322,a=61,s=334}\n", + "{x=157,m=51,a=538,s=911}\n", + "{x=939,m=86,a=1732,s=228}\n", + "{x=55,m=742,a=1219,s=745}\n", + "{x=3336,m=2251,a=220,s=956}\n", + "{x=1194,m=289,a=1956,s=555}\n", + "{x=1639,m=120,a=423,s=315}\n", + "{x=1848,m=455,a=1014,s=1369}\n", + "{x=647,m=428,a=347,s=2516}\n", + "{x=95,m=1386,a=1425,s=1275}\n", + "{x=184,m=67,a=2116,s=440}\n", + "{x=311,m=740,a=2340,s=2521}\n", + "{x=410,m=579,a=575,s=2457}\n", + "{x=183,m=1462,a=540,s=31}\n", + "{x=2602,m=317,a=602,s=389}\n", + "{x=1202,m=34,a=67,s=284}\n", + "{x=609,m=929,a=112,s=2388}\n", + "{x=537,m=1214,a=315,s=2220}\n", + "{x=403,m=706,a=381,s=101}\n", + "{x=1990,m=14,a=3374,s=3250}\n", + "{x=1388,m=2477,a=694,s=489}\n", + "{x=307,m=76,a=414,s=119}\n", + "{x=22,m=1407,a=1937,s=377}\n", + "{x=1102,m=654,a=107,s=700}\n", + "{x=209,m=2473,a=3253,s=122}\n", + "{x=14,m=1115,a=926,s=642}\n", + "{x=1896,m=34,a=1674,s=321}\n", + "{x=1354,m=468,a=1001,s=1676}\n", + "{x=1097,m=2593,a=854,s=1015}\n", + "{x=520,m=1580,a=349,s=1897}\n", + "{x=1925,m=1372,a=3195,s=3561}\n", + "{x=326,m=172,a=829,s=233}\n", + "{x=1455,m=431,a=34,s=450}\n", + "{x=711,m=1946,a=1081,s=443}\n", + "{x=730,m=1041,a=3132,s=797}\n", + "{x=39,m=1887,a=878,s=910}\n", + "{x=1006,m=716,a=2966,s=39}\n", + "{x=239,m=2607,a=3282,s=133}\n", + "{x=1000,m=492,a=1097,s=673}\n", + "{x=134,m=912,a=41,s=147}\n", + "{x=1224,m=2150,a=116,s=1956}\n", + "{x=97,m=1096,a=3302,s=197}\n", + "{x=233,m=1029,a=1051,s=793}\n", + "{x=327,m=363,a=1155,s=428}\n", + "{x=680,m=478,a=3195,s=1672}\n", + "{x=696,m=878,a=2166,s=1045}\n", + "{x=518,m=244,a=944,s=1914}\n", + "{x=700,m=9,a=595,s=589}\n", + "{x=693,m=1652,a=1322,s=615}\n", + "{x=1613,m=781,a=1331,s=2268}\n", + "{x=2542,m=1739,a=2560,s=1474}\n", + "{x=970,m=1490,a=539,s=3847}\n", + "{x=203,m=119,a=511,s=1865}\n", + "{x=134,m=1484,a=165,s=1015}\n", + "{x=110,m=40,a=185,s=901}\n", + "{x=668,m=1023,a=497,s=518}\n", + "{x=795,m=1769,a=1478,s=577}\n", + "{x=482,m=112,a=329,s=2807}\n", + "{x=603,m=1999,a=548,s=1218}\n", + "{x=177,m=2294,a=1863,s=2}\n", + "{x=996,m=837,a=1121,s=1575}\n", + "{x=2244,m=2546,a=2166,s=97}\n", + "{x=335,m=2114,a=18,s=13}\n", + "{x=1683,m=281,a=256,s=373}\n", + "{x=1279,m=1367,a=702,s=786}\n", + "{x=153,m=226,a=646,s=623}\n", + "{x=124,m=4,a=63,s=2308}\n", + "{x=543,m=3722,a=156,s=150}\n", + "{x=117,m=403,a=779,s=831}\n", + "{x=15,m=1018,a=461,s=437}\n", + "{x=59,m=468,a=238,s=137}\n", + "{x=29,m=212,a=2308,s=68}\n", + "{x=662,m=244,a=2403,s=55}\n", + "\u001b[39m\n" + ] + } + ], "source": [ "d_name = \"d\" + str(DAY).zfill(2) # e.g. d01\n", "script_name = \"aoc\" + str(YEAR) + d_name # e.g. aoc2017d01\n", @@ -6608,7 +7408,7 @@ "try:\n", " write_puzzle_input_file(YEAR, DAY, locations)\n", " with open(locations.input_file, mode=\"rt\") as f:\n", - " input_data = f.read().splitlines()\n", + " input_data = f.read()\n", "\n", " logger.info(\"Input data:\\n%s\", top_and_tail(input_data))\n", "except ValueError as e:\n", @@ -6621,28 +7421,203 @@ "source": [ "### Day 19 Part 1\n", "\n", - "Overview..." + "The parts are being organised...\n", + "\n", + "- x: Extremely cool looking\n", + "- m: Musical (it makes a noise when you hit it)\n", + "- a: Aerodynamic\n", + "- s: Shiny\n", + "\n", + "Then the parts are sent through a series of named workflows. Each workflow has a list of rules which determine where the part goes, based on the first condition that is true.\n", + "\n", + "Sample input:\n", + "\n", + "```text\n", + "px{a<2006:qkq,m>2090:A,rfg}\n", + "pv{a>1716:R,A}\n", + "lnx{m>1548:A,A}\n", + "rfg{s<537:gd,x>2440:R,A}\n", + "qs{s>3448:A,lnx}\n", + "qkq{x<1416:A,crn}\n", + "crn{x>2662:A,R}\n", + "in{s<1351:px,qqz}\n", + "qqz{s>2770:qs,m<1801:hdj,R}\n", + "gd{a>3333:R,R}\n", + "hdj{m>838:A,pv}\n", + "\n", + "{x=787,m=2655,a=1222,s=2876}\n", + "{x=1679,m=44,a=2067,s=496}\n", + "{x=2036,m=264,a=79,s=2244}\n", + "{x=2461,m=1339,a=466,s=291}\n", + "{x=2127,m=1623,a=2188,s=1013}\n", + "```\n", + "\n", + "Here we have a list of workflows, then a list of part ratings. Parts always start with workflow `in`.\n", + "\n", + "- `A` = Accepted\n", + "- `R` = Rejected\n", + "\n", + "**Sort through all of the parts you've been given; what do you get if you add together all of the rating numbers for all of the parts that ultimately get accepted?**" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 128, "metadata": {}, "outputs": [], "source": [ - "def solve(data):\n", - " pass" + "@dataclass\n", + "class Workflow():\n", + " \"\"\" \n", + " A Workflow is a list of rules that we must apply to a part. \n", + " Each rule maps a condition to another workflow.\n", + " Rules are executed in order. \n", + " We determine the next available workflow based on the first rule that evaluates to True.\n", + " \"\"\"\n", + " name: str # e.g. \"in\", \"qqz\"\n", + " \n", + " # [ {condition: next_flow }, ...]\n", + " # For any given condition (if not True or False), the first operand is a part category, \n", + " # and the second operand is an int value\n", + " rules: list[tuple[str, str]] \n", + " \n", + " ops = {\n", + " \">\": operator.gt,\n", + " \"<\": operator.lt,\n", + " }\n", + "\n", + " @staticmethod\n", + " def parse_condition(condition):\n", + " \"\"\" Returns left_operand, operator, right_operand for a given condition \"\"\"\n", + " op = next(op for op in Workflow.ops if op in condition)\n", + " left_operand, right_operand = condition.split(op)\n", + " return left_operand, op, int(right_operand)\n", + " \n", + " def execute(self, part: dict):\n", + " \"\"\" Execute rules in order, for this part. Return the matching next workflow. \"\"\"\n", + " for condition, next_flow in self.rules:\n", + " if condition[0] in \"xmas\":\n", + " left, op, right = self.parse_condition(condition)\n", + " part_val = part[left]\n", + " res = Workflow.ops[op](part_val, right)\n", + " else:\n", + " res = True\n", + " \n", + " if res:\n", + " return next_flow\n", + " \n", + " assert False, \"At least one condition must be True\"" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 129, + "metadata": {}, + "outputs": [], + "source": [ + "def parse_input(data: str) -> tuple[dict[str,Workflow], list[dict[str,int]]]:\n", + " \"\"\" The input contains two blocks: workflows, and parts.\n", + " Parse the workflows into a dict of Workflow objects.\n", + " Parse the parts into a list of part dictionaries. \"\"\"\n", + " flow_lines, part_lines = [block.splitlines() for block in data.split(\"\\n\\n\")]\n", + " \n", + " workflows = {}\n", + " for flow_line in flow_lines:\n", + " flow_name, flow_rules = flow_line.split(\"{\")\n", + " flow_rules = flow_rules.strip(\"}\") # remove trailing }\n", + " flow_rules = [flow_rule for flow_rule in flow_rules.split(\",\")]\n", + " \n", + " new_rules = [] # Dua protocol\n", + " for rule in flow_rules:\n", + " if \":\" in rule:\n", + " new_rules.append(tuple(rule.split(\":\")))\n", + " else: # final condition is always true\n", + " new_rules.append((\"True\", rule))\n", + " \n", + " workflows[flow_name] = Workflow(flow_name, new_rules)\n", + " \n", + " parts = []\n", + " for part_line in part_lines:\n", + " part_line = part_line[1:-1] # strip off the leading and trailing brackets\n", + " components = part_line.split(\",\")\n", + " cat_vals = {}\n", + " for component in components:\n", + " cat, cat_val = component.split(\"=\")\n", + " cat_vals[cat] = int(cat_val)\n", + " \n", + " parts.append(cat_vals)\n", + " \n", + " return workflows, parts" + ] + }, + { + "cell_type": "code", + "execution_count": 130, "metadata": {}, "outputs": [], + "source": [ + "def solve_part1(data):\n", + " workflows, parts = parse_input(data)\n", + " \n", + " accepted:list[dict[str, int]] = []\n", + " for part in parts: \n", + " current_flow = workflows[\"in\"]\n", + " while True:\n", + " workflow_out = current_flow.execute(part)\n", + " if workflow_out in (\"A\", \"R\"):\n", + " if workflow_out == \"A\":\n", + " accepted.append(part)\n", + " break\n", + " \n", + " current_flow = workflows[workflow_out]\n", + " \n", + " return sum(sum(part.values()) for part in accepted)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 131, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[32m10:23:46.444:aoc2023 - INF: Tests passed!\u001b[39m\n", + "\u001b[32m10:23:46.471:aoc2023 - INF: Part 1 soln=367602\u001b[39m\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: total: 0 ns\n", + "Wall time: 28 ms\n" + ] + } + ], "source": [ "%%time\n", - "sample_inputs = [\"abcdef\"]\n", - "sample_answers = [\"uvwxyz\"]\n", + "sample_inputs = []\n", + "sample_inputs.append(\"\"\"px{a<2006:qkq,m>2090:A,rfg}\n", + "pv{a>1716:R,A}\n", + "lnx{m>1548:A,A}\n", + "rfg{s<537:gd,x>2440:R,A}\n", + "qs{s>3448:A,lnx}\n", + "qkq{x<1416:A,crn}\n", + "crn{x>2662:A,R}\n", + "in{s<1351:px,qqz}\n", + "qqz{s>2770:qs,m<1801:hdj,R}\n", + "gd{a>3333:R,R}\n", + "hdj{m>838:A,pv}\n", + "\n", + "{x=787,m=2655,a=1222,s=2876}\n", + "{x=1679,m=44,a=2067,s=496}\n", + "{x=2036,m=264,a=79,s=2244}\n", + "{x=2461,m=1339,a=466,s=291}\n", + "{x=2127,m=1623,a=2188,s=1013}\"\"\")\n", + "\n", + "sample_answers = [19114]\n", "\n", "for curr_input, curr_ans in zip(sample_inputs, sample_answers):\n", " validate(solve_part1(curr_input), curr_ans) # test with sample data\n", @@ -6659,28 +7634,122 @@ "source": [ "### Day 19 Part 2\n", "\n", - "Overview..." + "Rather than push parts through the workflows, we need to determine which combinations of category ratings will be accepted or rejected.\n", + "\n", + "Each category rating can have an int value from 1 to 4000 (inclusive).\n", + "\n", + "**Consider only your list of workflows; the list of part ratings that the Elves wanted you to sort is no longer relevant. How many distinct combinations of ratings will be accepted by the Elves' workflows?**\n", + "\n", + "**My solution:**\n", + "\n", + "- Start with \"in\".\n", + "- Recurse through all conditions, and determine which would result in \"R\".\n", + "- Where they do, exclude the conditions that led to this R.\n", + "- Let's build up a list of all the conditions that result in R." ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 189, "metadata": {}, "outputs": [], "source": [ - "def solve_part2(data):\n", - " pass" + "def count_ranges(ranges:dict[str, tuple[int,int]], workflow_name: str, workflows: dict[str, Workflow]) -> int:\n", + " \"\"\" Count total number of distinct accepted part ratings numbers.\n", + "\n", + " Args:\n", + " ranges (dict[str, tuple[int,int]]): Range for a given category, as (low, high) inclusive.\n", + " workflow_name (str): Name of a workflow.\n", + " workflows (dict[str, Workflow]): dictionary of all our workflows, keyed by name\n", + " \"\"\"\n", + " \n", + " # Base case\n", + " if workflow_name == \"R\": # rejected count\n", + " return 0\n", + " \n", + " if workflow_name == \"A\": # accepted count\n", + " # product of all the ranges\n", + " logger.debug(f\"{ranges}\")\n", + " return math.prod((high-low+1) for low, high in ranges.values())\n", + " \n", + " workflow = workflows[workflow_name]\n", + " total = 0\n", + " for condition, next_flow in workflow.rules: # process rules for this workflow\n", + " logger.debug(f\"{condition=}, {next_flow=}\")\n", + " if condition[0] in \"xmas\": # We need to split the range into two segments\n", + " cat, op, right_val = Workflow.parse_condition(condition) # e.g. a, <, 2006\n", + " low, high = ranges[cat] # current inclusive range for this category\n", + " \n", + " # split the current range based on this this condition\n", + " # E.g. with current range 1,4000:\n", + " # a<1716 means split into 1-1715 (true), 1716-4000 (false)\n", + " # a>1716 means split into 1-1716 (false), 1717-4000 (true)\n", + " \n", + " # True for condition: we're done with this workflow, so recurse to the next\n", + " true_for_condition = (low, right_val - 1) if op == \"<\" else (right_val + 1, high)\n", + " \n", + " # False for condition: we need to try the next rule in this workflow\n", + " false_for_condition = (right_val, high) if op == \"<\" else (low, right_val)\n", + " \n", + " # check if the condition splits are NOT empty\n", + " # First, check if true component non-empty. \n", + " # These will need to be processed by subseqauent rules.\n", + " if true_for_condition[0] <= true_for_condition[1]: \n", + " # for any True in this range, we're done with this workflow, so recurse to next workflow\n", + " ranges_copy = dict(ranges) # make a copy of ranges\n", + " ranges_copy[cat] = true_for_condition # pass through the new, true range\n", + " total += count_ranges(ranges_copy, next_flow, workflows) \n", + " \n", + " if false_for_condition[0] <= false_for_condition[1]: # false half non-empty\n", + " # for any False in this range, we need to move to the next rule in THIS workflow\n", + " ranges = dict(ranges) \n", + " ranges[cat] = false_for_condition # pass through the new, false range\n", + " else: # false half is empty, so nothing left to do in this workflow\n", + " break\n", + " else: # we're at the \"True\" rule in our workflow\n", + " assert condition == \"True\", \"We must be at the final condition.\"\n", + " total += count_ranges(ranges, next_flow, workflows)\n", + " \n", + " return total" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 187, "metadata": {}, "outputs": [], + "source": [ + "def solve_part2(data):\n", + " workflows, _ = parse_input(data)\n", + " \n", + " ranges = { cat: (1, 4000) for cat in \"xmas\" }\n", + " logger.debug(ranges)\n", + " accepted = count_ranges(ranges, workflow_name=\"in\", workflows=workflows)\n", + " \n", + " return accepted" + ] + }, + { + "cell_type": "code", + "execution_count": 190, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\u001b[34m13:33:03.997:aoc2023 - DBG: {'x': (1, 4000), 'm': (1, 4000), 'a': (1, 4000), 's': (1, 4000)}\u001b[39m\n", + "\u001b[34m13:33:07.727:aoc2023 - DBG: condition='s<1351', next_flow='px'\u001b[39m\n", + "\u001b[34m13:33:07.728:aoc2023 - DBG: condition='a<2006', next_flow='qkq'\u001b[39m\n", + "\u001b[34m13:33:07.730:aoc2023 - DBG: condition='x<1416', next_flow='A'\u001b[39m\n", + "\u001b[34m13:33:07.730:aoc2023 - DBG: {'x': (1, 1415), 'm': (1, 4000), 'a': (1, 2005), 's': (1, 1350)}\u001b[39m\n", + "\u001b[34m13:33:07.731:aoc2023 - DBG: condition='True', next_flow='crn'\u001b[39m\n" + ] + } + ], "source": [ "%%time\n", - "sample_inputs = [\"abcdef\"]\n", - "sample_answers = [\"uvwxyz\"]\n", + "sample_answers = [167409079868000]\n", "\n", "for curr_input, curr_ans in zip(sample_inputs, sample_answers):\n", " validate(solve_part2(curr_input), curr_ans) # test with sample data\n", diff --git a/src/AoC_2023/d19/input/input.txt b/src/AoC_2023/d19/input/input.txt new file mode 100644 index 0000000000000000000000000000000000000000..7b68bf2d2a857b5fed8cb432da1765de588a7eca GIT binary patch literal 21599 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 literal 0 HcmV?d00001