Nonary Game to fikcyjna gra rozgrywana w trylogii gier wideo o tej samej nazwie. Twoim celem jest ustalenie, ilu graczy (w najlepszym wypadku) może uciec z danej gry, przy jak najmniejszej liczbie bajtów kodu.
Zasady gry
- Jest 9 graczy, ponumerowanych od 1 do 9.
- Wszyscy gracze zaczynają w tym samym pokoju.
- Istnieje dowolna liczba drzwi, każda z liczbą od 1 do 9. Mogą istnieć duplikaty lub brakujące numery drzwi.
- Drzwi stanowią jednokierunkowe połączenia między pokojami. Każdych drzwi można użyć tylko raz .
- Tylko grupy od 3 do 5 graczy mogą przejść przez drzwi.
- Grupa może przejść przez drzwi tylko wtedy, gdy suma ich liczb modulo 9 odpowiada liczbie drzwi modulo 9.
- Każdy gracz, który przejdzie przez 9 drzwi, ucieka (wygrywa).
Przykłady
┌───┬───┬───┐
│ 6 4 9
│ < │ | |
│ 3 5 9
└───┴───┴───┘
<
reprezentuje punkt początkowy. Wszyscy gracze zaczynają od tego miejsca.
W tym otoczeniu każdy może uciec. Istnieją różne sposoby osiągnięcia tego celu, z których jeden to:
- [1, 2, 3, 4, 5] przechodzą przez drzwi 6 ((1 + 2 + 3 + 4 + 5)% 9 = 6), podczas gdy [6, 7, 8, 9] przechodzą przez drzwi 3 ((6 + 7 + 8 + 9)% 9 = 3). Wszyscy spotykają się w drugim pokoju.
- [1, 2, 3, 7] przechodzą przez drzwi 4, a [4, 5, 6, 8, 9] przechodzą przez drzwi 5.
- [1, 2, 3, 4, 8] przejdź przez jedne z 9 drzwi, [5, 6, 7, 9] przejdź przez drugie.
┌───┬───┐
│ │ |
│ < 8 9
│ │ |
└───┴───┘
Tym razem maksymalnie 4 osoby mogą uciec:
- [1, 3, 5, 8, 9] przejdź przez drzwi 8.
- [1, 3, 5, 9] przejdź przez drzwi 9.
Możliwe są inne listy ocalałych, takie jak [2, 3, 4] lub [1, 4, 6, 7], ale nie ma możliwości ucieczki więcej niż 4 osób.
Wyzwanie
Podając mapę, wypisz maksymalną liczbę graczy, którzy mogą uciec.
- Nie martw się, nie musisz analizować moich okropnych diagramów! Dane wejściowe to nakierowany wykres, który można przedstawić w dowolnym dogodnym formacie (zestaw krawędzi, macierz przylegania ...).
- Jeśli Twoja reprezentacja wymaga etykiet dla pomieszczeń, możesz użyć dowolnego spójnego zestawu wartości. Jednak drzwi muszą być reprezentowane przez liczby całkowite od 1 do 9.
- Wejście zawsze będzie miało co najmniej jedne 9 drzwi. Wszystkie 9 drzwi zawsze prowadzą do wyjścia, podczas gdy inne drzwi nigdy nie.
- Twoje zgłoszenie może być funkcją lub pełnym programem.
- Standardowe luki są zabronione.
Przypadki testowe
Wejścia są pokazane jako listy trojetów [numer drzwi, z pokoju do pokoju], przy czym 0 oznacza pokój początkowy, a -1 wyjście. Jeśli zdecydujesz się użyć innego formatu, będziesz musiał odpowiednio je przekonwertować.
Input Output
[[6, 0, 1], [3, 0, 1], [4, 1, 2], [5, 1, 2], [9, 2, -1], [9, 2, -1]] 9
[[8, 0, 1], [9, 1, -1]] 4
[[9, 0, -1]] 5
[[2, 0, 1], [1, 1, 2], [9, 2, -1]] 0
[[2, 0, 1], [3, 1, 2], [9, 2, -1]] 3
[[1, 0, 1], [9, 1, -1], [1, 0, 2], [9, 2, -1]] 4
[[2, 0, 1], [3, 0, 1], [5, 1, 2], [4, 0, 2], [9, 2, -1], [9, 2, -1]] 8
[[3, 0, 1], [4, 0, 1], [5, 0, 1], [9, 1, -1], [7, 1, 2], [9, 2, -1]] 7
[[1, 0, 1], [2, 0, 1], [4, 0, 1], [9, 1, -1], [8, 1, 2], [9, 2, -1]] 6
[[6, 0, 1], [7, 0, 1], [9, 1, -1], [9, 1, -1]] 7
Odpowiedzi:
JavaScript (ES6), 219 bajtów
Wolniejsza, ale znacznie krótsza wersja wykorzystująca maski bitowe zamiast łańcuchów.
Wypróbuj online!
Uwaga: Powodem, dla którego jest wolniejszy, jest to, że nie obliczamy zestawów mocy graczy. Biorąc pod uwagę maskę bitową graczy , iterujemy na wszystkich nazwa dla bez deduplikacji.X (XANDp) 0≤p≤X
JavaScript (ES7),
293 272271 bajtówPobiera dane wejściowe w formacie opisanym w wyzwaniu. To jest poszukiwanie brutalnej siły.
Wypróbuj online! (limit czasu pierwszego przypadku testowego w TIO)
W jaki sposób?
Tablica
P[]
zawiera listę ciągów znaków opisujących graczy w każdym pokoju.Zaczynamy od176=24137569 0
P=['241375698']
(używając ), co oznacza, że wszyscy gracze początkowo znajdują się w pokoju .Dla każdego pomieszczenia
X
na miejscur
obliczamy zestaw mocyX
:Dla każdej grupy graczy
p
tam i dla każdych drzwi[d,s,t]
o indeksiej
sprawdzamy, czy grupa nie jest w stanie przejść przez drzwi:Jeśli grupa może przejść, wykonujemy połączenie rekurencyjne:
Śledzimy maksymalną liczbę uciekających graczy
m
i ostatecznie ją zwracamy.źródło
Galaretka , 76 bajtów
Wypróbuj online!
Pełny program przyjmujący pojedynczy argument, ukierunkowany wykres wykorzystujący pokoje 1, 2, ... i 0 jako wyjście. Zwraca liczbę całkowitą, która jest maksymalną liczbą, jaką można uciec. Pełne wyjaśnienie do naśladowania.
Powinien biec bez
Ṣ€€Q
oszczędzania 4 bajtów, ale wolno odpoczywa.źródło