- Адвент кода 2016 День 11
- Начинаете год с 11-го дня? Почему?
- Часть 1
- Не очень хорошо себя чувствую
- Документирование правил
- Из инструкции
- Из примера
- Одновременно: понимание и замешательство
- Краткий алгоритм: регулярное выражение для извлечения элементов каждого этажа
- Эксперименты с перемещением
- Перемещение двух пар
- Перемещение двух пар за меньшее количество шагов
- Неудачи
- Мое первое успешное завершение перемещений!
- Я сделал это!
- Кратчайший путь: навсегда неизвестен?
- Празднование моих достижений
- Всем, кто это читает:
Адвент кода 2016 День 11
Начинаете год с 11-го дня? Почему?
- День 25 требует завершения Дня 12 и Дня 23
- День 23 и День 12 требуют завершения Дня 11.
- Итак… я начинаю с 11-го дня и попытаюсь решить все четыре дня: 11, 12, 23, 25
Часть 1
- Не очень хорошо себя чувствую в этой части
- Документирование правил
- Одновременно: понимание и замешательство
- Краткий алгоритм: регулярное выражение для извлечения элементов каждого этажа
- Эксперименты с ходами
- Мое первое успешное завершение перемещений!
- Кратчайший путь: навсегда неизвестен?
Не очень хорошо себя чувствую
- Я несколько раз перечитывал инструкции
- Я не чувствую в себе достаточных навыков, чтобы решить ее алгоритмически.
- Поэтому, похоже, мне придется попытаться решить ее так же, как я пытался решить 2021 День 23: Амфипод — ручкой и бумагой
- Я могу попытаться создать симулятор… как способ почувствовать, что я чего-то достиг, и потому что это может быть забавно в использовании
Документирование правил
Из инструкции
Микросхемы могут питаться только от соответствующего РТГ. РТГ, питающий микрочип, по-прежнему опасен для других микрочипов.
- Где элементом является
A
:AM
работает только в паре сAG
.
Если чип когда-либо будет оставлен в одной зоне с другим RTG, и он не подключен к своему RTG, чип будет поджарен. Держите чипы подключенными к соответствующему RTG, когда они находятся в одной комнате, и подальше от других RTG.
- Если
AM
находится на том же этаже, что иBG
, то иAG
должен быть на том же этаже, иначе это недействительный ход.
Лифт может перевозить максимум себя и два RTG или микрочипа в любой комбинации. Лифт будет работать, только если в нем есть хотя бы один RTG или микрочип.
Если на этаже, на котором я нахожусь, есть AM
, AG
, BM
, BG
, я могу взять любую из следующих комбинаций:
- По крайней мере, одну из них
- не более двух
Из примера
- Принесите микрочип
A
на этаж, содержащий только его генератор: верно, потому что он получает питание - Принесите пару микрочипов на этаж, содержащий генератор другого типа: действительно, так как микрочип получает энергию, а одинокий генератор не причиняет вреда.
- Оставить генераторы разных типов на этаже, где нет микрочипов: правомерно, потому что они не причиняют вреда
- Принести два разных микрочипа на другой этаж, где нет генераторов: действительно, потому что микрочипы не влияют друг на друга, а на этаже нет генераторов (тем более непарных).
- Принести микрочипы/генераторы на этаж, где есть все совпадающие генераторы/микрочипы: действительно, потому что все получает энергию.
Одновременно: понимание и замешательство
- Мне кажется, что я понимаю правила.
- Но я знаю, что в моей головоломке есть несколько пар микрочипов и генераторов.
- Что делает головоломку гораздо более сложной
- И, вероятно, потребует еще десятки — возможно, сотни — шагов.
Единственный путь отсюда — симуляция лифта!
Краткий алгоритм: регулярное выражение для извлечения элементов каждого этажа
Первая строка моего входа в головоломку такова:
The first floor contains a polonium generator, a thulium generator, a thulium-compatible microchip, a promethium generator, a ruthenium generator, a ruthenium-compatible microchip, a cobalt generator, and a cobalt-compatible microchip.
Исходя из этого, мне нужно программно определить, что на первом этаже находятся следующие предметы:
polonium generator
thulium generator
thulium-compatible microchip
promethium generator
ruthenium generator
ruthenium-compatible microchip
cobalt generator
cobalt-compatible microchip
Я заметил вот какой крючок:
- Каждый предмет предваряется
a
. - Микрочипы имеют суффикс
-compatible
после имени элемента.
Следовательно, это регулярное выражение:
/a (w+)-?/g
Это регулярное выражение создаст такие соответствия:
a polonium
a thulium
a thulium-
a promethium
a ruthenium
a ruthenium-
a cobalt
a cobalt-
Из этого я могу использовать последний символ в строке для определения типа элемента, а первые символы — для определения элемента.
Мне нужен вложенный массив, подобный этому, для ввода головоломки:
[
['PO-G', 'TH-M', 'TH-G', 'PR-G',
'RU-G', 'RU-M', 'CO-G', 'CO-M'],
['PO-M', 'PR-M'],
[],
[]
]
Эксперименты с перемещением
Перемещение двух пар
Перемещение двух пар за меньшее количество шагов
Неудачи
Мое первое успешное завершение перемещений!
Каждая из моих неудачных попыток выявила некоторые интригующие закономерности:
- Микрочип может попасть на этаж: только в сопровождении своего генератора, только если этаж содержит другую пару микрочип-генератор, только если этаж содержит другие генераторы.
- Поскольку четвертый этаж накапливает пары, а для перемещения с этого этажа вниз требуется хотя бы один предмет на лифте, похоже, что предмет на лифте должен быть единственным непарным генератором после перемещения парного микрочипа-генератора на четвертый этаж.
- Генераторы должны быть предметом, наиболее часто используемым для транспортировки микрочипов.
- Поскольку на первом этаже почти все начинается, а на четвертом все заканчивается, мне придется аккуратно использовать два средних этажа для транспортировки одной пары и одного генератора за раз
- Должна существовать повторяющаяся серия ходов, которая начинается и заканчивается любым количеством парных микрочипов-генераторов и непарным генератором на четвертом этаже.
- Затем, в последний ход, непарный генератор используется для получения оставшегося микрочипа.
Я сделал это!
- Я переместил все с первого на четвертый этаж!
- Я проверил каждый ход, и все они кажутся верными!
Я подсчитал ходы, отправил ответ, и…
…это не правильный ответ.
Следовательно:
- Либо есть более короткий путь.
- либо мой набор ходов недействителен и не является кратчайшим путем.
Облом.
Кратчайший путь: навсегда неизвестен?
- Я пробовал всевозможные кратчайшие пути, основываясь на своем рабочем решении.
- Я перечитал инструкции и несколько раз изучил прохождение.
Есть одно правило, которое не дает мне покоя:
Лифт всегда останавливается на каждом этаже для перезарядки, и это занимает достаточно времени, чтобы предметы внутри него и предметы на этом этаже могли облучить друг друга. (Этого можно избежать, если микрочип и его генератор окажутся на одном этаже, так как их можно соединить, пока лифт перезаряжается).
Я не знаю, к какому сценарию это приводит.
Если только это не тот сценарий, который показан в прохождении: два микрочипа соединяются со своими генераторами на другом этаже?
В таком случае, думаю, я полностью понимаю правила.
Как бы то ни было, я в тупике.
И эта головоломка начинает расстраивать меня больше, чем радовать.
Празднование моих достижений
- Я обнаружил — с помощью анимации — один верный путь для перемещения всех предметов на четвертый этаж!
- Я сделал тонну GIF-файлов, которые запечатлели мое исследование головоломки в реальном времени
- Я написал регулярное выражение, которое могло бы стать началом симулятора.
Не очень весело начинать год, собрав ноль звезд в первый день, особенно когда я начал относительно рано.
Но вот он я, побежденный еще одной головоломкой со странным названием «Поиск пути», которая потребовала от меня попытки решить ее вручную.
Всем, кто это читает:
- Если вы можете сказать мне, что я упустил, пожалуйста, оставьте комментарий!