Soy un gran fanático del juego Creeper World, y especialmente la secuela. No necesitas saber cómo funciona este juego para responder la pregunta, solo quería mencionar de dónde se originó mi pregunta.
En el juego, tu objetivo es destruir los Emisores que están engendrando Creeper, usando un arma conocida como anuladora.
Los anuladores pueden destruir cualquier emisor en este radio:
eee
eeeee
eenee
eeeee
eee
Cada anulador PUEDE apuntar a múltiples Emisores.
Su objetivo
Dado un conjunto que simula un mapa 2D que consta de nada y emisores con los caracteres que desee, podrían ser espacios y e o números; solo asegúrese de que sean distinguibles, genere el mismo mapa con la cantidad óptima de anuladores n (o lo que desea ) colocado, de modo que los emisores se destruyan con la menor cantidad de anuladores.
Si hay varias formas óptimas de hacerlo, simplemente generar una estaría bien. Sin embargo, si la tarea no se puede resolver, digamos que hay tantos emisores que ningún diseño los alcanzará a todos, debe generar algo diferente, suficiente será nulo
Reglas rápidas:
- Entrada: matriz multidimensional
- La entrada contendrá dos caracteres, es decir, nada y emisor , incluye qué es qué en tu respuesta
- Salida: matriz multidimensional
- La salida contendrá tres caracteres, es decir, nada , emisor y anulador O una salida distinguible si la entrada no tiene solución
- Solo puede reemplazar el carácter de nada con un anulador
- Un anulador puede golpear a múltiples emisores, y siempre golpeará a todos los que estén dentro del rango
- Un anulador puede golpear en el área especificada anteriormente, y siempre golpeará a todos los emisores a los que pueda apuntar
- Las respuestas más cortas en bytes ganan
- lagunas estándar prohibidas
Ejemplos
Entrada:
[[ , ,e, , ],
[ , , , , ],
[e, , , ,e],
[ , , , , ],
[ , ,e, , ]]
Salida:
[[ , ,e, , ],
[ , , , , ],
[e, ,n, ,e],
[ , , , , ],
[ , ,e, , ]]
Entrada:
[[e,e,e,e,e],
[e, , , ,e],
[e, , , ,e],
[e, , , ,e],
[e,e,e,e,e]]
Salida:
[[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, ]]
Salida (esta salida está hecha a mano, y podría no ser la salida óptima):
[[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]]
Salida:
null
fuente
0
,1
y /2
o similar?Respuestas:
Python 3 ,
558511509 bytesPruébalo en línea!
Es muy complicado, pero no sé lo suficiente sobre Python para optimizarlo aún más. Aprendí algunas cosas de la respuesta de Ovs, así que fue divertido.
La entrada (modificada para facilitar la escritura de casos de prueba ) espera '' o 'e', mientras que la salida usa '', 'n' para el anulador y 'x' para un emisor anulado. La función toma la entrada esperada que se describió en la pregunta.
Establecí las variables e, w, ny d afuera porque podrían reemplazarse fácilmente con números y, si la entrada y la salida se modificaran para usar números también, imprimiría lo mismo. Usé letras porque lo hicieron más legible mientras trabajaba en él.
¡Pregunta divertida, OP! Creeper World es genial y fue una gran inspiración para la pregunta :)
Editar: -47 bytes gracias a Erik the Outgolfer
fuente
Python 2 ,
267263 bytesPruébalo en línea!
0
para emisor,2
para anulador y1
para espacio vacío.fuente
Wolfram Language (Mathematica) ,
173168bytesPruébalo en línea!
Resuelve el caso de prueba más grande en 1 segundo .
Programa completo Como función, es más corto, solo 130 bytes .
Use
,
0
para1
paran
y2
parae
.Este programa se puede usar para convertir desde el formato de entrada en el desafío.
Si no hay solución, imprimirá un mensaje de error
lpdim
como este olpsnf
como este .La versión que usa
Outer
(aunque más legible) es 2 bytes más larga, a pesar del nombre corto deOuter
: ¡ Pruébelo en línea!Explicación.
Tenga en cuenta que esto puede reducirse a un problema de programación lineal de enteros.
Cada
e
celda se fija en 2, cada celda vacía es una variable entera, que puede ser0
(vacía) o1
(anuladora). La lista de coordenadas de variables se almacena en variablep
. (laPosition
s ent
que está0
)El objetivo es minimizar el número de anuladores utilizados, por lo que la suma de esas variables enteras debe minimizarse. (
1&/@p
, un vector consiste en todos1
y con una longitud igual ap
la longitud, indica la función objetivo)2
q
Esto se formula con la matriz
m
=(xBoole[Norm[x-#]^2<6]&/@p)/@q
(para cada elemento enq
, cree una fila con elementos1
si la distancia al cuadrado (Norm
) a la coordenada correspondientep
es menor que6
) y el vectorb
=1&/@q
.Después de eso
ReplacePart
yThread
"aplica" los valores de las variablest
e imprímelo.fuente
Echo
se puede usar en lugar de,Print
pero la salida contiene un precedente>>
.1^p
no funciona (en lugar de1&/@p
).