Jestem wielkim fanem gry Creeper World, a zwłaszcza kontynuacji. Nie musisz wiedzieć, jak działa ta gra, aby odpowiedzieć na pytanie, chciałem tylko wspomnieć, skąd pochodzi moje pytanie.
W grze Twoim celem jest zniszczenie Emiterów, które spawnują Creeper, przy użyciu broni znanej jako nullifier.
Nullifier może zniszczyć dowolny emiter w tym promieniu:
eee
eeeee
eenee
eeeee
eee
Każdy zerujący MOŻE celować w wiele Emiterów.
Twój cel
Biorąc pod uwagę tablicę symulującą mapę 2D składającą się z niczego i emiterów z dowolnymi znakami, które mogą ci się spodobać, mogą to być spacje i litery e lub liczby - po prostu upewnij się, że można je rozróżnić, wypisz tę samą mapę z optymalną ilością nullifierów n (lub tego, co chcesz ), tak aby emitery były niszczone przy użyciu najmniejszej liczby elementów unieważniających.
Jeśli istnieje wiele optymalnych sposobów na zrobienie tego, samo wyjście byłoby w porządku. Jeśli jednak zadania nie da się rozwiązać, powiedzmy, że jest tak wiele emiterów, że żaden układ nigdy nie trafi na wszystkie z nich, musisz wydać coś wyraźnie odróżniającego, wystarczy null
Szybkie zasady:
- Dane wejściowe: tablica wielowymiarowa
- Dane wejściowe będą zawierać dwa znaki, co oznacza, że nic, a emiter , uwzględni to, co znajduje się w odpowiedzi
- Dane wyjściowe: tablica wielowymiarowa
- Dane wyjściowe będą zawierać trzy znaki, co oznacza nic , emiter i nullifier LUB rozpoznawalne dane wyjściowe, jeśli danych wejściowych nie można rozwiązać
- Możesz zamienić znak „ nic” na nullifier
- Nullifier może trafić do wielu emiterów i zawsze trafi wszystkie znajdujące się w zasięgu
- Nullifier może trafić w wskazany powyżej obszar i zawsze trafi we wszystkie emitery, na które może celować
- Najkrótsze odpowiedzi w bajtach wygrywają
- standardowe luki zabronione
Przykłady
Wejście:
[[ , ,e, , ],
[ , , , , ],
[e, , , ,e],
[ , , , , ],
[ , ,e, , ]]
Wynik:
[[ , ,e, , ],
[ , , , , ],
[e, ,n, ,e],
[ , , , , ],
[ , ,e, , ]]
Wejście:
[[e,e,e,e,e],
[e, , , ,e],
[e, , , ,e],
[e, , , ,e],
[e,e,e,e,e]]
Wynik:
[[e,e,e,e,e],
[e, ,n, ,e],
[e, , , ,e],
[e, ,n, ,e],
[e,e,e,e,e]]
Wejście:
[[e, , , , , , ,e, ,e, , , ,e, ,e, ,e, ,e],
[ , ,e, , ,e, , , ,e,e, , , , ,e, , , , ],
[ , ,e, , , ,e, ,e, ,e, ,e, ,e, ,e, , , ],
[e, , , ,e, ,e, , , , , , , , , , , ,e, ],
[e, , ,e, , , , , ,e, ,e, ,e, ,e, , , ,e],
[ , , ,e, ,e, ,e, , , , , , , , , ,e, , ],
[ ,e,e, ,e, , , ,e, ,e,e, ,e, ,e, ,e, , ],
[ , ,e, , , ,e, , , , , , , , ,e,e, ,e, ],
[ , , ,e, , , , ,e,e, , , , , , , , ,e, ],
[e, , , , , , ,e, , , ,e,e, ,e, , , , , ],
[ ,e,e, , ,e, , , , ,e, , , , , , ,e, , ],
[ , , ,e,e, ,e, ,e, , , ,e,e, ,e, ,e, ,e],
[e,e, , , , ,e, , , ,e, , , , , , , , , ],
[ , , ,e, , , , , ,e, , ,e, ,e, ,e, ,e, ],
[ , , , ,e, ,e, , , , , , , , , , , , , ],
[e,e, , ,e,e, , ,e, , ,e, ,e, ,e, ,e, ,e],
[e, ,e, ,e, , ,e,e,e, , ,e, , , ,e, , ,e],
[ , , , ,e, , , , , ,e, , , ,e, , , , , ],
[ , ,e, , , ,e, ,e, , , ,e, , , , ,e, , ],
[ , , ,e, ,e, ,e, , ,e,e, , ,e,e, , ,e, ]]
Wyjście (To wyjście jest wykonane ręcznie i może nie być optymalnym wyjściem):
[[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, ]]
Wejście:
[[e,e],
[e,e]]
Wynik:
null
źródło
0
,1
i2
czy podobna?Odpowiedzi:
Python 3 ,
558511509 bajtówWypróbuj online!
Jest bardzo zapętlony, ale nie wiem wystarczająco dużo o Pythonie, aby go dalej optymalizować. Nauczyłem się kilku rzeczy z odpowiedzi ovs, więc było fajnie.
Dane wejściowe (zmodyfikowane, aby ułatwić pisanie przypadków testowych ) oczekują „” lub „e”, podczas gdy dane wyjściowe używają „”, „n” dla nullifier i „x” dla nullified emiter. Funkcja przyjmuje oczekiwane dane wejściowe opisane w pytaniu.
Ustawiłem zmienne e, w, n i d na zewnątrz, ponieważ można je łatwo zastąpić liczbami, a jeśli dane wejściowe i wyjściowe zostałyby zmodyfikowane tak, aby używały również liczb, wydrukowałoby to samo. Użyłem liter, ponieważ dzięki temu były bardziej czytelne podczas pracy.
Zabawne pytanie, OP! Creeper World jest świetny i była fajną inspiracją do pytania :)
Edycja: -47 bajtów dzięki Erikowi Outgolfer
źródło
Python 2 ,
267263 bajtówWypróbuj online!
0
dla emitera,2
zerowania i1
pustej przestrzeni.źródło
Wolfram Language (Mathematica) ,
173168 bajtówWypróbuj online!
Rozwiązuje największy przypadek testowy w ciągu 1 sekundy .
Pełny program Jako funkcja jest krótsza, ma tylko 130 bajtów .
Użyj
,
0
dla1
dlan
i2
dlae
.Tego programu można użyć do konwersji z formatu wejściowego w wyzwaniu.
Jeśli istnieją żadne rozwiązanie nie będzie drukować komunikat o błędzie
lpdim
jak to , czylpsnf
jak ten .Wersja używająca
Outer
(choć bardziej czytelna) jest o 2 bajty dłuższa, pomimo krótkiej nazwyOuter
: Wypróbuj online!Wyjaśnienie.
Zauważ, że można to sprowadzić do problemu programowania liniowego na liczbach całkowitych.
Każda
e
komórka jest ustalona na 2, każda pusta komórka jest zmienną całkowitą, która może być0
(pusta) lub1
(nullifier). Lista współrzędnych zmiennych jest przechowywana w zmiennejp
. (Position
wt
tym jest0
)Celem jest zminimalizowanie liczby użytych zerowania, więc suma tych zmiennych całkowitych musi zostać zminimalizowana. (
1&/@p
wektor składa się ze wszystkich1
i ma długość równąp
długości, wskazuje funkcję celu)2
q
Jest to sformułowane z macierzą
m
=(xBoole[Norm[x-#]^2<6]&/@p)/@q
(dla każdego elementu wq
, utwórz wiersz z elementami,1
jeśli kwadratowa odległość (Norm
) do odpowiedniej współrzędnejp
jest mniejsza niż6
), a wektorb
=1&/@q
.Po tym
ReplacePart
iThread
„Dotyczy” wartości zmiennej,t
a następnie je wydrukować.źródło
Echo
można użyć zamiast,Print
ale dane wyjściowe zawierają poprzedzające>>
.1^p
nie działa (zamiast1&/@p
).