Istnieje prostokątna tablica 2D zawierająca wirusy oznaczone literą „v”, antidotum 1 oznaczone literą „a” i antidotum 2 oznaczone literą „b” (nie ma innych wartości niż „v”, „a” i „b”).
Antidotum 1 może zabijać sąsiednie wirusy tylko w kierunku poziomym i pionowym, ale antidotum 2 może zabijać sąsiednie wirusy (jeśli są) w kierunku poziomym, pionowym i ukośnym.
Po aktywowaniu antidotum, ile wirusów pozostanie na końcu?
Przykłady:
Wejście:
vv
vv
Wyjście: 4
Wejście:
av
vv
Wyjście: 1
Wejście:
vvv
vbv
vvv
Wyjście: 0
Wejście:
bvb
bav
vab
vvv
vvb
vvv
vvv
bva
vav
Wyjście: 3
Odpowiedzi:
Python 3 , 135 bajtów
Wypróbuj online!
-2 bajty dzięki Kevin Cruijssen
Wyjaśnienie
Zamienia wszystkie „v” na „b”, jeśli znajduje się obok „b”. Następnie zamienia wszystkie „v” na „c”, jeśli znajduje się obok „a”. Druga iteracja z transponowaną wersją macierzy usuwa wszystkie wirusy pionowe i ukośne. Wreszcie zwróci pozostałą liczbę „v”.
Jako bardziej czytelna funkcja rekurencyjna (155 bajtów)
źródło
y>1else
. Przyjemne podejście. Na początku nie byłem pewien, jak to działa z przekątnąb
, ale wydaje się, że działa dobrze ze względu na twoje zamienniki. :) +1 ode mnie.j=''.join
w ustalonej wersjiJavaScript (ES7), 108 bajtów
Pobiera dane wejściowe jako macierz znaków.
Wypróbuj online!
Podobnie jak w mojej pierwotnej odpowiedzi, ale wykonanie
V>'a'>(x-X)**2+y*y-2
jest w rzeczywistości 1 bajt krótsze niż użycie sztuczki heksadecymalnej opisanej poniżej. ¯ \ _ (ツ) _ / ¯JavaScript (ES7), 109 bajtów
Pobiera dane wejściowe jako macierz znaków.
Wypróbuj online!
W jaki sposób?
Biorąc pod uwagę współrzędne całkowite, wygląda to następująco:
W związku z tym:
Skomentował
źródło
05AB1E ,
333029 bajtówWypróbuj online lub sprawdź kilka innych przypadków testowych .
Port @Jitse „s Python 3 odpowiedzi , więc upewnij się, aby go upvote!
-1 bajt dzięki @Jitse .
Wyjaśnienie:
Zaletą starszej wersji jest możliwość skompresowania / transponowania listy ciągów, przy czym nowa wersja wymagałaby jawnego
S
iJ
, ponieważ działa tylko z listami znaków. Ale nowa wersja jest wciąż o 3 bajty krótsza dzięki€Â
kombinacji z krótszym skompresowanym łańcuchem. W starszej wersji€
zachowałaby tylko ostatnią wartość na stosie wewnątrz mapy, ale w nowej wersji zachowałaby wszystkie wartości na stosie wewnątrz mapy.Zobacz moją wskazówkę 05AB1E (sekcja Jak kompresować ciągi znaków, które nie są częścią słownika? ) Aby zrozumieć, dlaczego tak
.•s¯}˜?•
jest"vbvabbca"
.źródło
bc
=>ba
jeśli złożysz wniosekbv
=>ba
przedav
=>ac
. Tak więc.•6øнãI•
(skompresowana forma „bvavbaac”) wystarczy, oszczędzając 2 bajty..:
(zamień wszystko raz) zamiast:
(wciąż zamieniaj wszystko, dopóki nie będzie już obecny). Nadal -1. :) Dzięki, że dałeś mi znać.Java 10,
211209 bajtówModyfikacja mojej odpowiedzi na wyzwanie Wszystkie pojedyncze ósemki .
-2 bajty dzięki @ceilingcat .
Wypróbuj online.
Wyjaśnienie:
źródło
Węgiel drzewny , 39 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
Połącz ciągi wejściowe ze
\r
znakami i narysuj wynik na kanwie.Wyczyść liczbę żywych wirusów.
Pętla nad znakami na wejściu.
Jeśli obecna postać jest wirusem i nie ma sąsiadujących
b
s w żadnym kierunku luba
s ortogonalnie, zwiększ liczbę żywych wirusów.Powtórz z następną postacią.
Wyczyść płótno i wydrukuj całkowitą liczbę żywych wirusów.
źródło
Perl (
-00lp
), 82 bajtyUżywając wyrażenia regularnego, aby zastąpić
v
spacją, policzv
sTIO
źródło