Kostki literowe są powszechne w grach słownych. Na przykład zabawne może być pisownia śmiesznych słów za pomocą kostek do gry. Jeśli złapiesz garść kości, są szanse, że nie będziesz w stanie przeliterować niektórych słów. To wyzwanie jest uogólnieniem tego pomysłu.
Wyzwanie
Biorąc pod uwagę listę kości, z których każda ma co najmniej 1 twarz i słowo, Twoim zadaniem jest ustalenie, czy możliwe jest przeliterowanie tego słowa za pomocą danej kości (w takim przypadku powinien on zwrócić prawdziwy wynik). Można użyć tylko jednej litery z każdej kości, a kości można użyć tylko raz. Nie musisz używać wszystkich podanych kości.
Przykłady
W trywialnym przykładzie z kostkami [[A], [C], [T]] i ciągiem CAT wynik jest prawdziwy. BAT oczywiście zwróciłoby wartość false, ponieważ nie ma na nich kości z literą B.
Jeśli podano [[A, E, I, O, U], [A, B, C, T], [N, P, R]] jako zestaw kostek, zwróciłbyś wartość true dla ART, TON i CUR , ale fałsz dla CAT, EAT i PAN, ponieważ te łańcuchy wymagają ponownego użycia kości. Powinno być również dość oczywiste, że CRAB nie może zostać przeliterowany za pomocą tych kości, ponieważ nie ma wystarczającej liczby kości.
Jeśli podano [[A, B, C], [A, E, I], [E, O, U], [L, N, R, S, T]] jako zestaw kości, byłbyś w stanie przeliteruj CAT, BEE, BEAN, TEA, BEET i BAN, ale nie będziesz w stanie przeliterować LONE, CAB, BAIL, TAIL, BAA lub TON
Mogą istnieć wielokrotności tej samej kości. Jeśli podano [[A, B, C], [A, B, C], [A, B, C]], byłbyś w stanie przeliterować CAB, BAA, AAA itp., Ale oczywiście nic bez A, B lub C.
Zasady
- Brak wykorzystania standardowych luk
- To jest golf golfowy , więc wygrywa najkrótszy kod.
- Możesz założyć, że zarówno słowa, jak i kości składają się wyłącznie z wielkich liter.
- Możesz założyć, że słowo zawsze będzie miało co najmniej 1 literę i że zawsze będzie co najmniej 1 kostka.
- Możesz założyć, że kostka nigdy nie będzie miała więcej niż jednej litery.
- Dane wejściowe i wyjściowe mogą być w dowolnym dogodnym formacie.
źródło
Odpowiedzi:
Brachylog , 5 bajtów
Wypróbuj online!
Używamy zmiennej wejściowej dla kości i zmiennej wyjściowej dla słowa. Wypisuje się,
true.
gdy można przeliterować słowo ifalse.
inaczej.Wyjaśnienie
źródło
Haskell ,
4844 bajtówTo anonimowa funkcja. Związany z jakimś identyfikatorem
f
może być użyty jakof "ART" ["AEIOU", "ABCT", "NPR"]
, co dajeTrue
. Wypróbuj online!Odpowiednikiem niepunktowym jest
mapM id
nad listą list korzysta zMonad
instancji list i może być postrzegana jako wybór niedeterministyczny . Tak więc np .mapM id ["AB","123"]
Plony["A1","A2","A3","B1","B2","B3"]
.Dla każdej z tych kombinacji kości sprawdzamy, czy różnica
(\\)
listowa danego słowa i kombinacji daje pustą listę.źródło
JavaScript (ES6), 68 bajtów
źródło
EEE
.Python 2 , 82 bajty
Wypróbuj online!
Łańcuch porównanie
w[0]in x>0<f(...)
jest równoznaczne z:w[0]in x
ix>0
i0<f(...)
.Drugi z nich jest zawsze prawdziwy (
str
>int
), a trzeci z nich jest równoważnyf(...)
, więc całość jest krótszym sposobem na napisaniew[0]in x and f(...)
źródło
JavaScript (ES6), 74 bajty
Trwa wejście w składni currying
(w)(a)
, gdzie w jest słowo szukamy i to lista ciągów opisujących kości. Zwraca 0 lub 1 .Wypróbuj online!
Skomentował
Przekształcamy każdą podzestaw permutacji kostek we wzór wyrażeń regularnych i testujemy je pod kątem słowa docelowego.
źródło
Łuska , 5 bajtów
Wypróbuj online!
Zwraca wartość niezerową, jeśli można przeliterować słowo, w przeciwnym razie zero.
Wyjaśnienie
źródło
Perl 5
-plF
,4846 bajtów@DomHastings zapisał 2 bajty
Wypróbuj online!
Wkład:
Wynik:
0
dla słowa, które nie jest sprawdzone. Każda dodatnia liczba całkowita dla sprawdzonego słowaW jaki sposób?
To objaśnienie patrzy na kod w kolejności wykonywania, skutecznie od prawej do lewej dla tego jednowierszowego.
źródło
JavaScript (Node.js) , 98 bajtów
Wypróbuj online!
Zakładając, że jest wystarczająco dużo kości
JavaScript (Node.js) , 100 bajtów
Wypróbuj online!
JavaScript (Node.js) , 99 bajtów
Wypróbuj online!
źródło
Galaretka ,
109 bajtów-1 dzięki Erikowi Outgolfer (użyj
w
zamiastẇ@
>. <)Dyadyczny link akceptujący listę list znaków po lewej stronie (kostki) i listę znaków po prawej stronie (słowo), która zwraca 1, jeśli to możliwe, i 0, jeśli nie.
Wypróbuj online! Lub zobacz pakiet testowy .
W jaki sposób?
Szybszy algorytm (także 9 bajtów):
Diadadicowe łącze z tym samym formatem wejściowym, które zwraca dodatnią liczbę całkowitą (prawda), jeśli to możliwe, i 0 (falsey) w przeciwnym razie.
źródło
R ,
192 185 135 117 111109 bajtówWypróbuj online!
-2 znaki dzięki Giuseppe.
źródło
F=
Pyth , 21 bajtów
Zestaw testowy
Wyjaśnienie:źródło