У вас есть маленький робот с четырьмя датчиками расстояния. Он знает расположение комнаты, но у него нет чувства ориентации, кроме возможности зафиксировать ориентацию сетки. Вы хотите быть в состоянии узнать, где робот основан на показаниях, но это может быть неоднозначным из-за ограниченных датчиков.
Объяснение проблемы
Вам будет дано расположение комнаты и четыре показания расстояния по часовой стрелке, показывающие количество ячеек между вами и стеной. В середине комнаты могут быть стены, а края сетки - тоже стены. Робот не может быть размещен на вершине стены.
Ваша цель состоит в том, чтобы перечислить все места в комнате, в которых мог бы находиться робот, которые дали бы данные показания. Имейте в виду, что у робота нет чувства ориентации (кроме блокировки под углом 90 градусов на сетке - т.е. робот никогда не будет ориентирован по диагонали или какому-либо другому углу наклона), поэтому показание [1, 2, 3, 4], например, аналогично чтению [3, 4, 1, 2].
Примеры
В этих примерах координаты ячейки будут заданы в виде 0-индексированных (x, y) пар из верхней левой ячейки. Показания будут даны по часовой стрелке в квадратных скобках. Макеты будут использовать знаки фунта для стен и других символов (обычно точек) для представления пустых ячеек.
Дело 1
. . . .
. . . .
. . # .
. . . .
- [1, 0, 2, 3] ==> (1, 0), (3, 1)
- [0, 0, 3, 3] ==> (0, 0), (3, 0), (0, 3), (3, 3)
- [2, 1, 1, 0] ==> (0, 2), (2, 1)
- [1, 1, 2, 2] ==> (1, 1)
Дело 2
# a . # a .
a # . . # a
. . # . . #
# . . # . .
a # . . # a
. a # . a #
- [0, 0, 1, 1] ==> каждая точка на сетке, которая является точкой
- [1, 0, 0, 0] ==> все a в сетке
Дело 3
.
- [0, 0, 0, 0] ==> (0, 0)
Дело 4
. # #
. . .
- [1, 2, 0, 0] ==> (0, 1)
- [0, 1, 2, 0] ==> (0, 1)
- [0, 0, 1, 0] ==> (0, 0)
- [1, 0, 1, 0] ==> (1, 1)
- [0, 1, 0, 1] ==> (1, 1)
Дело 5
. # . .
. . . .
. . # .
. . . .
- [2, 1, 1, 0] ==> (0, 2), (2, 1)
- [0, 2, 2, 1] ==> (1, 1)
- [1, 0, 2, 2] ==> (1, 1)
- [0, 3, 0, 0] ==> (0, 0)
- [1, 0, 1, 1] ==> (1, 2)
Другие правила
- Ввод может быть в любом удобном формате. Ввод представляет собой сетку стен и пространств и список из четырех расстояний по часовой стрелке.
- Вывод может быть либо списком всех ячеек, которые удовлетворяют показанию, либо измененной версией сетки, показывающей, какие ячейки удовлетворяют чтению. Точный формат вывода не имеет значения, если он является разумным и последовательным. Допустимые форматы вывода включают, но не ограничиваются :
- Печать линии для каждой координаты ячейки в виде упорядоченной пары
- Печать сетки с
.
,#
и!
для пространства, стен и возможных мест соответственно. - Возврат списка упорядоченных пар
- Возврат списка индексов
- Возврат списка списков с использованием разных значений для пространств, стен и возможных мест
- Вернуть / распечатать матрицу 0 и 1, используя 1 для представления ячеек, в которых будет происходить чтение. (Не обязательно включать стены)
- Еще раз, этот список не является исчерпывающим, поэтому другие представления действительны, если они согласованы и показывают каждое возможное допустимое местоположение в сетке или списке. Если вы не уверены, оставьте комментарий, и я буду рад уточнить.
- Вы можете предположить, что показание соответствует по крайней мере одному местоположению в сетке.
- Вы можете предположить, что входная сетка имеет размер как минимум 1x1 и имеет хотя бы один пустой пробел.
- Можно предположить, что входная сетка не превышает 256 ячеек в каждом измерении.
- Вы можете предположить, что входная сетка всегда является идеальным прямоугольником, а не неровным.
- Нет штрафа или бонуса, если ваша программа выдаст вменяемые результаты для неверных входных данных.
- Это код гольф, поэтому выигрывает самый короткий код.
Case 5
не кажутся вполне подходящими. Я получаю(0,2),(2,1)
,(1,3)
,(1,3)
, иnothing
.Ответы:
JavaScript (ES6),
130 128 126125 байтПопробуйте онлайн! (с постобработкой вывода для удобства чтения)
комментарии
источник
Python 2 ,
234202200191 байтПопробуйте онлайн!
источник
Древесный уголь , 42 байта
Попробуйте онлайн! Ссылка на подробную версию кода. По-видимому, древесный уголь, по какой-то причине, добавляет некоторый запас к выходу; Я предполагаю, что это ошибка в древесном угле. Объяснение:
Распечатать карту без перемещения курсора.
Зацикливайтесь на каждом персонаже на карте.
Если это новая строка, переместите курсор в начало следующей строки.
Найдите расстояние до стены в направлении
k+m
.Выполните цикл по всем четырем начальным направлениям
k
, просмотрите все четыре направления по часовой стрелкеm
, и, если результат включает в себя второй вход,!
распечатайте текущий символ в противном случае.источник