Oto jeden dla wszystkich, którzy tam są! Napisz program lub funkcję, która pobiera listę słów i tworzy listę wszystkich możliwych rozkładów konkatenatywnych dla każdego słowa. Na przykład:
(Uwaga: jest to tylko niewielkie próbkowanie w celach ilustracyjnych. Rzeczywista wydajność jest znacznie większa.)
afterglow = after + glow
afterglow = aft + erg + low
alienation = a + lie + nation
alienation = a + lien + at + i + on
alienation = a + lien + at + ion
alienation = alien + at + i + on
alienation = alien + at + ion
archer = arc + her
assassinate = ass + as + sin + ate
assassinate = ass + ass + in + ate
assassinate = assassin + ate
backpedalled = back + pedal + led
backpedalled = back + pedalled
backpedalled = backpedal + led
goatskin = go + at + skin
goatskin = goat + skin
goatskin = goats + kin
hospitable = ho + spit + able
temporally = tempo + rally
windowed = win + do + wed
windowed = wind + owed
weatherproof = we + at + her + pro + of
yeasty = ye + a + sty
Ok, masz pomysł. :-)
Zasady
- Użyj dowolnego wybranego języka programowania. Wygrywa najkrótszy kod według liczby znaków dla każdego języka . Oznacza to, że jest jeden zwycięzca na każdy używany język. Ogólny zwycięzca będzie po prostu najkrótszym kodem ze wszystkich przesłanych.
- Lista wejściowa może być plikiem tekstowym, standardowym lub dowolną strukturą listy zapewnianą przez Twój język (lista, tablica, słownik, zestaw itp.). Słowami mogą być angielski lub dowolny inny język naturalny. (Jeśli lista zawiera angielskie słowa, zignoruj lub odfiltruj elementy jednuliterowe z wyjątkiem „a” i „i”. Podobnie, w przypadku innych języków, zignoruj elementy bezsensowne, jeśli są one pojawiają się w pliku).
- Lista wyjściowa może być plikiem tekstowym, standardowym plikiem wyjściowym lub dowolną strukturą listy używaną przez język.
- Możesz użyć dowolnego słownika wejściowego, który ci się podoba, ale prawdopodobnie będziesz chciał użyć takiego, który zawiera sensowne słowa, a nie takiego, który zapewnia zbyt wiele niejasnych, tajemnych lub obnubilowanych słów. Tego pliku użyłem: Lista kaczan kukurydzy zawierająca ponad 58000 angielskich słów
pytania
To wyzwanie polega przede wszystkim na napisaniu kodu do wykonania zadania, ale fajnie jest też przeczesywać wyniki ...
- Jakie słowa podrzędne występują najczęściej?
- Jakie słowo można rozłożyć na największą liczbę słów podrzędnych?
- Jakie słowo można rozłożyć na różne sposoby?
- Jakie słowa składają się z największych słów podrzędnych?
- Jakie rozkłady były najbardziej zabawne?
code-golf
string
natural-language
Todd Lehman
źródło
źródło
alienation
kiedy to wycinałem i wklejałem. Naprawiono teraz. Jeśli chodzi o pozostałe, powyższa lista to tylko niewielka próbka. Mój program testowy wygenerował dziesiątki tysięcy odpowiedzi po otrzymaniu listy Kaczan kukurydzy.Odpowiedzi:
Python 186
Niezbyt wydajny, ale w rzeczywistości nie straszny powolny. Po prostu naiwnie (przypuszczam, że jest to możliwe, choć wydaje mi się mało prawdopodobne, aby Python dokonał pewnych sprytnych optymalizacji) sprawdza, czy pod-słowa znajdują się w słowniku kaczan kukurydzy i rekurencyjnie wyszukuje jak najwięcej słów. Oczywiście ten słownik jest dość obszerny i możesz wypróbować taki, który nie zawiera różnych skrótów i akronimów (prowadzących do takich rzeczy
bedridden: be dr id den
). Również w dołączonym słowniku nie było „A” ani „I” wymienionych jako słowa, więc dodałem je ręcznie.Edytować:
Teraz pierwszym wejściem jest nazwa pliku słownika, którego należy użyć, a każdy dodatkowy to słowo.
źródło
print f
powinien byćprint(f)
echo archer|python2 filename.py
wypisuje błąd EOFEr dla ostatniego wierszafor f in W(raw_input()):print f
=>''.join(W(raw_input())
;a=open('c').read().split('\n')
=>a=open('c').readlines()
readlines
znaki nowego wiersza byłyby na końcu wierszy, dlatego zrobiłem to tak, jak ja.join
wszystkie elementy muszą być ciągami i nie mogę uzyskać go w formie mniejszej niż to, co już mam.Kobra - 160
Jest to funkcja (sortowanie dwóch funkcji), która pobiera
List<of String>
* i wypisuje ciągi znaków zawierające możliwe układy słów podrzędnych dla każdego łańcucha na liście argumentów.* typ jest w rzeczywistości
List<of dynamic?>
, ale podanie czegoś innego niżList<of String>
prawdopodobnie go zepsuje.źródło
Scala,
132129Edycja: nieco krótsza jako odczyt w pętli ze standardowego wejścia niż funkcja
Uruchom jako
(lub użyj dłuższej listy słów :))
Oryginalny:
Funkcja od Seq [String] do Seq [Seq [List [String]]]. Pobiera słownik jako argumenty wiersza poleceń.
Nie golfowany:
Podejście polega na wygenerowaniu wszystkich możliwych list podciągów i odfiltrowaniu tych, które zawierają ciąg nieobecny w słowniku. Zauważ, że niektóre wygenerowane podciągi zawierają dodatkowy pusty ciąg, zakładam, że pusty ciąg nie będzie w słowniku (i tak nie ma możliwości przekazania go w wierszu poleceń).
źródło