Você recebe o mapa de uma sala de cinema como uma matriz booleana: 0 representa um assento livre, 1 - ocupado. Cada finlandês que entra escolhe o assento mais distante ( distância euclidiana ) do ocupado mais próximo, ou se existirem vários - o primeiro deles em ordem de fila . A saída de uma matriz mostrando os assentos do pedido será eventualmente ocupada; ou seja, substitua os 0s por 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
O formato de E / S é flexível dentro das normas de golfe estabelecidas para o seu idioma. Você pode assumir que a entrada está correta, com tamanho de pelo menos 3x3 e não consiste inteiramente do mesmo valor booleano. Escreva uma função ou um programa completo. A solução mais curta por idioma é considerada a vencedora; nenhuma resposta será aceita. As brechas padrão são proibidas.
Respostas:
MATL , 37 bytes
Experimente online! Ou verifique todos os casos de teste . Você também pode querer ver o cinema sendo preenchido na arte ASCII.
Explicação
fonte
JavaScript (ES6),
156137 bytesGuardado 18 bytes graças a @ l4m2
Isso é bastante
map()
...Experimente online!
Comentado
fonte
b=b<(d=X*X--+Y*Y)|!v?b:d
v|b<=B
v|
é cuz desnecessário sev
entãob=0
Haskell ,
216213185184 bytesToma a entrada como uma matriz. Entrada e saída estão na ordem inversa. Crédito por magia de ponto fixo para Laikoni .
Experimente online!
fonte
until((==)=<<f)f
Python 2 ,
200187 bytesExperimente online!
-13 bytes thx para uma dica de Not that Charles , removendo a verificação desnecessária de células sendo 0.
fonte
,v,u
o final do gerador dentromax
, e você não precisa fazer,if a[v][u]<1
pois esses serão0
e, portanto, não serão máximos. Então minha linha é basicamente*_,y,x=max((min(...),-v,-u,v,u)for v,u in P)
*,v,u
caracteres NÃO economize contra o que--
você tem. :)if a[v][u]<1
é redundante (uma vez que as células diferentes de zero terá ummin()
dos0
).J ,
747060 bytesExperimente online!
fonte
APL (Dyalog) , 39 bytes
Obrigado Vacas charlatão por salvar um byte e ngn por salvar outro
Experimente online!
fonte
Gelatina , 43 bytes
Experimente online!
fonte
APL (Dyalog Unicode) , 44 bytes
Experimente online!
Solução alternativa em 44 bytes
fonte
Wolfram Language (Mathematica) , 121 bytes
Experimente online!
fonte
Clojure, 247 bytes
A entrada é um vec-de-vecs
M
, que é modificado em umloop
porassoc-in
. Quando nenhum ponto livre é encontrado (if-let
), o resultado é retornado.fonte
Geléia ,
35333029 bytesExperimente online!
Substituído
×ı+
poræị
(combinação complexa), uma nova díade baseada emj.
J, salvando um byte.Aqui está uma versão mais eficiente para o TIO. Experimente online!
Explicação
fonte
K (ngn / k) ,
8175737270 bytesExperimente online!
fonte