Es gibt ein rechteckiges 2D-Array, das Viren enthält, die mit 'v' bezeichnet sind, Antidot1, das mit 'a' bezeichnet ist, und Antidot2, das mit 'b' bezeichnet wird (es gibt keine anderen Werte als 'v', 'a' und 'b').
Antidot1 kann benachbarte Viren nur in horizontaler und vertikaler Richtung abtöten, Antidot2 kann jedoch benachbarte (falls vorhanden) Viren in horizontaler, vertikaler und diagonaler Richtung abtöten.
Wie viele Viren bleiben nach Aktivierung der Gegenmittel am Ende übrig?
Beispiele:
Eingang:
vv
vv
Ausgabe: 4
Eingang:
av
vv
Ausgabe: 1
Eingang:
vvv
vbv
vvv
Ausgabe: 0
Eingang:
bvb
bav
vab
vvv
vvb
vvv
vvv
bva
vav
Ausgabe: 3
Antworten:
Python 3 , 135 Bytes
Probieren Sie es online aus!
-2 Bytes dank Kevin Cruijssen
Erläuterung
Ersetzt alle 'v' durch 'b', wenn sie neben 'b' gefunden werden. Ersetzt als Nächstes alle 'v' durch 'c', wenn sie neben 'a' gefunden werden. Eine zweite Iteration mit der transponierten Version des Arrays löscht alle vertikalen und diagonalen Viren. Schließlich wird die verbleibende Anzahl von 'v' zurückgegeben.
Als besser lesbare rekursive Funktion (155 Bytes)
quelle
y>1else
. Netter Ansatz. Anfangs war ich mir nicht sicher, wie dies mit der Diagonale umgehtb
, aber das scheint aufgrund Ihrer Ersetzungen gut zu funktionieren. :) +1 von mir.j=''.join
in Ihrer festen VersionJavaScript (ES7), 108 Byte
Nimmt die Eingabe als Matrix von Zeichen auf.
Probieren Sie es online aus!
Ähnlich wie bei meiner ursprünglichen Antwort, aber dies
V>'a'>(x-X)**2+y*y-2
ist tatsächlich 1 Byte kürzer als bei Verwendung des unten beschriebenen Hexa-Tricks. ¯ \ _ (ツ) _ / ¯JavaScript (ES7), 109 Byte
Nimmt die Eingabe als Matrix von Zeichen auf.
Probieren Sie es online aus!
Wie?
Unter Berücksichtigung ganzzahliger Koordinaten sieht es wie folgt aus:
Deshalb:
Kommentiert
quelle
05AB1E ,
333029 BytesProbieren Sie es online aus oder überprüfen Sie einige weitere Testfälle .
Port of @Jitses Python 3-Antwort , also stellen Sie sicher, dass Sie ihn positiv bewerten!
-1 Byte dank @Jitse .
Erläuterung:
Die Legacy-Version hat den Vorteil, dass sie eine String-Liste komprimieren / transponieren kann, wobei die neue Version eine explizite
S
und benötigen würdeJ
, da sie nur mit Zeichenlisten funktioniert. Die neue Version ist jedoch immer noch 3 Byte kürzer, wenn sie€Â
in Kombination mit einer kürzeren komprimierten Zeichenfolge verwendet wird. In der Legacy-Version wird€
nur der letzte Wert auf dem Stapel in der Karte beibehalten, in der neuen Version werden jedoch alle Werte auf dem Stapel in der Karte beibehalten.Lesen Sie diesen 05AB1E-Tipp von mir (Abschnitt Komprimieren von Zeichenfolgen, die nicht Teil des Wörterbuchs sind? ) , Um zu verstehen, warum dies so
.•s¯}˜?•
ist"vbvabbca"
.quelle
bc
=>,ba
wenn Sie sich bewerbenbv
=>ba
vorav
=>ac
. Somit ist.•6øнãI•
(komprimierte Form von "bvavbaac") ausreichend, um 2 Bytes zu sparen..:
(alle einmal ersetzen) anstatt:
(alle so lange ersetzen, bis sie nicht mehr vorhanden ist). Trotzdem -1. :) Danke für die Information.Java 10,
211209 BytesÄnderung meiner Antwort für die Herausforderung All the Single Eights .
-2 Bytes dank @ceilingcat .
Probieren Sie es online aus.
Erläuterung:
quelle
Holzkohle , 39 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Verbinden Sie die Eingabezeichenfolgen mit
\r
Zeichen und zeichnen Sie das Ergebnis auf die Leinwand.Löschen Sie die Anzahl der lebenden Viren.
Schleife über die Zeichen in der Eingabe.
Wenn das aktuelle Zeichen ein Virus ist und keine benachbarten
b
s in irgendeiner Richtung odera
orthogonal vorhanden sind, erhöhen Sie die Anzahl der lebenden Viren.Wiederholen Sie mit dem nächsten Zeichen.
Löschen Sie die Leinwand und drucken Sie die Gesamtzahl der lebenden Viren.
quelle
Perl (
-00lp
), 82 BytesVerwenden Sie Regex, um
v
durch Leerzeichen zu ersetzen , und zählen Sie dann diev
sTIO
quelle