Se le da el mapa de una sala de cine como una matriz booleana: 0 representa un asiento libre, 1 - ocupado. Cada finlandés que entra elige el asiento más alejado ( distancia euclidiana ) del más cercano ocupado, o si existen varios, el primero de ellos en orden de filas . Produzca una matriz que muestre que los asientos de la orden eventualmente serán ocupados; es decir, reemplace los 0 con 2, 3, 4, etc.
// 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
El formato de E / S es flexible dentro de las normas de golf establecidas para su idioma. Puede suponer que la entrada es correcta, de un tamaño de al menos 3x3 y que no consiste completamente en el mismo valor booleano. Escribe una función o un programa completo. La solución más corta por idioma se considera la ganadora; No se aceptarán respuestas. Las lagunas estándar están prohibidas.
Respuestas:
MATL , 37 bytes
Pruébalo en línea! O verificar todos los casos de prueba . También es posible que desee ver el cine lleno de arte ASCII.
Explicación
fuente
Javascript (ES6),
156137 bytesAhorró 18 bytes gracias a @ l4m2
Eso es bastante
map()
...Pruébalo en línea!
Comentado
fuente
b=b<(d=X*X--+Y*Y)|!v?b:d
v|b<=B
v|
es innecesario porque siv
entoncesb=0
Haskell ,
216213185184 bytesToma la entrada como una matriz. La entrada y la salida están en orden inverso. Crédito por magia de punto fijo a Laikoni .
Pruébalo en línea!
fuente
until((==)=<<f)f
Python 2 ,
200187 bytesPruébalo en línea!
-13 bytes thx a un consejo de Not that Charles al eliminar la verificación innecesaria para las celdas que son 0.
fuente
,v,u
al final del generador en el interiormax
, y no es necesario hacerlo,if a[v][u]<1
ya que serán0
y, por lo tanto, no máximos. Así que mi línea es básicamente*_,y,x=max((min(...),-v,-u,v,u)for v,u in P)
*,v,u
caracteres NO sea un ahorro en comparación con el--
que tienes. :)if a[v][u]<1
sea redundante (ya que las celdas distintas de cero tendrán unamin()
de0
).J ,
747060 bytesPruébalo en línea!
fuente
APL (Dyalog) , 39 bytes
Gracias Cows quack por guardar un byte, y ngn por salvar otro
Pruébalo en línea!
fuente
Jalea , 43 bytes
Pruébalo en línea!
fuente
APL (Dyalog Unicode) , 44 bytes
Pruébalo en línea!
Solución alternativa a 44 bytes.
fuente
Wolfram Language (Mathematica) , 121 bytes
Pruébalo en línea!
fuente
Clojure, 247 bytes
La entrada es un vec-de-vecs
M
, que se modifica en unloop
byassoc-in
. Cuando no se encuentra un lugar libre (if-let
), se devuelve el resultado.fuente
Jalea ,
35333029 bytesPruébalo en línea!
Reemplazado
×ı+
conæị
(combinación compleja), una nueva diada basada enj.
J, guardando un byte.Aquí hay una versión más eficiente para TIO. Pruébalo en línea!
Explicación
fuente
K (ngn / k) ,
8175737270 bytesPruébalo en línea!
fuente