W Keep Talking and Nobody Explodes gracze mają za zadanie rozbroić bomby na podstawie informacji od swoich „ekspertów” (innych osób posiadających instrukcję). Każda bomba składa się z modułów, z których jednym mogą być hasła, przy czym ekspert otrzymuje listę możliwych haseł o długości wszystkich pięciu liter:
about after again below could
every first found great house
large learn never other place
plant point right small sound
spell still study their there
these thing think three water
where which world would write
Gracz otrzymuje listę 6 możliwych liter dla każdego miejsca w haśle. Biorąc pod uwagę możliwe kombinacje liter, wpisz poprawne hasło. Dane wejściowe mogą mieć dowolny rozsądny format (tablica 2D, ciąg oddzielony znakiem nowej linii itp.) Możesz zdyskontować kod, którego używasz do kompresowania / generowania listy / łańcucha / tablicy / dowolnego hasła. (Dzięki @DenkerAffe)
UWAGA: Hasła nie uwzględniają wielkości liter. Możesz założyć, że dane wejściowe rozwiążą się tylko dla jednego hasła.
Przykłady / przypadki testowe
Dane wejściowe będą reprezentowane jako tablica ciągów.
["FGARTW","LKSIRE","UHRKPA","TGYSTG","LUOTEU"] => first
["ULOIPE","GEYARF","SHRGWE","JEHSDG","EJHDSP"] => large
["SHWYEU","YEUTLS","IHEWRA","HWULER","EUELJD"] => still
<
w moim rozwiązaniu Bash.Odpowiedzi:
Pyth, 13 bajtów
Zestaw testowy.
źródło
Bash, 22 bajty
Uruchom tak:
źródło
fold -5<<<ABOUTAFTERAGAINBELOWCOULDEVERYFIRSTFOUNDGREATHOUSELARGELEARNNEVEROTHERPLACEPLANTPOINTRIGHTSMALLSOUNDSPELLSTILLSTUDYTHEIRTHERETHESETHINGTHINKTHREEWATERWHEREWHICHWORLDWOULDWRITE|grep `printf [%s] $@`
JavaScript (ES6), 62 bajty
53 bajty w przeglądarce Firefox 48 lub wcześniejszej:
Byłoby 49 bajtów, gdyby nie wymóg rozróżniania wielkości liter:
Pokaż fragment kodu
źródło
Brachylog , 25 bajtów
Niepoliczone bajty to tablica słów, w tym nawiasy kwadratowe.
Wyjaśnienie
źródło
Rubinowy,
484239 bajtówPo zakończeniu jest bardzo podobny do rozwiązania Pyth,
ale bezdo tego stopnia, że jest to w zasadzie bezpośredni port.%s
formatowaniaJeśli podajesz tylko wynik
puts
, nie potrzebujesz go[0]
na końcu, ponieważputs
sobie z tym poradzisz.W przypadkach testowych:
źródło
JavaScript (ES6), 71 bajtów
Stosowanie:
źródło
Python,
646057 bajtówKod, aby utworzyć listę słów
w
jako ciąg, słowa są rozdzielane spacjami (bajty są pomijane od długości kodu rozwiązania):Aktualne rozwiązanie (57 bajtów): zapisane 3 bajty dzięki @RootTwo
Ta funkcja przyjmuje
tuple
(nielist
!) Dokładnie 5 ciągów, które reprezentują możliwe litery dla każdego znaku hasła jako dane wejściowe.Zobacz ten kod działający na ideone.com
Druga wersja (60 bajtów):
Ta funkcja przyjmuje
tuple
(nielist
!) Dokładnie 5 ciągów, które reprezentują możliwe litery dla każdego znaku hasła jako dane wejściowe.Zobacz ten kod działający na ideone.com
Pierwsza wersja (64 bajty):
Ta funkcja pobiera dowolną iterowalną (np.
list
Lubtuple
) dokładnie 5 ciągów, które reprezentują możliwe litery dla każdego znaku hasła jako dane wejściowe.Zobacz ten kod działający na ideone.com
źródło
"(?i)\\b"+"[%s]"*5%a
w=...
wierszem kodu: „ Rzeczywiste rozwiązanie (57 bajtów, dzięki @RootTwo zaoszczędzono 3 bajty): ”Hoon , 125 bajtów
Nie golfowany:
Hoon nie ma wyrażenia regularnego, tylko system kombinatora parserów. To sprawia, że wszystko jest dość skomplikowane: z
(mask "abc")
grubsza przekłada się na wyrażenia regularne[abc]
i jest rdzeniem parsera, który budujemy.;~(plug a b)
jest monadycznym połączeniem dwóch parserów++plug
, które musi parsować pierwszy, a następnie drugi, bo inaczej się nie powiedzie.++knee
służy do budowy rekurencyjnego analizatora składni; dajemy mu typ (*tape
) wyniku i wywołanie zwrotne do wywołania w celu wygenerowania rzeczywistego analizatora składni. W takim przypadku wywołanie zwrotne to „ponownie wywołać całe zamknięcie, ale zamiast tego z ogonem listy”. W?~
runiczne testy lista jest pusta, a daje(easy ~)
(nie robić nic i zwrot składniowy ~) lub dodaje na innymask
i recurse ponownie.Po zbudowaniu parsera możemy zacząć z niego korzystać.
++skip
usuwa wszystkie elementy listy, dla których funkcja zwraca „tak”.++rust
próbuje przeanalizować element z naszą regułą, zwracającunit
która jest albo[~ u=result]
albo~
(nasza wersja Haskella może). Jeśli jest~
(Brak, a reguła albo nie parsowała albo nie parsowała całej zawartości), wówczas funkcja zwraca true, a element jest usuwany.Pozostała tylko lista zawierająca tylko słowo, w którym każda litera jest jedną z podanych opcji. Zakładam, że lista haseł znajduje się już w kontekście pod nazwą
pass
.źródło
Python 3, 81 bajtów
Anonimowa funkcja, która pobiera dane z listy ciągów
x
i zwraca hasło.Lista możliwych haseł
l
jest zdefiniowana jako:To prosta brutalna siła; Byłem zainteresowany, aby zobaczyć, jak krótko mogę to zrobić bez wyrażeń regularnych.
Jak to działa
Wypróbuj na Ideone
źródło