Эта задача полностью сорвана с использованием технологии 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]
.Ответы:
JavaScript (Node.js) ,
393391378 байтПопробуйте онлайн!
источник
[0-9]
используется