Виклик
Тепер, коли Санта нарешті придумав, як потрапити у свій теперішній оберіг, він розуміє, що якимось ельфам зайшов до нього перед собою і вкрав деякі його подарунки! Вони ще не придумали, як покинути сховище, тому Санта повинен спробувати їх наздогнати. І Санта, і ельфи мають безмежну енергію для бігу, але, на жаль, ельфи мають більшу нескінченність енергії, тому, якщо вони в кінцевому підсумку бігають в петлі, ельфи звільняються.
Давши графік n
вузлів і e
країв з прогулянкою, що існує між будь-якими двома вузлами, та положення ельфів та Санта, визначте, скільки ельфів може Санта впіймати, перш ніж він втомиться.
Погоня покрокова. Кожен цикл ельфи спочатку рухаються одночасно (вони також можуть переміщатися між собою та на той самий вузол), а потім рухатиметься Санта. Якщо Санта рухається на той же вузол, що і ельф, він спіймав цього ельфа. Кожен ельф може рухатися лише з одного вузла до свого сусіда за один крок. Те саме стосується Санти на початку, але для кожного ельфа, якого він спіймав, Санта може зробити ще один додатковий крок. Отже, якщо Санта зловив ельфа, то він може перейти від вузла до сусіда свого сусіда. Це означає, що він міг перейти до вузла, а потім назад. Однак, оскільки Санта бігає занадто швидко за цей проміжок часу, він не буде ловити жодних ельфів, які проходять в проміжних кроках (тому якщо він знаходиться на A, A підключений до B, B підключений до C, ельф на В, а Санта рухається від A -> B -> C, ельф ще не спійманий). Однак Санта не повинен рухати стільки кроків одночасно; він рухається до 1 + (кількість спійманих ельфів) щоразу.
Зверніть увагу, що всі ельфи повинні рухатися кожного повороту, і якщо ельф рухається на вузол Санта, вони потрапляють.
Усі сутності (ельфи, Санта) на початку будуть на різних вузлах.
Технічні умови та правила
Ваша програма теоретично повинна працювати для введення будь-якого розміру. Вхід буде подано у вигляді графіка, положення ельфів та положення Санти. Ви можете взяти графік у будь-якому розумному форматі (список вузлів + список ребер, список ребер, матриця примикання, позначення циклу тощо), і ви можете зайняти позиції в будь-якому розумному форматі, який працює з вашим вхідним форматом графіка (індекс у списку вузлів тощо). Вихід повинен бути єдиним натуральним числом, що вказує на максимальну кількість ельфів, які Санта може спіймати.
Випробування
Вони задаються у вигляді списків ребер та номерів вузлів для позицій.
Input -> Output
[(0, 1), (1, 2)], [0, 2], 1 -> 2 # Easy win for Santa, the elves get themselves caught :P
[(0, 1), (1, 2), (2, 3), (3, 0)], [0, 1], 2 -> 2 # The elf opposite of Santa cannot escape but the other one can always just run away each turn, until Santa catches the first elf. Then he can easily just catch the rest.
[(0, 1), (1, 2), (2, 3), (3, 0)], [1], 0 -> 0 # Santa will never catch up
[(0, 1), (1, 2), (2, 3), (3, 0), (1, 4), (4, 5), ..., (10, 11), (11, 3)], [2, 6], 0 -> 2 # The first elf moves to either 1 or 3 and then gets caught. Then, Santa can use his 2-step move to catch up to the second elf no matter what.
Я думаю, що Санта не може наздогнати ні ельфів, ні всіх ельфів, тому ця проблема може бути просто натяком "чи може він зловити ельфа"
Правила
- Застосовуються стандартні лазівки
- Це код-гольф виклик, тому найкоротша відповідь у байтах виграє
- Відповіді не приймаються
Щасливого гольфу!
Примітка: Натхнення для цієї серії викликів я черпав з Advent Of Code . Я не маю приналежності до цього сайту
Ви можете переглянути список усіх викликів у серії, переглянувши розділ "Пов'язані" першого виклику тут .
1
Доведіть деякі математичні твердження. 2
Опублікуйте відповідь на желе (/ ...) менш ніж за 10 байтів.