tło
Trzy lata temu ten facet Tom Murphy wpadł mu do głowy, aby rozszerzyć ideę portmanteau na wszystkie słowa w języku i nazwał to portmantout ( portmanteau plus tout [francuski dla wszystkich ]). Definiując angielski jako listę 108 709 słów, udało mu się znaleźć sekwencję 611,820 liter o następujących dwóch właściwościach:
- Każde angielskie słowo jest zawarte w ciągu.
- Niektóre sąsiedztwo zawierające dowolne dwie sąsiadujące litery w ciągu to słowo angielskie.
Oto link do strony, na której można znaleźć ten portmantout (wraz z objaśnieniem wideo).
Portmantout
Pierwsza z dwóch właściwości portmantout jest łatwa do zrozumienia. Drugi może wymagać wyjaśnienia.
Zasadniczo słowa muszą się pokrywać. „golfcode” nigdy nie pojawi się w angielskiej wersji językowej, ponieważ nie ma tam słowa zawierającego „fc”. Jednak możesz znaleźć „codegolf” w portmantout, ponieważ „ego” wypełnia lukę (a wszystkie inne pary liter są w „kodzie” lub „golfie”).
Twoje zadanie:
Napisz program lub funkcję, która pobiera listę ciągów znaków i zwraca dowolny portmantout listy.
Ten kod Python 3 zweryfikuje portmantout.
Przypadki testowe
Wszystkie listy są nieuporządkowane; to jest,
{"code", "ego", "golf"} -> "codegolf"
{"more", "elm", "maniac"} -> "morelmaniac" or "morelmorelmaniac" or "morelmorelmorelmaniac" or...
Would a morelmaniac be some sort of mycologist?
{"ab", "bc", "cd", "de", "ef", "fg", "gh", "hi", "ij", "jk", "kl", "lm", "mn", "no", "op", "pq", "qr", "rs", "st", "tu", "uv", "vw", "wx", "xy", "yz", "za"} -> "abcdefghijklmnopqrstuvwxyza" or "rstuvwxyzabcdefghijklmnopqrstuvwxyzabcdef" or any 27+ letters in order
Czemu nie? Ogromny na stronie Murphy'ego, jeśli kod zostanie wykonany w rozsądnym czasie.
Zasady
- Twój kod musi zostać zatrzymany.
- Nie musisz zwracać tego samego portmantout przy każdym wykonaniu.
- Możesz założyć wszystkie ciągi składać się tylko z małych liter
a
poprzezz
. - Jeśli żaden portmantout nie jest możliwy, twój program może zrobić wszystko. Dawny:
{"most", "short", "lists"}
- Obowiązują standardowe zasady we / wy i luki .
To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie (w bajtach) w każdym języku! Miłej gry w golfa!
źródło
{"sic", "bar", "rabbits", "cradle"} -> "barabbitsicradle"
{"mauve", "elated", "cast", "electric", "tame"} -> "mauvelectricastamelated"
(więcej przypadków testowych)Odpowiedzi:
Python 2 ,
204202 bajtyWypróbuj online!
Zapisano
źródło
["ab", "ba", "ca"]
. Moje rozwiązanie ma ten sam błąd.Pyth, 39 bajtów
Wypróbuj tutaj
Wyjaśnienie
źródło
Stax ,
3936 bajtówUruchom i debuguj
Uruchamia wszystkie przypadki testowe deterministycznie w około sekundę.
Jest to algorytm rekurencyjny.
Oto program rozpakowany, nieposortowany i skomentowany.
Uruchom ten
Edycja: Nie udaje się to w przypadku klasy wejść z pętlą, podobnie
["ab", "ba", "ca"]
jak większość innych opublikowanych odpowiedzi.źródło
JavaScript (ES6),
138130 bajtówZwraca błąd dla list, których nie można całkowicie ukryć.
Nie golfowany:
Pokaż fragment kodu
Kod jest rozdzierająco powolny na pełnym przykładzie alfabetu (z tego powodu nie został uwzględniony w powyższym fragmencie).
Można temu zaradzić, zmieniając
map
s nasome
s, dla utraty 2 bajtów:Pokaż fragment kodu
źródło