Hintergrund
Vor drei Jahren hatte sich der Typ Tom Murphy vorgenommen , die Idee eines Portmanteaus auf alle Wörter einer Sprache auszudehnen und nannte dies Portmantout ( Portmanteau plus tout [Französisch für alle ]). Er definierte Englisch als Liste von 108.709 Wörtern und fand eine Folge von 611.820 Buchstaben mit den folgenden zwei Eigenschaften:
- Jedes englische Wort ist in der Zeichenfolge enthalten.
- Eine Nachbarschaft, die zwei benachbarte Buchstaben in der Zeichenfolge enthält, ist ein englisches Wort.
Hier ist ein Link zu einer Seite, auf der dieses Portmantout zu finden ist (zusammen mit einer Videoerklärung).
Ein Portmantout
Die erste der beiden Eigenschaften eines Portmantouts ist leicht zu verstehen. Die zweite kann eine Erklärung erfordern.
Grundsätzlich müssen sich Wörter überlappen. "golfcode" wird niemals in einem englischen Portmantout erscheinen, da es dort kein Wort gibt, das das "fc" enthält. Es kann jedoch vorkommen, dass Sie in einem Portmantout "Codegolf" finden, denn "Ego" überbrückt die Lücke (und alle anderen Buchstabenpaare sind entweder in "Code" oder "Golf" enthalten).
Deine Aufgabe:
Schreiben Sie ein Programm oder eine Funktion, die eine Liste von Zeichenfolgen aufnimmt und einen beliebigen Portmantout der Liste zurückgibt.
Dieser Python 3-Code überprüft einen Portmantout.
Testfälle
Alle Listen sind ungeordnet. das ist,
{"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
Und warum nicht? Die massive auf Murphys Website, wenn Ihr Code innerhalb angemessener Zeit ausgeführt wird.
Regeln
- Ihr Code muss anhalten.
- Sie müssen nicht bei jeder Ausführung dasselbe Portmantout zurückgeben.
- Sie können alle Saiten bestehen aus nur Kleinbuchstaben annehmen
a
durchz
. - Wenn kein Portmantout möglich ist, kann Ihr Programm alles tun. Ex:
{"most", "short", "lists"}
- Es gelten die Standardregeln für E / A und Lücken .
Das ist Code-Golf , also gewinnt die kürzeste Lösung (in Bytes) in jeder Sprache! Viel Spaß beim Golfen!
quelle
{"sic", "bar", "rabbits", "cradle"} -> "barabbitsicradle"
{"mauve", "elated", "cast", "electric", "tame"} -> "mauvelectricastamelated"
(weitere Testfälle)Antworten:
Python 2 ,
204202 BytesProbieren Sie es online!
Gerettet
quelle
["ab", "ba", "ca"]
. Meine Lösung hat den gleichen Fehler.Pyth, 39 Bytes
Probieren Sie es hier aus
Erläuterung
quelle
Stax ,
3936 BytesFühren Sie es aus und debuggen Sie es
Führt alle Testfälle deterministisch in ungefähr einer Sekunde aus.
Dies ist ein rekursiver Algorithmus.
Hier ist das Programm entpackt, ungolfed und kommentiert.
Führen Sie dieses aus
Bearbeiten: Dies schlägt für eine Klasse von Eingaben fehl
["ab", "ba", "ca"]
, die wie die meisten anderen geposteten Antworten eine Schleife aufweist .quelle
JavaScript (ES6),
138 -130 ByteGibt einen Fehler für Listen zurück, die nicht vollständig portiert werden können.
Ungolfed:
Code-Snippet anzeigen
Der Code ist im vollständigen Alphabet-Beispiel unglaublich langsam (aus diesem Grund nicht im obigen Snippet enthalten).
Dies wird durch Ändern von
map
s insome
s für den Verlust von 2 Bytes behoben :Code-Snippet anzeigen
quelle