Цей виклик повністю вирваний з сильного натхнення від All Light , розробленого Soulgit Games.
Виклик
Ви електрик, і ваша робота підключити всі батареї до батареї.
- Світильники та акумуляторні батареї розкладені в сітці.
- Ви можете підключити світло або акумулятор до найближчого світла або батареї на його північ, південь, схід та захід.
- Акумулятор може мати будь-яку кількість підключень.
- Кожне світло вказує, скільки з'єднань потрібно. Ви повинні зробити саме стільки зв’язків із цим світлом.
- Ви можете створити поодинокі з'єднання або подвійні з'єднання між двома фарами (або світлом і акумулятором).
- Провід не може перетинатися.
- Повинно бути шлях від кожного світла до акумулятора.
- Принаймні одне дійсне рішення гарантовано існує.
Враховуючи положення акумулятора та кожного світильника, а також кількість підключень, необхідних для кожного світла, виведіть з'єднання між ними, які визнають ці властивості.
Умова виграшу
Це код-гольф , тому найкоротший код на кожній мові виграє.
Випробування
Введення / виведення є гнучким, як зазвичай.
Для введення я буду використовувати 2d масив розміром сітки, який зберігає додатні цілі числа для вогнів, нулі для порожніх пробілів та -1 для акумулятора. Ще одним хорошим вибором може бути список світильників, де світло - це кортеж, що містить положення світла та кількість необхідних з'єднань.
Для виводу я буду використовувати список з'єднань, де з'єднання являє собою кортеж, що містить початкове положення і кінцеве положення. Якщо з'єднання подвоїться, у мене буде 2 з них у списку (інший варіант - включити цей параметр у кортеж). Ще одним хорошим варіантом може стати якийсь макет сітки.
Якщо ви використовуєте систему координат, ви можете вказати початковий індекс та де індексувати. Мої приклади будуть індексованими 0 і використовувати (0, 0) як лівий верхній кут (рядок, стовпець). (Я використовую {} просто для введення іншого типу роздільника, щоб його було легше читати не тому, що вони є наборами.)
Ось графічний вигляд тестових випадків: Тести 1-12
Тест 1:
[-1 | 0 | 1 ] => [{(0, 0), (0, 2)}]
Тест 2:
[-1 | 0 | 2 ] => [{(0, 0), (0, 2)}, {(0, 0), (0, 2)}]
Тест 3:
[-1 ]
[ 0 ] => [{(0, 0), (2, 0)), ((0, 0), (2, 0)}]
[ 2 ]
Тест 4:
[ 1 | 0 |-1 | 0 | 2 ] => [{(0, 0), (0, 2)}, {(0, 2), (0, 4)}, {(0, 2), (0, 4)}]
Тест 5:
[ 2 ]
[ 0 ]
[-1 ] => [{(0, 0), (2, 0)}, {(0, 0), (2, 0)}, {(2, 0), (4, 0)}]
[ 0 ]
[ 1 ]
Тест 6:
[ 1 | 0 | 0 ]
[ 0 | 0 | 0 ] => [{(0, 0), (2, 0)}, {(2, 0), (2, 2)}]
[ 2 | 0 |-1 ]
Тест 7:
[ 4 | 0 | 0 |-1 ]
[ 0 | 0 | 0 | 0 ] => [{(0, 0), (0, 3)}, {(0, 0), (0, 3)},
[ 2 | 0 | 0 | 0 ] {(0, 0), (3, 0)}, {(0, 0), (3, 0)}]
Тест 8:
[ 2 | 0 |-1 | 0 | 2 ] [{(0, 0), (0, 2)}, {(0, 0), (0, 2)},
[ 0 | 0 | 0 | 0 | 0 ] => {(0, 2), (0, 4)}, {(0, 2), (0, 4)},
[ 0 | 0 | 1 | 0 | 0 ] {(0, 2), (2, 2)}]
Тест 9:
[ 0 | 0 | 2 | 0 | 0 ]
[ 0 | 0 | 0 | 0 | 0 ]
[ 1 | 0 |-1 | 0 | 1 ] => [{(0, 2), (2, 2)}, {(0, 2), (2, 2)}, {(2, 0), (2, 2)},
[ 0 | 0 | 0 | 0 | 0 ] {(4, 2), (2, 2)}, {(2, 4), (2, 2)}, {(2, 4), (2, 2)}]
[ 0 | 0 | 2 | 0 | 0 ]
Тест 10:
[-1 | 2 | 3 | 2 ] => [{(0, 0), (0, 3)}, {(0, 0), (0, 3)},
{(0, 0), (0, 3)}, {(0, 0), (0, 3)}]
Тест 11:
[-1 | 0 | 0 | 0 ]
[ 3 | 0 | 0 | 0 ]
[ 3 | 0 | 0 | 3 ] => [{(0, 0), (1, 0)}, {(1, 0), (2, 0)}, {(1, 0), (2, 0)},
[ 0 | 0 | 0 | 0 ] {(2, 0), (2, 3)}, {(2, 3), (4, 3)}, {(2, 3), (4, 3)}]
[ 0 | 0 | 0 | 2 ]
Тест 12:
[ 2 | 0 | 0 ] [{(0, 0), (1, 0)}, {(0, 0), (1, 0)}, {(1, 0), (1, 1)},
[ 3 |-1 | 0 ] => {(1, 1), (2, 1)}, {(1, 1), (2, 1)}, {(2, 0), (2, 1)},
[ 2 | 5 | 1 ] {(2, 0), (2, 1)}, {(2, 1), (2, 2)}]
[1 | -1] [1 1].