Вам дана карта кинотеатра в виде логической матрицы: 0 обозначает свободное место, 1 - занято. Каждый финн, который входит, выбирает место, наиболее удаленное ( евклидово расстояние ) от ближайшего занятого, или, если существует несколько таких, - первое среди них в порядке расположения строк . Выведите матрицу, показывающую, в каком порядке места будут заняты; то есть замените 0 на 2, 3, 4 и т. д.
// in
0 0 0 0 1
0 0 0 0 0
0 0 0 0 0
0 0 1 1 0
// out
2 8 3 9 1
10 5 11 6 12
4 13 14 15 7
16 17 1 1 18
// in
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0
// out
5 43 17 44 45 46 18 47 8 48 49 6 50 19 51 2
52 24 53 54 1 55 56 25 57 26 58 59 27 60 28 61
20 62 63 29 64 65 1 66 30 67 68 21 69 9 70 71
72 73 1 74 31 75 76 77 78 1 79 80 32 81 82 11
12 83 84 1 85 86 87 13 88 89 90 14 91 92 33 93
94 34 95 96 97 15 98 99 35 100 36 101 102 1 103 22
104 105 37 106 38 107 39 108 109 16 110 40 111 112 41 113
4 114 115 7 116 23 117 3 118 119 42 120 1 121 122 10
// in
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
// out
2 38 39 26 40 6 41 42 12 43 44 7 45 46 27 47 3
48 49 15 50 28 51 52 29 53 30 54 55 56 16 57 31 58
32 59 60 33 61 62 17 63 64 65 18 66 67 68 34 69 35
70 10 71 72 13 73 74 75 1 76 77 78 11 79 80 14 81
82 83 36 84 85 86 21 87 88 89 22 90 91 37 92 93 94
19 95 96 97 23 98 99 100 24 101 102 103 25 104 105 106 20
107 108 4 109 110 111 8 112 113 114 9 115 116 117 5 118 119
Формат ввода / вывода является гибким в рамках установленных норм игры в гольф для вашего языка. Вы можете предположить, что ввод правильный, размером не менее 3х3 и не состоит полностью из одного и того же логического значения. Напишите функцию или полную программу. Самое короткое решение для каждого языка считается победителем; ответ не будет принят. Стандартные лазейки запрещены.
Ответы:
MATL , 37 байт
Попробуйте онлайн! Или проверьте все тестовые случаи . Вы также можете увидеть, как кинотеатр заполняется искусством ASCII.
объяснение
источник
JavaScript (ES6),
156137 байтСохранено 18 байт благодаря @ l4m2
Это довольно много
map()
...Попробуйте онлайн!
комментарии
источник
b=b<(d=X*X--+Y*Y)|!v?b:d
v|b<=B
v|
не нужно, потому чтоv
тогдаb=0
Haskell ,
216213185184 байтаПринимает входные данные в виде массива. Вход и выход в обратном порядке. Кредит на магию с фиксированной точкой Лайкони .
Попробуйте онлайн!
источник
until((==)=<<f)f
Python 2 ,
200187 байтПопробуйте онлайн!
-13 байтов спасибо подсказке от Not that Charles , удалив ненужную проверку на то, что ячейки равны 0.
источник
,v,u
в конец генератора внутриmax
, и вам не нужно этого делать,if a[v][u]<1
так как они будут0
и, следовательно, не макс. Так что моя линия в основном*_,y,x=max((min(...),-v,-u,v,u)for v,u in P)
*,v,u
персонажей не спасет против--
вас. :)if a[v][u]<1
избыточно (так как ненулевые ячейки будут иметьmin()
оф0
).J ,
747060 байтПопробуйте онлайн!
источник
APL (Дьялог) , 39 байт
Спасибо Cows кряк за сохранение одного байта и ngn за сохранение другого
Попробуйте онлайн!
источник
Желе , 43 байта
Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 44 байта
Попробуйте онлайн!
Альтернативный раствор на 44 байта
источник
Wolfram Language (Mathematica) , 121 байт
Попробуйте онлайн!
источник
Clojure, 247 байтов
Ввод - это vec-of-vecs
M
, который изменяется вloop
byassoc-in
. Если свободного места не найдено (if-let
), возвращается результат.источник
Желе ,
35333029 байтПопробуйте онлайн!
Заменено
×ı+
сæị
(комплекс комбината), новыми диадами на основеj.
из J, экономя байты.Вот более эффективная версия для TIO. Попробуйте онлайн!
объяснение
источник
K (нгн / к) ,
8175737270 байтПопробуйте онлайн!
источник