У вас маленький робот з чотирма датчиками відстані. Він знає планування кімнати, але не має іншого орієнтації, крім того, щоб мати можливість замикатися на орієнтації на сітку. Ви хочете бути в змозі дізнатися, де робот базується на показаннях, але це може бути неоднозначним через обмежені датчики.
Пояснення виклику
Вам буде надано макет кімнати та чотири показання відстані за годинниковою стрілкою, вказуючи кількість комірок між вами та стіною. Посередині кімнати можуть бути стіни, а краї сітки - це також стіни. Робота не можна розміщувати на стіні.
Ваша мета полягає в тому, щоб перелічити всі місця в приміщенні, де робот міг би знаходитися, що дало б дані показання. Майте на увазі, що робот не має почуття орієнтації (крім того, щоб він був зафіксований під кутом 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] ==> всі а в мережі
Випадок 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)
Інші правила
- Введення може бути в будь-якому зручному форматі. Вхід - це сітка стін і просторів і список чотирьох відстаней за годинниковою стрілкою.
- Вихідним може бути або список усіх комірок, які задовольняють прочитане, або модифікована версія сітки, що показує, які комірки задовольняють прочитаному. Точний формат виводу не має значення, доки він розумний і послідовний. Допустимі вихідні формати включають, але не обмежуються ними :
- Друк рядка для кожної координати комірок як упорядкована пара
- Друк сітки з
.
,#
і!
для простору, стін, а також можливі місця, відповідно. - Повернення списку упорядкованих пар
- Повернення списку індексів
- Повернення списку списків, використовуючи різні значення для пробілів, стін та можливих місць
- Повернення / друк матриці 0s і 1s, використовуючи 1s для представлення комірок, де відбулося б зчитування. (Не обов’язково включати стіни)
- Знову ж таки, цей список не є вичерпним, тому інші представлення дійсні до тих пір, поки вони є послідовними та показують усі можливі дійсні місця в сітці чи списку. Якщо ви не впевнені, залиште коментар, і я буду радий уточнити.
- Ви можете припустити, що читання відповідає щонайменше одному розташуванню в сітці.
- Можна припустити, що вхідна сітка має розмір принаймні 1х1 і має принаймні одне порожнє місце.
- Можна припустити, що вхідна сітка не має більше 256 комірок у кожному вимірі.
- Ви можете припустити, що вхідна сітка - це завжди ідеальний прямокутник і не зазубрована.
- Немає штрафу чи бонусу, якщо ваша програма дасть здорові результати для недійсних входів.
- Це код гольфу, тому найкоротший код виграє.
Case 5
не здаються цілком правильними. Я отримую(0,2),(2,1)
,(1,3)
,(1,3)
, іnothing
.