Ich bin ein großer Fan des Spiels Creeper World und besonders der Fortsetzung. Sie müssen nicht wissen, wie dieses Spiel funktioniert, um die Frage zu beantworten. Ich wollte nur erwähnen, woher meine Frage stammt.
Im Spiel besteht Ihr Ziel darin, die Emittenten, die Creeper spawnen, mit einer als Nullifier bekannten Waffe zu zerstören.
Nullifier können jeden Emitter in diesem Radius zerstören:
eee
eeeee
eenee
eeeee
eee
Jeder Nuller KANN mehrere Emitter ansteuern.
Dein Ziel
Bei einem Array, das eine 2D-Karte simuliert, die aus Nichts und Emittern mit beliebigen Zeichen besteht, könnten Leerzeichen und e oder Zahlen sein - stellen Sie nur sicher, dass sie unterscheidbar sind, und geben Sie dieselbe Karte mit der optimalen Anzahl von Nullifizierern n aus (oder was Sie möchten) ) platziert, so dass die Emitter mit der geringsten Menge an Nullern zerstört werden.
Wenn es mehrere optimale Möglichkeiten gibt, wäre es in Ordnung, nur eine auszugeben. Wenn die Aufgabe jedoch nicht lösbar ist, wenn beispielsweise so viele Emitter vorhanden sind, dass kein Layout alle von ihnen trifft, müssen Sie ein deutlich unterschiedliches Element ausgeben. Null ist ausreichend
Kurzregeln:
- Eingabe: Mehrdimensionales Array
- Die Eingabe enthält zwei Zeichen, dh nichts, und der Sender enthält , was in Ihrer Antwort steht
- Ausgabe: Mehrdimensionales Array
- Die Ausgabe enthält drei Zeichen, dh nichts , Emitter und Nullifier ODER eine unterscheidbare Ausgabe, wenn die Eingabe nicht lösbar ist
- Sie dürfen das Zeichen nothing nur durch einen Nullifier ersetzen
- Ein Nullifier kann mehrere Emitter treffen und trifft immer alle, die sich in Reichweite befinden
- Ein Nuller kann in dem oben angegebenen Bereich treffen und trifft immer alle Emitter, auf die er zielen kann
- Kürzeste Antworten in Bytes gewinnen
- Standardlücken verboten
Beispiele
Eingang:
[[ , ,e, , ],
[ , , , , ],
[e, , , ,e],
[ , , , , ],
[ , ,e, , ]]
Ausgabe:
[[ , ,e, , ],
[ , , , , ],
[e, ,n, ,e],
[ , , , , ],
[ , ,e, , ]]
Eingang:
[[e,e,e,e,e],
[e, , , ,e],
[e, , , ,e],
[e, , , ,e],
[e,e,e,e,e]]
Ausgabe:
[[e,e,e,e,e],
[e, ,n, ,e],
[e, , , ,e],
[e, ,n, ,e],
[e,e,e,e,e]]
Eingang:
[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
[ , ,e, , ,e, , , ,e,e, , , , ,e, , , , ],
[ , ,e, , , ,e, ,e, ,e, ,e, ,e, ,e, , , ],
[e, , , ,e, ,e, , , , , , , , , , , ,e, ],
[e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
[ , , ,e, ,e, ,e, , , , , , , , , ,e, , ],
[ ,e,e, ,e, , , ,e, ,e,e, ,e, ,e, ,e, , ],
[ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
[ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
[e, , , , , , ,e, , , ,e,e, ,e, , , , , ],
[ ,e,e, , ,e, , , , ,e, , , , , , ,e, , ],
[ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
[e,e, , , , ,e, , , ,e, , , , , , , , , ],
[ , , ,e, , , , , ,e, , ,e, ,e, ,e, ,e, ],
[ , , , ,e, ,e, , , , , , , , , , , , , ],
[e,e, , ,e,e, , ,e, , ,e, ,e, ,e, ,e, ,e],
[e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
[ , , , ,e, , , , , ,e, , , ,e, , , , , ],
[ , ,e, , , ,e, ,e, , , ,e, , , , ,e, , ],
[ , , ,e, ,e, ,e, , ,e,e, , ,e,e, , ,e, ]]
Ausgabe (Diese Ausgabe ist handgemacht und möglicherweise nicht die optimale Ausgabe):
[[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, ]]
Eingang:
[[e,e],
[e,e]]
Ausgabe:
null
quelle
0
,1
und2
oder ähnliches?Antworten:
Python 3 ,
558511509 BytesProbieren Sie es online!
Es ist sehr umständlich, aber ich weiß nicht genug über Python, um es weiter zu optimieren. Aus der Antwort von ovs habe ich einiges gelernt, das hat Spaß gemacht.
Die Eingabe (geändert, um das Schreiben von Testfällen zu vereinfachen ) erwartet '' oder 'e', während die Ausgabe '', 'n' für Nullifier und 'x' für einen nullifizierten Emitter verwendet. Die Funktion übernimmt die erwartete Eingabe, die in der Frage beschrieben wurde.
Ich habe die Variablen e, w, n und d außerhalb gesetzt, da sie leicht durch Zahlen ersetzt werden können. Wenn die Eingabe und Ausgabe so geändert werden, dass auch Zahlen verwendet werden, wird das Gleiche ausgegeben. Ich habe Briefe verwendet, weil sie die Lesbarkeit bei der Arbeit verbessert haben.
Lustige Frage, OP! Creeper World ist großartig und es war eine coole Inspiration für die Frage :)
Edit: -47 Bytes dank Erik dem Outgolfer
quelle
Python 2 ,
267263 BytesProbieren Sie es online!
0
für Emitter,2
für Nullifier und1
für Leerraum.quelle
Wolfram Language (Mathematica) ,
173BytesProbieren Sie es online!
Löst den größten Testfall in 1 Sekunde .
Volles Programm. Als Funktion ist es kürzer, nur 130 Bytes .
Verwenden Sie
,
0
für1
fürn
und2
füre
.Dieses Programm kann das Eingabeformat in der Challenge konvertiert werden.
Wenn es keine Lösung ist , wird es Fehlermeldung aus,
lpdim
wie diese , oderlpsnf
wie diese .Die verwendete Version
Outer
(obwohl besser lesbar) ist 2 Byte länger, trotz des Kurznamens vonOuter
: Online ausprobieren!Erläuterung.
Beachten Sie, dass dies zu einem ganzzahligen linearen Programmierproblem führen kann.
Jede
e
Zelle ist fest auf 2 eingestellt, jede leere Zelle ist eine Ganzzahlvariable, die entweder0
(leer) oder1
(nullifier) sein kann. Die Liste der Koordinaten von Variablen wird in Variable gespeichertp
. (dasPosition
st
darin ist0
)Das Ziel besteht darin, die Anzahl der verwendeten Nullifier zu minimieren, sodass die Summe dieser ganzzahligen Variablen minimiert werden muss. (
1&/@p
Ein Vektor besteht aus allen1
und mit einer Länge, die gleich derp
Länge ist, gibt die Zielfunktion an.)Die Einschränkungen sind, dass für jeden Emitter (6-√ .
2
) (in dem seine Positionen gespeichert sindq
) mindestens ein Nuller im Bereich um ihn herum vorhanden sein muss, oder genauer gesagt, ein euklidischer Abstand von höchstensDies wird mit der Matrix
m
=(xBoole[Norm[x-#]^2<6]&/@p)/@q
(für jedes Element inq
, erstellen Sie eine Zeile mit Elementen,1
wenn der quadratische Abstand (Norm
) zur entsprechenden Koordinate inp
kleiner als6
) und der Vektorb
= ist1&/@q
.Danach
ReplacePart
undThread
„gilt“ die Variablenwertet
und ausdrucken.quelle
Echo
kann anstelle von verwendet werden,Print
aber die Ausgabe enthält ein vorangestelltes>>
.1^p
nicht (statt1&/@p
).