Jaki jest najkrótszy sposób, aby sprawdzić, czy dane wejściowe to wordinian przy użyciu dowolnego języka programowania?
Wordinian to słowo, które zawiera słowa o długości od 1 do pierwotnego słowa. Na przykład,
kosz
„Ja” to słowo
„w” to słowo
„bin” to słowo
Lub,
etap
„a” to słowo
„ta” to słowo ( tak to jest )
„wiek” to słowo
„jeleń” to słowo
„etap” to słowo
Wejście
Twój kod powinien przyjmować słowo i słownik jako dane wejściowe, w dowolnym rozsądnym formacie.
Wynik
Wynik powinien być wartością wskazującą na prawda lub fałsz, aby powiedzieć nam, czy słowo jest słowem.
Aby uzyskać więcej informacji o Wordinians, kliknij tutaj .
Oto lista słów , których będę używać jako danych wejściowych i słów podrzędnych. Ponadto w odpowiedzi na @xnor musi zawierać słowa podrzędne każdej długości, a nie ciąg słów podrzędnych. Pamiętaj, że tylko jedno słowo zostanie użyte jako dane wejściowe.
źródło
Odpowiedzi:
Pyth,
2016151311 bajtówDzięki Leaky Nun za zaoszczędzenie 4 bajtów! Niestety później zmieniłem całą metodę, ale nadal pomogło.
Oczekuje wprowadzenia jako słownika, po którym następuje słowo. Wyprowadza wartość True lub False.
Wypróbuj tutaj!
Wyjaśnienie:
Nie działa to, jeśli pusty ciąg
""
jest prawidłowym słowem.źródło
.E
można zastąpić przezs
m}kH
można zastąpić przez}RH
Python, 52 bajty
Anonimowa funkcja, która pobiera słowo
w
i słownikd
. Bierze słowa,d
które są podciągamiw
, tworzy zestaw ich długości, a następnie sprawdza, czy jest tyle różnych długości, ile jest literw
.źródło
[
zamiast{
.{...}
jest kompletnym rozumieniem (Taki sam jakset([...])
).Python 3, 108 bajtów
Anonimowa funkcja, która pobiera za pomocą argumentu słowo
w
jako ciąg znaków, a słownikd
jako listę ciągów znaków i zwracaTrue
lubFalse
.Jak to działa
Pierwszym krokiem jest zrozumienie listy, która generuje listę list wszystkich podciągów
w
wykluczaniaw
, pogrupowanych według długości. Na przykład'stage'
lista[['s', 't', 'a', 'g', 'e'], ['st', 'ta', 'ag', 'ge'], ['sta', 'tag', 'age'], ['stag', 'tage']]
jest generowana. Osiąga się to poprzez zapętlenie wszystkich prawidłowych indeksów początkowychi
dla każdej długości podciągus
i pocięcies
za pomocą podciągu każdej długościw[i:i+s]
. Dla każdej listy na tej liście sprawdzana jest obecność każdego podłańcucha w słowniku; wywołanieany
zwraca trafienie, jeśli zostanie znalezione co najmniej jedno dopasowanie dla danej długości. Na koniec wywołanieall
sprawdza, czy znaleziono dopasowanie dla wszystkich długości podłańcuchów, i wynik jest zwracany.Wypróbuj na Ideone
źródło
Rubinowy, 44 bajty
w[x]&.size
:)To anonimowe funkcje, które pobierają słowo
w
i słownik (tablicę słów)d
. Tworzy dwie tablice: pierwsza zawierająca liczby od 1 do długości włączniew
; Druga tablica mad
każde słowo odwzorowane na ich rozmiar, jeśli ww
przeciwnym razie jest podłańcuchemnil
. Następnie ustawia odejmowanie, aby sprawdzić, czy druga tablica zawiera wszystkie elementy pierwszej tablicy.źródło
w[x]&.size==i
zamiastx.size==i&&w[x]
.uniq
i-[p]
i stosując zestaw odejmowania zamiast:[*1..w.size]-d.map{...}==[]
PowerShell
v3 +v2 +,1271107065 bajtów(Widzę teraz, że moje podejście jest podobne do @ xnor, chociaż opracowałem je niezależnie)
Pobiera słowo wejściowe
$a
i słownik$d
, oczekując$d
jako tablica (patrz przykłady poniżej). Pętle przechodzą przez całość$d
i wykonują a,Where-Object
aby wyciągnąć wpisy, w których bieżące słowo$_
jest wyrażeniem regularnym-match
względem słowa wejściowego$a
(tj. Jest to bieżące słowo będące podciągiem słowa wejściowego).Zbieramy wszystkie te słowa i podciąg rury im
Select-Object
nalength
parametr i-U
nique ograniczeń. To wyciągnie unikalne długości każdego podciągu. Na przykład dla słowa wejściowegocomb
będzie to tablica(4,2)
dla('comb','om')
.Bierzemy
.count
wynikową tablicę i porównujemy ją ze słowem wejściowym.length
. Jeśli jest równy, oznacza to, że każda długość podłańcucha jest w słowniku, więc$TRUE
w przeciwnym razie brakuje nam co najmniej jednego, więc$FALSE
. Ta wartość logiczna jest pozostawiana w potoku, a dane wyjściowe są niejawne.NB - Powinno to działać w v2 +, ponieważ
-in
operator nie jest już obecny, ale nie przetestowałem tej wersji.Przykłady
źródło
Perl, 86 bajtów
Wymaga
-E
bez dodatkowych kosztów.Akceptuje wszystkie dane wejściowe przez STDIN. Pierwsze wejście to słowo docelowe, pozostała część to słownik. Drukuje
1
po sukcesie, pusty ciąg po awarii.Stosowanie
źródło
Mathematica, 90 bajtów
Wykorzystuje wbudowane oprogramowanie Mathematica
DictionaryWordQ
.Przyjmowanie danych
d
jako słownika jest o 5 bajtów krótsze, ale w przypadku długich list znacznie wolniejsze:źródło
MATL , 15 bajtów
1 bajt zapisany przy użyciu pomysłu z odpowiedzi @ xnor .
Wyjścia
1
lub0
dla prawdy lub fałszu.Wypróbuj online!
źródło
Perl,
4241 bajtówObejmuje +2 za
-p0
Podaj słowo, a następnie słownik na STDIN:
(Podczas testowania na Uniksie upewnij się, że Dictionary.txt używa
\n
jako terminatora linii, a nie\r\n
)wordinian.pl
:źródło
JavaScript (Firefox 30-57), 68 bajtów
Korzystanie ze zrozumienia generatora pozwala uniknąć tworzenia tablicy pośredniej. 73-bajtowa wersja ES6:
źródło
05AB1E , 8 bajtów
Słowo jako pierwsze wejście, lista słownikowa jako drugie wejście.
Wypróbuj online lub sprawdź kilka innych przypadków testowych .
Wyjaśnienie:
źródło
Kotlin , 51 bajtów
Wypróbuj online!
źródło
SQF , 147 bajtów
Używając formatu pliku jako funkcji:
Zadzwoń jako:
["WORD", DICTIONARY] call NAME_OF_COMPILED_FUNCTION
Nie golfowany:
źródło