From 34ac3971f0735c019e975107d1a042a266e951d0 Mon Sep 17 00:00:00 2001 From: geekiot Date: Mon, 1 Dec 2025 21:11:36 +0500 Subject: [PATCH] Add: add solutions for first day --- python/src/1-day/README.md | 101 + python/src/1-day/input.txt | 4042 +++++++++++++++++++++++++++++++ python/src/1-day/solution1.py | 10 + python/src/1-day/solution2.py | 31 + python/src/1-day/test_input.txt | 10 + 5 files changed, 4194 insertions(+) create mode 100644 python/src/1-day/README.md create mode 100644 python/src/1-day/input.txt create mode 100644 python/src/1-day/solution1.py create mode 100644 python/src/1-day/solution2.py create mode 100644 python/src/1-day/test_input.txt diff --git a/python/src/1-day/README.md b/python/src/1-day/README.md new file mode 100644 index 0000000..d18ea41 --- /dev/null +++ b/python/src/1-day/README.md @@ -0,0 +1,101 @@ +# День 1: Секретный вход + +## Вступление + +* У эльфов есть хорошие и плохие новости. + +* Хорошая новость заключается в том, что они открыли для себя проектный менеджмент! Это дало им инструменты, необходимые для предотвращения обычной рождественской чрезвычайной ситуации. Например, теперь они знают, что украшения Северного полюса нужно закончить в ближайшее время, чтобы другие важные задачи могли начаться вовремя. + +* Плохая новость заключается в том, что они поняли, что у них есть другая чрезвычайная ситуация: согласно их плану использования ресурсов, ни у кого из них не осталось времени на украшение Северного полюса! + +* Чтобы спасти Рождество, эльфам нужно, чтобы вы закончили украшать Северный полюс до 12 декабря. + +* Собирайте звезды, решая головоломки. Каждый день будет доступно две головоломки; вторая головоломка открывается после того, как вы решите первую. За каждую головоломку вы получаете одну звезду. Удачи! + +## Первая часть + +### Описание задачи + +* Вы прибываете к секретному входу в базу на Северном полюсе, готовые приступить к украшению. К сожалению, пароль, похоже, был изменен, и вы не можете войти. Документ, приклеенный к стене, объясняет: + +* «В связи с новыми протоколами безопасности пароль заблокирован в сейфе внизу. Новую комбинацию см. в приложенном документе». + +* На сейфе есть циферблат, на котором находится только стрелка; вокруг циферблата расположены цифры от 0 до 99 в порядке возрастания. Когда вы поворачиваете циферблат, он издает небольшой щелчок при достижении каждой цифры. + +* Прилагаемый документ (ваша входная информация для головоломки) содержит последовательность поворотов, по одному на строку, которые подсказывают, как открыть сейф. Поворот начинается с буквы L или R, которая указывает, должен ли поворот быть влево (к меньшим числам) или вправо (к большим числам). Затем следует значение расстояния, которое указывает, на сколько щелчков следует повернуть циферблат в этом направлении. + +* Таким образом, если циферблат указывает на 11, поворот R8 приведет к тому, что циферблат укажет на 19. После этого поворот L19 приведет к тому, что он укажет на 0. + +* Поскольку циферблат представляет собой круг, поворот циферблата влево от 0 на один щелчок приводит к тому, что он укажет на 99. Аналогично, поворот циферблата вправо от 99 на один щелчок приводит к тому, что он укажет на 0. + +* Таким образом, если циферблат указывает на 5, поворот L10 приведет к тому, что он укажет на 95. После этого поворот R5 приведет к тому, что он укажет на 0. + +* Циферблат начинает с указания на 50. + +* Вы могли бы следовать инструкциям, но недавний обязательный официальный семинар по безопасности секретного входа на Северный полюс научил вас, что сейф на самом деле является ловушкой. Настоящий пароль — это количество раз, когда циферблат остается на отметке 0 после любого поворота в последовательности. + if test_step < 0: + total_zero_cnt += abs(test_step) // 100 + 1 + elif test_step == 0: + total_zero_cnt += 1 + +* Например, предположим, что в приложенном документе содержатся следующие повороты: + +``` +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82 +``` + +* После выполнения этих поворотов стрелка будет двигаться следующим образом: + +``` + Стрелка начинает движение, указывая на 50. + Стрелка поворачивается на L68, указывая на 82. + Стрелка поворачивается на L30, указывая на 52. + Стрелка поворачивается на R48, указывая на 0. + Стрелка поворачивается на L5, указывая на 95. + Циферблат поворачивается на R60, чтобы указать на 55. + Циферблат поворачивается на L55, чтобы указать на 0. + Циферблат поворачивается на L1, чтобы указать на 99. + Циферблат поворачивается на L99, чтобы указать на 0. + Циферблат поворачивается на R14, чтобы указать на 14. + Циферблат поворачивается на L82, чтобы указать на 32. +``` + +* Поскольку в ходе этого процесса стрелка указывает на 0 в общей сложности три раза, пароль в этом примере равен 3. + +* Проанализируйте повороты в приложенном документе. Каков фактический пароль для открытия двери? + +### Решение + +1. Начинаем с `current_step = 50` и `total_zero_cnt = 0`. +2. Последовательно получаем каждый шаг из документа. +3. Преобразуем `L` в `-`, а `R` в `+` для числа. +4. Прибавляем полученное число к `current_step` +5. Находим остаток `current_step` при делении на 100. +6. Если `current_step` равен 0, то прибавляем 1 к `total_zero_cnt` + +### Ответ + + `969` + +## Вторая часть + +### Описание задачи + +* Правила поменялись, теперь пароль - кол-во раз, когда циферблат щелкает на 0. + +### Решение + +* Всё описано в коде `solution2.py` + +### Ответ + + `5887` diff --git a/python/src/1-day/input.txt b/python/src/1-day/input.txt new file mode 100644 index 0000000..0b0e7fe --- /dev/null +++ b/python/src/1-day/input.txt @@ -0,0 +1,4042 @@ +R29 +L3 +L46 +L25 +L38 +R43 +L20 +R9 +L6 +L47 +L39 +R29 +R8 +R11 +L20 +L10 +L46 +L21 +R30 +L6 +L21 +L5 +R42 +R9 +L28 +R30 +L37 +R18 +R10 +L8 +R21 +R1 +R1 +L20 +L23 +R38 +R37 +L40 +R42 +R12 +L21 +R4 +L22 +R29 +R15 +R38 +L32 +L25 +L30 +L48 +R12 +R62 +R72 +L86 +L55 +L74 +R21 +R73 +L7 +L6 +R19 +L87 +L97 +L44 +R54 +R74 +R12 +R24 +R61 +L90 +R93 +R88 +L71 +L11 +R96 +L66 +R43 +L79 +R74 +R26 +R48 +L55 +R7 +R31 +L76 +R45 +R30 +R63 +L93 +R37 +L37 +L32 +L68 +L10 +L6 +L53 +L71 +R40 +R45 +R55 +R60 +R40 +L114 +L86 +L36 +L64 +R91 +L91 +L53 +R84 +L851 +L871 +R43 +R52 +L4 +R73 +L60 +L827 +R14 +L63 +R45 +L482 +L40 +L437 +L20 +L967 +R78 +L14 +L98 +L2 +R6 +R30 +L36 +R80 +R12 +L86 +L170 +L4 +R268 +L660 +L74 +R784 +L39 +L11 +R56 +R44 +R928 +R999 +L27 +R75 +L75 +R798 +L89 +R91 +R80 +L536 +R56 +R58 +R65 +R83 +R38 +R39 +L25 +R42 +L58 +L66 +R24 +L10 +L90 +L61 +R35 +L82 +R37 +R743 +L72 +L635 +R635 +L465 +L44 +L96 +R97 +R63 +L55 +R46 +L75 +L27 +L644 +L77 +L47 +L359 +L82 +R41 +R54 +R50 +L306 +R85 +R852 +R89 +L37 +L363 +R792 +R8 +L805 +R70 +R89 +L92 +R381 +L43 +R23 +L23 +R3 +R97 +L567 +R15 +L48 +R87 +R16 +R397 +R54 +R46 +L63 +L65 +L76 +L96 +R564 +R30 +L60 +R403 +R10 +R506 +R5 +R42 +R5 +L73 +L32 +L81 +R71 +R218 +R46 +L934 +R79 +L99 +L323 +R66 +L56 +R51 +R91 +L91 +R62 +R25 +R49 +L74 +R52 +R548 +R90 +R13 +L3 +L94 +L906 +R11 +L63 +R7 +L40 +L72 +L43 +R15 +L24 +L62 +R84 +R87 +R830 +R16 +L3 +R73 +R84 +L73 +L94 +L70 +R37 +L231 +R31 +R33 +R43 +L6 +L770 +L19 +R974 +L955 +R33 +R67 +L41 +L51 +R92 +L86 +R28 +L42 +R71 +L10 +L39 +L76 +R97 +R74 +L517 +L58 +L8 +L34 +R840 +L40 +L93 +R85 +R8 +R48 +L38 +L9 +R24 +L65 +R40 +L125 +L670 +R70 +L775 +R724 +R76 +L44 +R90 +L46 +L29 +L71 +L67 +L399 +R94 +L28 +R120 +L96 +R76 +L13 +R113 +R20 +L76 +L44 +L4 +R492 +L588 +L64 +L55 +R12 +R16 +L505 +L92 +R219 +R69 +R51 +L51 +R72 +L43 +L678 +R64 +R73 +R18 +R21 +L27 +R845 +R64 +R75 +L61 +R22 +L945 +R5 +R14 +R29 +R8 +R44 +L96 +L4 +L56 +L90 +L93 +R47 +R92 +R97 +L858 +L91 +L955 +R7 +R96 +R98 +R12 +R68 +R49 +R77 +R46 +L47 +L928 +L53 +R82 +R54 +L93 +L633 +L88 +R4 +R56 +L92 +L8 +R73 +L23 +R95 +R490 +R234 +R59 +L79 +L81 +L6 +L21 +R59 +L902 +L44 +R46 +R94 +R11 +L879 +R12 +R90 +L37 +L91 +R26 +R74 +R46 +L18 +L67 +R939 +R63 +R346 +L9 +L2 +L98 +L28 +L72 +R89 +R14 +L403 +R2 +R63 +L67 +L298 +R17 +R283 +L50 +R50 +L59 +L19 +L65 +L68 +L89 +R1 +L1 +L852 +L1 +R653 +L25 +L95 +L66 +L94 +R61 +R60 +R52 +L93 +L16 +L51 +R11 +L2 +R958 +R48 +R57 +L31 +L857 +R83 +R387 +L232 +R38 +L64 +L795 +R11 +L34 +L72 +R18 +R41 +L98 +L45 +L55 +L70 +R847 +L377 +L76 +R76 +L862 +R43 +R21 +L2 +L50 +L14 +R85 +R35 +R44 +L69 +R59 +L48 +L186 +L653 +L96 +L7 +L97 +L24 +L15 +L64 +L52 +L83 +R35 +L42 +R42 +R62 +L40 +L22 +R9 +L9 +L558 +R574 +L16 +R24 +L48 +L264 +L12 +L304 +R5 +R99 +L61 +L18 +L97 +R76 +L51 +L51 +L27 +R29 +R50 +R27 +R923 +L29 +L571 +L54 +L81 +L65 +R40 +L40 +R53 +R47 +L171 +L363 +L66 +L24 +L90 +R14 +R30 +L30 +L22 +R115 +R33 +L50 +R24 +L91 +R968 +R52 +R71 +R1 +L84 +L17 +L46 +L54 +L31 +R31 +R59 +R81 +L40 +L93 +L7 +L88 +L905 +R93 +R18 +L120 +R90 +L88 +R43 +L27 +R6 +R95 +L35 +R918 +R53 +R97 +L25 +R34 +L72 +L64 +R77 +L48 +L52 +L58 +L2 +R14 +R46 +R65 +R67 +L32 +R739 +L78 +R39 +L53 +L10 +L892 +R91 +L36 +R88 +L546 +R65 +L7 +L42 +L44 +L842 +L6 +R34 +L91 +R7 +L65 +L30 +R93 +L914 +L3 +L123 +L920 +R49 +L24 +L79 +L28 +L72 +R11 +L90 +L64 +L8 +L93 +R44 +R67 +L55 +L643 +L687 +R691 +R65 +R2 +L82 +L273 +R715 +R5 +L5 +R573 +R79 +R94 +L552 +R571 +R53 +R65 +R17 +L88 +R64 +R924 +L281 +L683 +L311 +L82 +L43 +R53 +L72 +R49 +R70 +R59 +R398 +L40 +R83 +R77 +L77 +L17 +R117 +R14 +L97 +R83 +L868 +L72 +L60 +L35 +R225 +R573 +R42 +L5 +L62 +R55 +R63 +L50 +L6 +R93 +L56 +R63 +L271 +L29 +L30 +R67 +L9 +R8 +R384 +R41 +L52 +R964 +L694 +L262 +L50 +R37 +R96 +L649 +L76 +R25 +L212 +L5 +R84 +L7 +R55 +R85 +R36 +L36 +L407 +L93 +L88 +L77 +L74 +R39 +R38 +L38 +R97 +L79 +R82 +L96 +L4 +R490 +L92 +R230 +R570 +R2 +R31 +R90 +L21 +R625 +R67 +L52 +L40 +R3 +L3 +R10 +L10 +L68 +R68 +L84 +L62 +L98 +L76 +R85 +R30 +R353 +R59 +L30 +L77 +L765 +L35 +R208 +L83 +L25 +L15 +L85 +L53 +R53 +R94 +R106 +R188 +R712 +R95 +R5 +L781 +R73 +R34 +R22 +L20 +R72 +R267 +L67 +R27 +L761 +L1 +R35 +R417 +R83 +L65 +R66 +L74 +R73 +L51 +R70 +R15 +L34 +L492 +R61 +L57 +L12 +L29 +R94 +R55 +L95 +R75 +R51 +R78 +L775 +L34 +L20 +R88 +L88 +R54 +L979 +L873 +R90 +R17 +R45 +L31 +L23 +R17 +R683 +L52 +R454 +L12 +L92 +R45 +R91 +R84 +R34 +L93 +L47 +L13 +R83 +L215 +R27 +L77 +L17 +R66 +R91 +R587 +L778 +R34 +R37 +L25 +R427 +L37 +L84 +L19 +R46 +R682 +L23 +L76 +L41 +L69 +R3 +L456 +R674 +R27 +R21 +R313 +R46 +R99 +L3 +L78 +L64 +L65 +R265 +L21 +L23 +R72 +R38 +L73 +L122 +R23 +L6 +L80 +L208 +R266 +R126 +L92 +R57 +L873 +L84 +L1 +L53 +L46 +R46 +L46 +R40 +L9 +R27 +L2 +L56 +L84 +R84 +R540 +R79 +L24 +R757 +R871 +L36 +L39 +L79 +R31 +R67 +L280 +L135 +R42 +R6 +R20 +L80 +R30 +L960 +L78 +R24 +L56 +L91 +L9 +L94 +R76 +R18 +L3 +R57 +R80 +R30 +R83 +R53 +R91 +L50 +R59 +L54 +L76 +L80 +L71 +R81 +L74 +R82 +L708 +R633 +L33 +L27 +R21 +L94 +L41 +L59 +R32 +R10 +R58 +L611 +R10 +R97 +L236 +R740 +L87 +R15 +L78 +R15 +R35 +R48 +L685 +R26 +L51 +L14 +L58 +R12 +R76 +R58 +R78 +L65 +R77 +R67 +L297 +L72 +R23 +R844 +R33 +R8 +R92 +R5 +L5 +L35 +R35 +L99 +L879 +L5 +L317 +L39 +L61 +R2 +R598 +R30 +L53 +L62 +L115 +L31 +R31 +R32 +R36 +R133 +L836 +R6 +R124 +R5 +R32 +R93 +L5 +L920 +R87 +R75 +R19 +R76 +R672 +L58 +R29 +L6 +R563 +R45 +R39 +R50 +R32 +R58 +L90 +R9 +L40 +R40 +L99 +L1 +L28 +L97 +L420 +R445 +L95 +R4 +L23 +L86 +L76 +R95 +L30 +L302 +R241 +R24 +R47 +L699 +R11 +R74 +L863 +L91 +R769 +L99 +L101 +L60 +L64 +R29 +R188 +R38 +L31 +R40 +L230 +R90 +R582 +L49 +L42 +R709 +L57 +L5 +L95 +L99 +R456 +R27 +R173 +R12 +R88 +R5 +L756 +L49 +R90 +R10 +R8 +R92 +R60 +R40 +R41 +L45 +R270 +L9 +R11 +L3 +L65 +R47 +R53 +R16 +L72 +R72 +L76 +L52 +R12 +L78 +R51 +L73 +L45 +L87 +L68 +R1 +L8 +R46 +L43 +L96 +L44 +L67 +R94 +L5 +R22 +L26 +R453 +R973 +L58 +L53 +L20 +L69 +R54 +R54 +R92 +R504 +R96 +L30 +L70 +R87 +L26 +R539 +L82 +R82 +R88 +L40 +R61 +L478 +R69 +L20 +R643 +R52 +L14 +L61 +L512 +L54 +R866 +L5 +R205 +L78 +R61 +L83 +R939 +L4 +L35 +R68 +R32 +L8 +L33 +R458 +R5 +R20 +L363 +R926 +L1 +L52 +L23 +R83 +R511 +L925 +R2 +L36 +R36 +R22 +L732 +L71 +R30 +R851 +R54 +L85 +L237 +R18 +R50 +L63 +R63 +L97 +L732 +R29 +R72 +L20 +L55 +L4 +R7 +R5 +L33 +R911 +L20 +L70 +R7 +R426 +R637 +R53 +R23 +L42 +R703 +L35 +L2 +R442 +L5 +L41 +L25 +L34 +L353 +R95 +L42 +R52 +R702 +R746 +R319 +L46 +R4 +L886 +L769 +L86 +R48 +R16 +L667 +R375 +R76 +L80 +L504 +R33 +L902 +L31 +R91 +R31 +R47 +R31 +R12 +R27 +L54 +L53 +L32 +L98 +L2 +L41 +L17 +L42 +L79 +L62 +R43 +L16 +L12 +R92 +L65 +L820 +R26 +R38 +R855 +R31 +L31 +R63 +L853 +R90 +L29 +R62 +R67 +R89 +R95 +R16 +R53 +L53 +L74 +R537 +R37 +L64 +R51 +L3 +R1 +L85 +R81 +R31 +R988 +L875 +L3 +R35 +L31 +L26 +R22 +R78 +R84 +R216 +L71 +L29 +R84 +L31 +L43 +L71 +L63 +L41 +R895 +R70 +L40 +L47 +R56 +R4 +L73 +R57 +R71 +R65 +R48 +L8 +R87 +R37 +R198 +L55 +L264 +L26 +L45 +R877 +R58 +L88 +L473 +L45 +L66 +R72 +R1 +L87 +R86 +R16 +L16 +R77 +R94 +R29 +L78 +R578 +L13 +L771 +L19 +R3 +R37 +L41 +R75 +L771 +R595 +L16 +L79 +L22 +R84 +R63 +L997 +L328 +R3 +L30 +L85 +R57 +L45 +L37 +L863 +L476 +L46 +L257 +R99 +L90 +L490 +R60 +R196 +L38 +R747 +L78 +R86 +R487 +R29 +L29 +R74 +L74 +L75 +L83 +R58 +R31 +R49 +L80 +L93 +R893 +L76 +L75 +R374 +L28 +R5 +R98 +R2 +L27 +R37 +R90 +L91 +R11 +R80 +L71 +R654 +L383 +R24 +R76 +L226 +R526 +L841 +L447 +L12 +L216 +R16 +R98 +R77 +L75 +R152 +L52 +L83 +L525 +R90 +L13 +L769 +R14 +L14 +R4 +L4 +R9 +R366 +R825 +L24 +L76 +L48 +L78 +L128 +L63 +R17 +L24 +L76 +L75 +L88 +L94 +L131 +L25 +R68 +R34 +R15 +L14 +R42 +R68 +R104 +L41 +L763 +R953 +L549 +L96 +L19 +L24 +L66 +L73 +L3 +R36 +R99 +R81 +L895 +R90 +R27 +L61 +R39 +L4 +L60 +L112 +R959 +L449 +R58 +R75 +R4 +R38 +L94 +R179 +R615 +R1 +R49 +R902 +L70 +R40 +R42 +R88 +R87 +R76 +R76 +L39 +L122 +L41 +R499 +L136 +L85 +L8 +L7 +R118 +R91 +R215 +R99 +R287 +R90 +L51 +R551 +R80 +R77 +R92 +L70 +L79 +R70 +L858 +R92 +L5 +L329 +R372 +L78 +L64 +R71 +L57 +L47 +R119 +R71 +R243 +L73 +R473 +L844 +L56 +R85 +L85 +R824 +L61 +R912 +L48 +R75 +L95 +R70 +L43 +R954 +L622 +L66 +R358 +L45 +R866 +L979 +L93 +L25 +L17 +L65 +R77 +R52 +R940 +R31 +L62 +L38 +R70 +R30 +R39 +R62 +R99 +L10 +L42 +R45 +R795 +L88 +R43 +L2 +R59 +R98 +R807 +R95 +L193 +L98 +R91 +L54 +L76 +R349 +L710 +R72 +R146 +R81 +R39 +L47 +L33 +L37 +R70 +R49 +R20 +R206 +L75 +R53 +R47 +L87 +L13 +R81 +L81 +R16 +R65 +L136 +L65 +L31 +L56 +R7 +R61 +R93 +L17 +R36 +L43 +R73 +L1 +L10 +R8 +L72 +R672 +R86 +R62 +L48 +R18 +R864 +L82 +L21 +R49 +R760 +R12 +L2 +L98 +L59 +L59 +L68 +L38 +R62 +R748 +R73 +L59 +L49 +L99 +R48 +L75 +R75 +R82 +R50 +L32 +L17 +L97 +R14 +R16 +R89 +R35 +L673 +L79 +R12 +L12 +L97 +R48 +L47 +L51 +L30 +L86 +L25 +L15 +L740 +R60 +L32 +L925 +R52 +R610 +L40 +R11 +L81 +L72 +L28 +L18 +L80 +R98 +L6 +R6 +R18 +L27 +R61 +R48 +R431 +R51 +R18 +R66 +R70 +R24 +L286 +R12 +L65 +L73 +L8 +L40 +R85 +L85 +L171 +R38 +L53 +R4 +R82 +R308 +R89 +L97 +R48 +L48 +L40 +L260 +L31 +R893 +R77 +R89 +L4 +R76 +L16 +R16 +R874 +L42 +L20 +R933 +L418 +R75 +L462 +R33 +L96 +R23 +R74 +R39 +L13 +R382 +R198 +R87 +R82 +R51 +R2 +R66 +L68 +R63 +R837 +R48 +L48 +L53 +L97 +L50 +R832 +L532 +L10 +L42 +R52 +L13 +R23 +R90 +R98 +R21 +L23 +L11 +L20 +R98 +L63 +L717 +R30 +L205 +L15 +R79 +R728 +R2 +L2 +L42 +R11 +L10 +L59 +R42 +R58 +R81 +R82 +R167 +R92 +L8 +R11 +L25 +L84 +R73 +L889 +R14 +L8 +L6 +L71 +R47 +R45 +L221 +R21 +R572 +L3 +R50 +L92 +L99 +R51 +L23 +R6 +L83 +R64 +L82 +L88 +R13 +R89 +R4 +R52 +L70 +R18 +L75 +R26 +R76 +L27 +R8 +L8 +L7 +R18 +R78 +L24 +R35 +L55 +L25 +R80 +L2 +L4 +R6 +R951 +R23 +R68 +L35 +L7 +L65 +L56 +L17 +L760 +L76 +L14 +R63 +L67 +L8 +R68 +L88 +R20 +R21 +R77 +L501 +L97 +L64 +R76 +R40 +L51 +L34 +R39 +R914 +R727 +R14 +R839 +R850 +L50 +L482 +R82 +L3 +R33 +L30 +L568 +R33 +R334 +L47 +L39 +R587 +R98 +L17 +R319 +L39 +R59 +R65 +L19 +L77 +L789 +R517 +L13 +R96 +R972 +L2 +L70 +L61 +L32 +R93 +R16 +R45 +R31 +R8 +R54 +L54 +L96 +L24 +R620 +R11 +R71 +R86 +L376 +R91 +R14 +L97 +R30 +L22 +R5 +L14 +R85 +L56 +L37 +L91 +R18 +R61 +R77 +L56 +L70 +L37 +R73 +R4 +L2 +R32 +L152 +L90 +R9 +L57 +L210 +L780 +R80 +L89 +R22 +R61 +L194 +L93 +L507 +R91 +L85 +L806 +L67 +L66 +L67 +L751 +L49 +R98 +L61 +L737 +L930 +L90 +R18 +L90 +L90 +L118 +L22 +L78 +L71 +L9 +R90 +R90 +R83 +R217 +L71 +L29 +R998 +L342 +L1 +L16 +L9 +L530 +L70 +R948 +R26 +L4 +L22 +L815 +R30 +R7 +L87 +R9 +R27 +L389 +R40 +R62 +R38 +R59 +L73 +L6 +L80 +L43 +R9 +R34 +L676 +L32 +R8 +R68 +L70 +L98 +L58 +L88 +L36 +L363 +R94 +R51 +L78 +L85 +L90 +R853 +R899 +L99 +R42 +L52 +L90 +R40 +R365 +L552 +R35 +R12 +L5 +L95 +R33 +R21 +L45 +R97 +R22 +R982 +L67 +R46 +L89 +L91 +L809 +L70 +L26 +R84 +L94 +L61 +L33 +L885 +L15 +L421 +L2 +R81 +L913 +R66 +L69 +R13 +R51 +L6 +R47 +R6 +L153 +R958 +R655 +L55 +R80 +L56 +R369 +R963 +L669 +R98 +R57 +L54 +R50 +R4 +L13 +L1 +R71 +L83 +R78 +L3 +L750 +L34 +L40 +R13 +L38 +R91 +L91 +L4 +L89 +L102 +R64 +L136 +L52 +R32 +R87 +R60 +R127 +R3 +L10 +L80 +L72 +R85 +L613 +L55 +R2 +R2 +R99 +L48 +L92 +L579 +R73 +L2 +L75 +R92 +L17 +L192 +L8 +R68 +L68 +R14 +R455 +L47 +L56 +L66 +L31 +R79 +L348 +L10 +L90 +L50 +L318 +L92 +L367 +L79 +R46 +L51 +L879 +L10 +L64 +L18 +R2 +L20 +R775 +R12 +R8 +R52 +R868 +L24 +R21 +R69 +L81 +R43 +R852 +R5 +R50 +R550 +R25 +R75 +L73 +R60 +R22 +R5 +R78 +R97 +L42 +L25 +R409 +L828 +L85 +R7 +L43 +R780 +R450 +L512 +L172 +R18 +L546 +L340 +R40 +L574 +L94 +L32 +R13 +L72 +L41 +L54 +L52 +L88 +L86 +L20 +L879 +L21 +L74 +R9 +R984 +R84 +L83 +R34 +L474 +L80 +R78 +L278 +L55 +R58 +R92 +R905 +L4 +R4 +L69 +L31 +R22 +R82 +R81 +R62 +L47 +L91 +L11 +L98 +L7 +L77 +L997 +L40 +R859 +R62 +L93 +R93 +L32 +R70 +R62 +L318 +R83 +R36 +L52 +L3 +L46 +L41 +R17 +L776 +R33 +R67 +L57 +R99 +L142 +L96 +L304 +R87 +L687 +R286 +R14 +L67 +L33 +L60 +L7 +L13 +L20 +R343 +R357 +R85 +R67 +R825 +R16 +R4 +L263 +R470 +L90 +L21 +L589 +L74 +R70 +R11 +L39 +L10 +L42 +L18 +L2 +R72 +L82 +R10 +R86 +R23 +L54 +R12 +R23 +R80 +R58 +L28 +L16 +R68 +R797 +R73 +L22 +R41 +L34 +L30 +L77 +R893 +L25 +L642 +R94 +L38 +R62 +R56 +L538 +R38 +R7 +L391 +R287 +L4 +R57 +L385 +R77 +R27 +L73 +L2 +R98 +R2 +L605 +L95 +L48 +L1 +R53 +R63 +L52 +L15 +L75 +L725 +R47 +L47 +R45 +R248 +R7 +R75 +R20 +L71 +L58 +L66 +R80 +L89 +R31 +L50 +L72 +R760 +L97 +R19 +R27 +L9 +L73 +L27 +L36 +R94 +R33 +L61 +L80 +R50 +L763 +L51 +L77 +R40 +L82 +L39 +L38 +R442 +L36 +R45 +L88 +R21 +L86 +R33 +L887 +R90 +R18 +L14 +L532 +R74 +R92 +R38 +L30 +L32 +R131 +R31 +L370 +L23 +L40 +L45 +L91 +R67 +R51 +L24 +L25 +R70 +L70 +L95 +R70 +L75 +R67 +L99 +R2 +L2 +L55 +R51 +L180 +L584 +L8 +R925 +R48 +R35 +R87 +R27 +R17 +R75 +L6 +L440 +L240 +R80 +R9 +R15 +R1 +L56 +R31 +L59 +R59 +L98 +L2 +L63 +L62 +L75 +L92 +L98 +L383 +L21 +R30 +R164 +L88 +L37 +L75 +L37 +L63 +L96 +R66 +L84 +L57 +R920 +R7 +R376 +L32 +L87 +L13 +R360 +R17 +R48 +L96 +L82 +L43 +L92 +R788 +L30 +L70 +R51 +R71 +R94 +R49 +L565 +L41 +R99 +L157 +R15 +R84 +R48 +R52 +R21 +L21 +L392 +R492 +R18 +L73 +L40 +R95 +R19 +L19 +R58 +L58 +R6 +L52 +L35 +L719 +R92 +L118 +L431 +L69 +R90 +L15 +R578 +R86 +L76 +R45 +R11 +R7 +L5 +L64 +L28 +R53 +L17 +L39 +R64 +R36 +R78 +L33 +L34 +R87 +R42 +R59 +L724 +R41 +R26 +R58 +L55 +L445 +L74 +L126 +R470 +R69 +R61 +R48 +L48 +L98 +R37 +L439 +R477 +L77 +R162 +R9 +L971 +R19 +R83 +R342 +L37 +R12 +L97 +R53 +R25 +R86 +L22 +L64 +L13 +R29 +L16 +L41 +R429 +L511 +R868 +L275 +R660 +L19 +L16 +L495 +R52 +L41 +R27 +R182 +L128 +L60 +R501 +L12 +L95 +L26 +R11 +L98 +L67 +L46 +R37 +R563 +L648 +L39 +L68 +R10 +L52 +L70 +R82 +L15 +L3 +R16 +L8 +R95 +R101 +R56 +L31 +R62 +R50 +L38 +R23 +R377 +L36 +R17 +R69 +L550 +R516 +L28 +L88 +R85 +L4 +L662 +L84 +R65 +L77 +L980 +L270 +L228 +R31 +L56 +R80 +L7 +R549 +L34 +L22 +R51 +L593 +L44 +L25 +R60 +R13 +R13 +L61 +L86 +L65 +R6 +L846 +L91 +L18 +R73 +R27 +L99 +R8 +R91 +R331 +L10 +L521 +R94 +R6 +L26 +L24 +R55 +R17 +L22 +L12 +R84 +L57 +L2 +L13 +L23 +L433 +R26 +L870 +R96 +R4 +R630 +R46 +L52 +R52 +L92 +L65 +L59 +R94 +R62 +L16 +R14 +R71 +R28 +L33 +L76 +R496 +L382 +R82 +R47 +R53 +L85 +R24 +R4 +L943 +L24 +L76 +R420 +R92 +L1 +L101 +L997 +R97 +L10 +R64 +L81 +L83 +R76 +L88 +R65 +L89 +R36 +R299 +R63 +R538 +R768 +R27 +R36 +R8 +L39 +R18 +L97 +L121 +L643 +R24 +R278 +R21 +L11 +R31 +L95 +R7 +L42 +L70 +L96 +L56 +R52 +R91 +L43 +R58 +R141 +R453 +L71 +R20 +L49 +R871 +R519 +L290 +R52 +R53 +L75 +L30 +R18 +R82 +L90 +L60 +R27 +R86 +R33 +R604 +L374 +R74 +R39 +L39 +L38 +L4 +R35 +L32 +R31 +L76 +L66 +L91 +R41 +L29 +L971 +R7 +R254 +R53 +R34 +L38 +L7 +L9 +L44 +L50 +R4 +L27 +L92 +L90 +R788 +R87 +R81 +L60 +R67 +R42 +R64 +R86 +L52 +L98 +L350 +R26 +L76 +R90 +L118 +R6 +R87 +R31 +L896 +L167 +R88 +L29 +R8 +L3 +R31 +R13 +R76 +L331 +R597 +R56 +R661 +L95 +R14 +L1 +L67 +R8 +R41 +R3 +R397 +L521 +L79 +R42 +R458 +L88 +L8 +L4 +L340 +R86 +R28 +R94 +R57 +R75 +L15 +R49 +L34 +R91 +L59 +R168 +L39 +L44 +R83 +R96 +L96 +L79 +R85 +R16 +L22 +R84 +L84 +L3 +R60 +R43 +L89 +R30 +R59 +R469 +R72 +R59 +L97 +L83 +L462 +R12 +L518 +R69 +L445 +R24 +R12 +L79 +L58 +R87 +R70 +R624 +R9 +R82 +R553 +R13 +R24 +R94 +R69 +R33 +R967 +R81 +R10 +L91 +L840 +L59 +L637 +L64 +R147 +R71 +L66 +L52 +L14 +R14 +R18 +L51 +R76 +R57 +L60 +R70 +R90 +R99 +R78 +L61 +L36 +R20 +R11 +R81 +L92 +L96 +L10 +L94 +R14 +R42 +L57 +L85 +R286 +R395 +L31 +L81 +R17 +R75 +R634 +L99 +R60 +R220 +R15 +L305 +R88 +R70 +L58 +L75 +R49 +R26 +L32 +L12 +R274 +R70 +L37 +L63 +R70 +R27 +R3 +R35 +L6 +R39 +L204 +R605 +R27 +R51 +L47 +L21 +L787 +L92 +R32 +R50 +R315 +L29 +R15 +L75 +R681 +R11 +L27 +L873 +R75 +R907 +L43 +R312 +L51 +R276 +R89 +L8 +L57 +L52 +L98 +R77 +R73 +R83 +L202 +R19 +R289 +L689 +R77 +L77 +L78 +R38 +L960 +R78 +L97 +L881 +L523 +R142 +R365 +L35 +R51 +R14 +L48 +R33 +L32 +R816 +L83 +R40 +R51 +R92 +R17 +L95 +L5 +R6 +L406 +R415 +R85 +R88 +L88 +L611 +R844 +L645 +L7 +L51 +L98 +R68 +R19 +L1 +R89 +R89 +L96 +L34 +R58 +L96 +L90 +L116 +L140 +L87 +R6 +R214 +L69 +L701 +L45 +R213 +R97 +L10 +R936 +L936 +R95 +R49 +R56 +R584 +L48 +L90 +R54 +L99 +L801 +L85 +L27 +R53 +L13 +L266 +R9 +R92 +R7 +L31 +R61 +R956 +L77 +R21 +L58 +R13 +L11 +L44 +L17 +R48 +R44 +L41 +L34 +L76 +L69 +R62 +L17 +R573 +R10 +L1 +L82 +R41 +R78 +L19 +R15 +L74 +L41 +L618 +L82 +L69 +R188 +L601 +L590 +L32 +L14 +R7 +R402 +R54 +L2 +R42 +L36 +L440 +L78 +R69 +L55 +L45 +R54 +R20 +R26 +L1 +R94 +R56 +R89 +R77 +R85 +L6 +R85 +R94 +R27 +L59 +L65 +R21 +R3 +L26 +L163 +R89 +R49 +R12 +R939 +L80 +R65 +L85 +R493 +L6 +L949 +R40 +R590 +L68 +L31 +L617 +R9 +R14 +R25 +L118 +L302 +L80 +R21 +R745 +L56 +R90 +L22 +L63 +L68 +L47 +L14 +R88 +R26 +L48 +L53 +R33 +R47 +R421 +R89 +L34 +R45 +L88 +R47 +L63 +R56 +L24 +L76 +R99 +R49 +R90 +R59 +L386 +R37 +R41 +R20 +L61 +R94 +L16 +L30 +L34 +L14 +L28 +L388 +L86 +L49 +R70 +L19 +L93 +L7 +R43 +L43 +R30 +L30 +R84 +L63 +L65 +L7 +R364 +R87 +R144 +R63 +L43 +R36 +L54 +R64 +R22 +R27 +R41 +R71 +R333 +L633 +L71 +L40 +R13 +L98 +L401 +L49 +R75 +L55 +L745 +L25 +L45 +R77 +L47 +L60 +R61 +R24 +L21 +R36 +R40 +R236 +L76 +R995 +L71 +L6 +L57 +L87 +R48 +L22 +L50 +R50 +L68 +L689 +R76 +R81 +L74 +R22 +R88 +R36 +R76 +L48 +R507 +L78 +R71 +R958 +L97 +R5 +R90 +L956 +L36 +R67 +L243 +R12 +R84 +R713 +R3 +R14 +R86 +L22 +R24 +R698 +R19 +R17 +R34 +L270 +R62 +L27 +L45 +L528 +R38 +R348 +L548 +L2 +L98 +L26 +R21 +R86 +R313 +L94 +L21 +R908 +L801 +L86 +R147 +L47 +L370 +R56 +R79 +R83 +R55 +R97 +R63 +L63 +R8 +R31 +L15 +R961 +R15 +L449 +R250 +L301 +R83 +L67 +L498 +R902 +L20 +L80 +R80 +L75 +R75 +R47 +L93 +R46 +R806 +R81 +L89 +R2 +L51 +R95 +R84 +R434 +R910 +L72 +L49 +R249 +L79 +R747 +R28 +L97 +R201 +L93 +L65 +R58 +R40 +R60 +L24 +R24 +R84 +R16 +R90 +R79 +L69 +L97 +R9 +R93 +R230 +L324 +L50 +R39 +L217 +R77 +R3 +R37 +R28 +L28 +R550 +L832 +L267 +R98 +R26 +L17 +L58 +R77 +L529 +R48 +R4 +L37 +L63 +R40 +L240 +L54 +L569 +R12 +R12 +L3 +L39 +L39 +R8 +L28 +R18 +L82 +L710 +R74 +L7 +L31 +L33 +R71 +L22 +R489 +R39 +R794 +R30 +R71 +L68 +L42 +R145 +R84 +R29 +L964 +L85 +L241 +L40 +R260 +L79 +L15 +L87 +R102 +R21 +L621 +L4 +R504 +R74 +R617 +R9 +L5 +R84 +R21 +R36 +R45 +R13 +L54 +L11 +R788 +L43 +R54 +R81 +L9 +L2 +L39 +L76 +L367 +L16 +L794 +L6 +L21 +R21 +L40 +L616 +L50 +R97 +R85 +L37 +R175 +R86 +R282 +R11 +L136 +L997 +R65 +R275 +L14 +L89 +R3 +L94 +L6 +L59 +R379 +R88 +R81 +L89 +R206 +R94 +R90 +R42 +R21 +R628 +R53 +L17 +R83 +R38 +R35 +L73 +R16 +L64 +R48 +R27 +R73 +L97 +L15 +R12 +L33 +R33 +R67 +L93 +L89 +L20 +L49 +R81 +L97 +L95 +R95 +R31 +L726 +R355 +R105 +L61 +L423 +R19 +R36 +L36 +L96 +R31 +L35 +R721 +R83 +R71 +L75 +R558 +R17 +R725 +L507 +R17 +L10 +L24 +R46 +L52 +R45 +R85 +L82 +L783 +R62 +R303 +R425 +R675 +R21 +R79 +L327 +L453 +R525 +R253 +R49 +R86 +R67 +L72 +L960 +R60 +R61 +R211 +R75 +R762 +R36 +R82 +R432 +R13 +R851 +R48 +R72 +L71 +L586 +R86 +L90 +R140 +R650 +L22 +L27 +L7 +R34 +R50 +R672 +L45 +L55 +L42 +L66 +R8 +L7 +L93 +R421 +L21 +L96 +L20 +R16 +R75 +R84 +L93 +R43 +L99 +R90 +R60 +L225 +R52 +L87 +R71 +L45 +R925 +L32 +L81 +L64 +L574 +L24 +L76 +L7 +R6 +L72 +L427 +R68 +L68 +R87 +L78 +R91 +R64 +R698 +R89 +R49 +L15 +L85 +L188 +L64 +L89 +L86 +L95 +R22 +R854 +R75 +R37 +R13 +L479 +L54 +R76 +L22 +R71 +L71 +L311 +R367 +R666 +L31 +R65 +R44 +L69 +L31 +L4 +L28 +L68 +R55 +L8 +L47 +R4 +R72 +L76 +L30 +L735 +L835 +L54 +R7 +L53 +L64 +L36 +R26 +L988 +L41 +L97 +R330 +L830 +L80 +L20 +R5 +R95 +L807 +R7 +R79 +L19 +L15 +R55 +R7 +R38 +L45 +R12 +R85 +R790 +L66 +R938 +R80 +R261 +R999 +L87 +R470 +R35 +L49 +L46 +L24 +L90 +L17 +L40 +L7 +L44 +L40 +R29 +R11 +L36 +L64 +R513 +L246 +L69 +L332 +R34 +R67 +L27 +R560 +R701 +L82 +R81 +L35 +L67 +R2 +R786 +L58 +R72 +R608 +R641 +R51 +L70 +L34 +R61 +L580 +R54 +L42 +R786 +L975 +R33 +L85 +R708 +R77 +R7 +R71 +L7 +R90 +R29 +R43 +L166 +L527 +R62 +R65 +L61 +R60 +R79 +L46 +R26 +R71 +R28 +L131 +L60 +R855 +L78 +R27 +L84 +L90 +R86 +R518 +L65 +R60 +R52 +L364 +R57 +R55 +R43 +R385 +L15 +R91 +L97 +L2 +L93 +L329 +R7 +R13 +R351 +L428 +R94 +R85 +L5 +R610 +R31 +L99 +L13 +R76 +L76 +L24 +R22 +L43 +R121 +L3 +L61 +R85 +R82 +L673 +R84 +L4 +R90 +L558 +R608 +R5 +L1 +L72 +R6 +R63 +R49 +L890 +L87 +R94 +R94 +R68 +R212 +R26 +L76 +R97 +L38 +R60 +R40 +R32 +R14 +R68 +L9 +L80 +R55 +L55 +R75 +R203 +L68 +R524 +L75 +L79 +L5 +R52 +L22 +L66 +R186 +L79 +L71 +R21 +R29 +L54 +L48 +L48 +R48 +R56 +R96 +L14 +R14 +R37 +R863 +L95 +R45 +R850 +L13 +R50 +L37 +L51 +L82 +R33 +R144 +R57 +R93 +L69 +L25 +L79 +L98 +L58 +L65 +R83 +L83 +L85 +R85 +L55 +R55 +L64 +L36 +L94 +L908 +R87 +R87 +R76 +R97 +L45 +R849 +L48 +R79 +R671 +L9 +R58 +R881 +R9 +L60 +R63 +L93 +L413 +L87 +L45 +R58 +R87 +L28 +R28 +L59 +R27 +L786 +L6 +R66 +L24 +R95 +L13 +R88 +L49 +L39 +L24 +L176 +R8 +R12 +R482 +R19 +L2 +L37 +R31 +L59 +L54 +L423 +R323 +L39 +R7 +L54 +R86 +L305 +R35 +L41 +R76 +L36 +R20 +L49 +L91 +R45 +R63 +L17 +L6 +L20 +R26 +R54 +R59 +L76 +L37 +R84 +R32 +R49 +L21 +R28 +L72 +L49 +L23 +L50 +R30 +R92 +R27 +L27 +L57 +L47 +L50 +L11 +R29 +L6 +L58 +L49 +R82 +R67 +R51 +L51 +R66 +R34 +L37 +R37 +L29 +L76 +R10 +R95 +R35 +R65 +R9 +R91 +R88 +R12 +L44 +R44 +L57 +L43 +R81 +R19 +L81 +L19 +L16 +L84 +L61 +L39 +L63 +R64 +R9 +L11 +R3 +R33 +R3 +R45 +R21 +R20 +R43 +L7 +L50 +R41 +L10 +R31 +R43 +L3 +L34 +L30 +L44 +R4 +R38 +R16 +L20 +R22 +L37 +L6 +L34 +R21 +R47 +R41 +R19 +L29 +L1 +L33 +L26 +R18 +R3 +L13 +L19 +R26 +L12 +L49 +L16 +L48 +R10 +R1 +R48 +R2 +R36 +L30 +L16 +L17 diff --git a/python/src/1-day/solution1.py b/python/src/1-day/solution1.py new file mode 100644 index 0000000..974b5ca --- /dev/null +++ b/python/src/1-day/solution1.py @@ -0,0 +1,10 @@ +total_zero_cnt = 0 +current_step = 50 + +with open("./src/1-day/input.txt", "r") as file: + for step in file: + current_step += int(step[1:]) if (step[0] == "R") else -int(step[1:]) + current_step %= 100 + total_zero_cnt += int(current_step == 0) + +print(total_zero_cnt) diff --git a/python/src/1-day/solution2.py b/python/src/1-day/solution2.py new file mode 100644 index 0000000..3ca7ed5 --- /dev/null +++ b/python/src/1-day/solution2.py @@ -0,0 +1,31 @@ +# Кол-во нулей для пароля +total_zero_cnt = 0 + +# Текущее значение стрелки на циферблате +current_step = 50 + +with open("./src/1-day/input.txt", "r") as file: + for step in file: + # Получаем значение, на которое надо сдвинуть цифербрал + next_step = int(step[1:]) if step[0] == "R" else -int(step[1:]) + + # Сохраняем значение, где должна оказаться стрелка циферблата + # как будто он просто прямая с числами. + next_current_step = current_step + next_step + + # Прибавляем к кол-ву нулей кол-во проделанных полных проворотов циферблата + total_zero_cnt += abs(next_current_step) // 100 + + # Если полученное значение на прямой <= нулю, + # то это значит, что стрелка либо была на нуле изначально, + # либо она пересекла ноль (ушла дальше/осталась на нем, не имеет значения). + # Убираем с помощью `and current_step != 0` вероятность первого сценария + # И прибавляем в таком случае еще 1 нуль, который стрелка пересекла. + if next_current_step <= 0 and current_step != 0: + total_zero_cnt += 1 + + # Как и в предыдущем решении считаем реальное значение стрелки + current_step = next_current_step % 100 + + +print(f"{total_zero_cnt=}") diff --git a/python/src/1-day/test_input.txt b/python/src/1-day/test_input.txt new file mode 100644 index 0000000..53287c7 --- /dev/null +++ b/python/src/1-day/test_input.txt @@ -0,0 +1,10 @@ +L68 +L30 +R48 +L5 +R60 +L55 +L1 +L99 +R14 +L82