Sou um grande fã do jogo Creeper World, e principalmente da sequela. Você não precisa saber como esse jogo funciona para responder à pergunta. Eu só queria mencionar de onde minha pergunta se originou.
No jogo, seu objetivo é destruir os Emissores que estão gerando o Creeper, usando uma arma conhecida como anuladora.
Os anuladores podem destruir qualquer emissor neste raio:
eee
eeeee
eenee
eeeee
eee
Cada anulador PODE direcionar vários Emissores.
Seu objetivo
Dado que uma matriz que simula um mapa 2D que consiste em nada e emissores com os caracteres que você quiser, pode ser espaços e e ou números - apenas certifique-se de que sejam distinguíveis, produza o mesmo mapa com a quantidade ideal de nulificadores n (ou o que você gostaria ) colocados, para que os emissores sejam destruídos com a menor quantidade de anuladores.
Se houver várias maneiras ótimas de fazê-lo, apenas a saída de uma seria boa. Se, no entanto, a tarefa não for solucionável, digamos que haja tantos emissores que nenhum layout atinja todos eles, você deve gerar algo distintamente diferente; nulo será suficiente
Regras rápidas:
- Entrada: matriz multidimensional
- A entrada conterá dois caracteres, significando nada e emissor , inclua o que é o que está na sua resposta
- Saída: matriz multidimensional
- A saída conterá três caracteres, significando nada , emissor e anulador OU uma saída distinguível se a entrada for insolúvel
- Você só pode substituir o caractere nada por um nulo
- Um nulo pode atingir vários emissores e sempre atingirá todos os que estiverem dentro do alcance
- Um nulo pode atingir a área especificada acima e sempre atingirá todos os emissores que pode atingir
- As respostas mais curtas em bytes ganham
- brechas padrão proibidas
Exemplos
Entrada:
[[ , ,e, , ],
[ , , , , ],
[e, , , ,e],
[ , , , , ],
[ , ,e, , ]]
Resultado:
[[ , ,e, , ],
[ , , , , ],
[e, ,n, ,e],
[ , , , , ],
[ , ,e, , ]]
Entrada:
[[e,e,e,e,e],
[e, , , ,e],
[e, , , ,e],
[e, , , ,e],
[e,e,e,e,e]]
Resultado:
[[e,e,e,e,e],
[e, ,n, ,e],
[e, , , ,e],
[e, ,n, ,e],
[e,e,e,e,e]]
Entrada:
[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
[ , ,e, , ,e, , , ,e,e, , , , ,e, , , , ],
[ , ,e, , , ,e, ,e, ,e, ,e, ,e, ,e, , , ],
[e, , , ,e, ,e, , , , , , , , , , , ,e, ],
[e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
[ , , ,e, ,e, ,e, , , , , , , , , ,e, , ],
[ ,e,e, ,e, , , ,e, ,e,e, ,e, ,e, ,e, , ],
[ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
[ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
[e, , , , , , ,e, , , ,e,e, ,e, , , , , ],
[ ,e,e, , ,e, , , , ,e, , , , , , ,e, , ],
[ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
[e,e, , , , ,e, , , ,e, , , , , , , , , ],
[ , , ,e, , , , , ,e, , ,e, ,e, ,e, ,e, ],
[ , , , ,e, ,e, , , , , , , , , , , , , ],
[e,e, , ,e,e, , ,e, , ,e, ,e, ,e, ,e, ,e],
[e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
[ , , , ,e, , , , , ,e, , , ,e, , , , , ],
[ , ,e, , , ,e, ,e, , , ,e, , , , ,e, , ],
[ , , ,e, ,e, ,e, , ,e,e, , ,e,e, , ,e, ]]
Saída (esta saída é feita à mão e pode não ser a saída ideal):
[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
[ , ,e, , ,e, , ,n,e,e, , , ,n,e, , , , ],
[ ,n,e, , ,n,e, ,e, ,e, ,e, ,e, ,e, ,n, ],
[e, , , ,e, ,e, , , , , , , , , , , ,e, ],
[e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
[ , ,n,e, ,e, ,e, , , ,n, , , , , ,e, , ],
[ ,e,e, ,e, ,n, ,e, ,e,e, ,e, ,e,n,e, , ],
[ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
[ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
[e, ,n, , , , ,e, , , ,e,e, ,e, , , , , ],
[ ,e,e, , ,e,n, , ,n,e, , , ,n, , ,e,e, ],
[ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
[e,e, , , , ,e, , , ,e, , , , , , , , , ],
[ , , ,e, ,n, , , ,e, , ,e, ,e, ,e, ,e, ],
[ ,n, , ,e, ,e, , , , , , , ,n, , , ,n, ],
[e,e, , ,e,e, , ,e,n, ,e, ,e, ,e, ,e, ,e],
[e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
[ , , , ,e, , , , , ,e, ,n, ,e, , ,n, , ],
[ , ,e, ,n, ,e, ,e, , , ,e, ,n, , ,e, , ],
[ , , ,e, ,e, ,e, ,n,e,e, , ,e,e, , ,e, ]]
Entrada:
[[e,e],
[e,e]]
Resultado:
null
fonte
0
,1
e2
ou similar?Respostas:
Python 3 ,
558511509 bytesExperimente online!
É muito maluco, mas não sei o suficiente sobre o Python para otimizá-lo ainda mais. Eu aprendi algumas coisas com a resposta da ovs, então isso foi divertido.
A entrada (modificada para facilitar a gravação de casos de teste ) espera '' ou 'e', enquanto a saída usa '', 'n' para o nulo e 'x' para um emissor nulo. A função aceita a entrada esperada que foi descrita na pergunta.
Defino as variáveis e, w, ne de fora, porque elas poderiam ser facilmente substituídas por números e, se a entrada e a saída fossem modificadas para usar números também, seria impressa a mesma coisa. Eu usei letras porque elas tornaram mais legível enquanto trabalhava nela.
Pergunta divertida, OP! O Creeper World é ótimo e foi uma inspiração legal para a pergunta :)
Edit: -47 bytes graças a Erik, o Outgolfer
fonte
Python 2 ,
267263 bytesExperimente online!
0
para emissor,2
para nullifier e1
para espaço vazio.fonte
Wolfram Language (Mathematica) ,
173168 bytesExperimente online!
Resolve o maior caso de teste em 1 segundo .
Programa completo. Como função, é mais curto, apenas 130 bytes .
Use
,
0
para1
paran
e2
parae
.Este programa pode ser usado para converter do formato de entrada no desafio.
Se não houver nenhuma solução vai imprimir mensagem de erro
lpdim
como este , oulpsnf
como este .A versão que usa
Outer
(embora seja mais legível) tem mais 2 bytes, apesar do nome abreviado deOuter
: Experimente online!Explicação.
Observe que isso pode ser reduzido a um problema de programação linear inteira.
Cada
e
célula é fixada em 2, cada célula vazia é uma variável inteira, que pode ser0
(vazia) ou1
(anuladora). A lista de coordenadas de variáveis são armazenados na variávelp
. (oPosition
s emt
que é0
)O objetivo é minimizar o número de nulificador usado, portanto, a soma dessas variáveis inteiras deve ser minimizada. (
1&/@p
, um vetor consiste em todos1
e com comprimento igual aop
comprimento, indica a função objetivo)2
q
Isso é formulado com a matriz
m
=(xBoole[Norm[x-#]^2<6]&/@p)/@q
(para cada elemento emq
, crie uma linha com elementos sendo1
se a distância ao quadrado (Norm
) da coordenada correspondente emp
for menor que6
) e o vetorb
=1&/@q
.Depois disso
ReplacePart
eThread
"aplica" os valores da variávelt
e a imprime.fonte
Echo
pode ser usado em vez de,Print
mas a saída contém um precedente>>
.1^p
não funciona (em vez de1&/@p
).