Je suis un grand fan du jeu Creeper World, et surtout de la suite. Vous n'avez pas besoin de savoir comment ce jeu fonctionne pour répondre à la question, je voulais juste mentionner l'origine de ma question.
Dans le jeu, votre objectif est de détruire les émetteurs qui engendrent Creeper, en utilisant une arme connue sous le nom d'annulation.
Les annulateurs peuvent détruire n'importe quel émetteur dans ce rayon:
eee
eeeee
eenee
eeeee
eee
Chaque annuleur PEUT cibler plusieurs émetteurs.
Votre objectif
Étant donné un tableau simulant une carte 2D composée de rien et d' émetteurs avec les caractères que vous aimez, pourraient être des espaces et des e ou des nombres - assurez-vous simplement qu'ils sont distinguables, sortez la même carte avec le nombre optimal d'annulateurs n (ou ce que vous souhaitez ) placés, afin que les émetteurs soient détruits avec le moins de nullifiants.
S'il existe plusieurs façons optimales de le faire, il suffit de produire un seul. Si, cependant, la tâche n'est pas résoluble, disons qu'il y a tellement d'émetteurs qu'aucune disposition ne les touchera tous, vous devez sortir quelque chose de différent, null suffira
Règles rapides:
- Entrée: tableau multidimensionnel
- L'entrée contiendra deux caractères, ce qui signifie rien et l' émetteur , incluez ce qui est quoi dans votre réponse
- Sortie: tableau multidimensionnel
- La sortie contiendra trois caractères, ce qui signifie rien , l' émetteur et l' annuleur OU une sortie distincte si l'entrée est insoluble
- Vous ne pouvez remplacer le caractère rien par un nullificateur
- Un annuleur peut toucher plusieurs émetteurs et touchera toujours tous ceux qui sont à portée
- Un nullificateur peut frapper dans la zone spécifiée ci-dessus et frappera toujours tous les émetteurs qu'il peut cibler
- Les réponses les plus courtes en octets gagnent
- échappatoires standard interdites
Exemples
Contribution:
[[ , ,e, , ],
[ , , , , ],
[e, , , ,e],
[ , , , , ],
[ , ,e, , ]]
Production:
[[ , ,e, , ],
[ , , , , ],
[e, ,n, ,e],
[ , , , , ],
[ , ,e, , ]]
Contribution:
[[e,e,e,e,e],
[e, , , ,e],
[e, , , ,e],
[e, , , ,e],
[e,e,e,e,e]]
Production:
[[e,e,e,e,e],
[e, ,n, ,e],
[e, , , ,e],
[e, ,n, ,e],
[e,e,e,e,e]]
Contribution:
[[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, ]]
Sortie (cette sortie est faite à la main et peut ne pas être la sortie optimale):
[[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, ]]
Contribution:
[[e,e],
[e,e]]
Production:
null
la source
0
,1
et2
ou similaire?Réponses:
Python 3 ,
558511509 octetsEssayez-le en ligne!
C'est très bouclé, mais je ne connais pas suffisamment Python pour l'optimiser davantage. J'ai appris certaines choses de la réponse des ovules, donc c'était amusant.
L'entrée (modifiée pour faciliter l'écriture des cas de test ) attend '' ou 'e', tandis que la sortie utilise '', 'n' pour nullifier et 'x' pour un émetteur annulé. La fonction prend l'entrée attendue décrite dans la question.
J'ai défini les variables e, w, n et d à l'extérieur car elles pourraient être facilement remplacées par des nombres et, si l'entrée et la sortie étaient également modifiées pour utiliser des nombres, cela imprimerait la même chose. J'ai utilisé des lettres parce qu'elles les rendaient plus lisibles tout en travaillant dessus.
Question amusante, OP! Creeper World est génial et c'était une bonne inspiration pour la question :)
Edit: -47 octets grâce à Erik l'Outgolfer
la source
Python 2 ,
267263 octetsEssayez-le en ligne!
0
pour l'émetteur,2
pour l'annulateur et1
pour l'espace vide.la source
Langue Wolfram (Mathematica) ,
173168 octetsEssayez-le en ligne!
Résout le plus grand cas de test en 1 seconde .
Programme complet. En fonction, il est plus court, seulement 130 octets .
Utilisez
,
0
pour1
pourn
et2
poure
.Ce programme peut être utilisé pour convertir à partir du format d'entrée dans le défi.
S'il n'y a pas de solution, il affichera un message d'erreur
lpdim
comme celui -ci oulpsnf
comme ceci .La version utilisant
Outer
(bien que plus lisible) est plus longue de 2 octets, malgré le nom court deOuter
: Essayez-le en ligne!Explication.
Notez que cela peut être réduit à un problème de programmation linéaire entier.
Chaque
e
cellule est fixée à 2, chaque cellule vide est une variable entière, qui peut être0
(vide) ou1
(nullifier). La liste des coordonnées des variables est stockée dans variablep
. (lePosition
s danst
c'est0
)L'objectif est de minimiser le nombre de nullificateurs utilisés, de sorte que la somme de ces variables entières doit être minimisée. (
1&/@p
, un vecteur composé de tous1
et de longueur égale àp
la longueur de, indique la fonction objectif)Les contraintes sont, pour chaque émetteur (6–√
2
) (leurs positions sont stockées dansq
), il doit y avoir au moins un nullificateur dans la plage qui l'entoure, ou pour être précis, avoir une distance euclidienne à lui d'au plus .Ceci est formulé avec la matrice
m
=(xBoole[Norm[x-#]^2<6]&/@p)/@q
(pour chaque élément dansq
, créez une ligne avec les éléments étant1
si la distance au carré (Norm
) à la coordonnée correspondante enp
est inférieure à6
) et le vecteurb
=1&/@q
.Après cela
ReplacePart
etThread
"applique" les valeurs des variables àt
et l'imprimer.la source
Echo
peut être utilisé à la place dePrint
mais la sortie contient un précédent>>
.1^p
ne fonctionne pas (au lieu de1&/@p
).