Einführung
Laut Rand Al'Thor's Post in der Puzzling SE ist ein eng verbundenes Wort jedes Wort, das drei alphabetisch aufeinanderfolgende Buchstaben enthält (in beliebiger Reihenfolge).
Worte wie Bildung , Nebelhorn und Kabarett ist alle engmaschigen Worte während Worte wie als Lernen , klaxon und führt nicht engmaschige Worte.
Herausforderung
Die Herausforderung besteht darin, mit Code-Golf ein Programm zu erstellen, das ein einzelnes Wort als Eingabe verwendet (Kleinbuchstaben vorausgesetzt, in jeder Hinsicht) und eine Ausgabe zurückgibt, in der (falls verfügbar) alle aufeinanderfolgenden Buchstabensätze aufgelistet werden (auch in Kleinbuchstaben) ist ein eng verbundenes Wort und eine leere Ausgabe, wenn es kein eng verbundenes Wort ist.
Beispiele
Input: education
Output: cde
Input: foghorn
Output: fgh
Input: cabaret
Output: abc
Input: hijacking
Output: ghi, hij, ijk
Input: pneumonia
Output: mno, nop
Input: klaxon
Output: <<no output>>
Input: perform
Output: <<no output>>
Input: learning
Output: <<no output>>
Regeln
- Während für die Eingabe ein einzelnes Wort in Kleinbuchstaben und für die Ausgabe Kleinbuchstaben angenommen werden müssen, hängt die Art der Ausgabe von der Wahl Ihrer Codiersprache ab. Bitte wählen Sie eine Ausgabeform, die der Art der Herausforderung am besten entspricht, sei es STDOUT, Dateiausgabe, Array usw.
- Da dies Codegolf ist, ist die niedrigste Anzahl von Bytes der eindeutige Gewinner.
- Keine dummen Schlupflöcher .
- Ich akzeptiere keine Antworten, bei denen die aufeinanderfolgenden Buchstaben nicht alphabetisch sortiert sind. Daher
cab
wird dies beispielsweise nicht als geeignete Ausgabe für angesehencabaret
. - Besonderer Hinweis: Während die "Drillinge" nicht unbedingt in alphabetischer Reihenfolge sein müssen, müssen die Zeichen in den Drillingen ... sein. Im Fall des Wortes "Leistung" wird beispielsweise die Ausgabe
mno,nop
akzeptiert. wie es sein wirdnop,mno
. Im Fall des Wortes „Besetzung“, gibt es sechs Möglichkeiten , dass das von Triolenghi
,hij
undijk
könnten in einer Liste angeordnet werden, und alle sechs Permutationen sind akzeptabel als Ausgabe.
Anders als das, auf Ihre Noten, machen Sie sich bereit, Golf!
!
und mit einem anderen Wort, da das aktuelle das gleiche Ergebnis ergibt :-)pneumonia
sein[('m','n','o'),('n','o','p')])
?Antworten:
05AB1E ,
765 BytesCode:
Erläuterung:
Verwendet die CP-1252- Codierung. Probieren Sie es online!
quelle
Python 3.5, 68 Bytes
Gibt die ausgegebenen Zeichenfolgen aus und wird mit einem Fehler beendet, wenn der Zeichenwert zu groß wird.
Erzeugt alle Zeichenfolgen von drei aufeinanderfolgenden und druckt diejenigen, die eine Teilmenge des Eingabeworts sind.
quelle
Pyth -
111087 BytesSuper-Brute-Force-Methode.
Test Suite .
quelle
Gelee , 7 Bytes
Dies ist eine monadische Verbindung. Probieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6),
95 bis90 ByteFehlende Werte verketten sich wie folgt
undefined
: Die resultierende Zeichenfolge enthält mehr als 3 Zeichen. Ich habe den!c[3]
Trick von @ETHproductions ausgeliehen, um 5 Bytes zu sparen.quelle
undefined
ist ein enges Wort;)parseInt(c,36)
stattc.charCodeAt()
?parseInt
in Code Golf zu spielen.Python 3.5, 78 Bytes
quelle
PHP, 100 Bytes
Nimmt Eingaben als Kommandozeilenargument; druckt ein nachstehendes Komma. renn mit
-r
.quelle
for($s=join(range(Z,z));$a=substr($s,++$i,3);)
ist eine kürzere Methode zum Erstellen von $ a. Zugegebenermaßen werden eine Reihe von Interpunktionszeichen und auch 2-stellige Serien überprüft, aber da die Eingabe nur aus Kleinbuchstaben besteht, müssen 3 Zeichen gefunden werden, die in Ordnung sind.for($a="
ab ", $ i = 98; $ i <123;)! strstr (count_chars ($ argv [1], 3), $ a = substr ($ a, 1) .chr (++ $ i)) ?: print "$ a,"; `spart 2 Bytes. Sehr nette Art, ich habe andere Möglichkeiten in PHP ausprobiert, kann aber die Bytes Ihres Codes nicht erreichen. Ich bin mir nicht sicher, ob Sie nach dem Komma ein Leerzeichen brauchenC
175174 Byteseingerückt:
Bei der Sortierung werden doppelte Werte durch Nullen ersetzt. Diese Nullen werden an den Anfang des Wortes sortiert. Das Suchen nach aufeinanderfolgenden Werten ist dann trivial.
quelle
MATL , 13 Bytes
Probieren Sie es online!
quelle
Haskell, 48 Bytes
Erzeugt alle Tripel von drei aufeinanderfolgenden Zeichen und verwendet die, die nur Buchstaben in der Eingabe verwenden.
53 Bytes:
Die Liste
['c'..]
enthält alle Unicode-Zeichen ab'c'
. Das Listenverständnis[[pred$pred c..c]|c<-['c'..]]
wandelt sie von nun an in alle Zeichenfolgen mit 3 aufeinanderfolgenden Zeichen um"abc"
. Wir machen einen Schritt zurück mit[pred$pred c..c]
anstatt vorwärts mit[c..succ$succ c]
, um einen Fehler zu vermeiden, wenn wir den Nachfolger des höchsten Unicode-Zeichens nehmen.Diese Tripel werden für diejenigen gefiltert, die nur Buchstaben in der Eingabe verwenden.
quelle
Perl, 36 Bytes
Beinhaltet +1 für
-n
Geben Sie Input auf STDIN:
Nur der Code:
quelle
T-SQL, 153 Bytes
Musste auf den Kommentar von WallyWest reagieren, da es lange her ist, dass TSQL das letzte Mal geantwortet hat. Die Antwort wurde teilweise von Brian Js Antwort inspiriert
Golf gespielt:
Geige
Ungolfed:
quelle
Haskell,
636052 BytesAnwendungsbeispiel:
f "hijacking"
->["ghi","hij","ijk"]
.scanr(:)"_"['a'..]
Erstellt eine Liste mit den'a'
Endpunkten der Liste aller Unicode-Zeichen, beginnend mit und endet mit a'_'
, d["abcde...\1114111_", "bcde...\1114111_", "cde...\1114111_", ..., "\1114109\1114110\1114111_", "\1114110\1114111_", "\1114111_", "_"]
. h . Dann nehmen wir bis zu drei Zeichen von jeder Zeichenfolge und binden sie anx
. Behalten Sie alles dort,x
wo sich jeder Buchstabe im Eingabeparameter befindetw
.Edit: @xnor
37 Bytes gespeichert . Vielen Dank!quelle
a:b:c:_
mit einem @ -Muster erfassen kann?'z'
obere Grenze entfernen und alle Zeichen ausprobieren lassen.take
die leere Zeichenfolge zu verwenden und zu entfernen:f w=[x|x<-init$take 3<$>scanr(:)""['a'..],all(`elem`w)x]
scanr
mit "." anstelle""
und weglassen derinit$
.T-SQL (SQL Server 2014), 217 Byte
Golf gespielt
Verwendung
Deklarieren Sie zuerst die Variable @a als Zeichen und weisen Sie die Eingabe wie folgt zu
Ich habe die Deklaration nicht als Teil meines Codes gezählt, aber ich habe keinen SQL-Standard für die Eingabe gefunden, daher bin ich bereit, meine Zählung zu ändern
Die Ausgabe erfolgt entweder in einer Zeile für jedes Tripel oder ohne Zeilen, wenn das Wort nicht eng verwoben ist
Ungolfed
quelle
R, 220 Bytes
Meine Lösung ist ziemlich einfach. Es durchläuft die möglichen drei Buchstabenkombinationen, überprüft und vergleicht die Zeichen der eingegebenen Zeichenfolge mit den drei aufeinander folgenden Buchstaben und fügt sie einer Zeichenfolge hinzu. Die Zeichenfolge wird dann nur gedruckt, wenn drei Buchstaben gefunden wurden (c == 4).
Input-Output
quelle
Python 3.5,
114111888079 BytesEine anonyme Lambda-Funktion. Nimmt Eingaben als Großbuchstaben und gibt eine Reihe von Tupeln aus, wobei die mit drei Großbuchstaben gefüllten Tupel alle Sätze
3
aufeinanderfolgender Buchstaben darstellen, die in der Eingabe erscheinen. Beispielsweise,wäre die Ausgabe für die Eingabe
HIJACKING
. Dieses Ausgabeformat wurde vom OP als in Ordnung bestätigt . Hat also das einzige Großbuchstaben-Eingabeformat. Wenn Sie jedoch in eingeben möchten nur Klein, ersetzen Sie einfachrange(65,91)
mitrange(97,123)
, ein weiteres Byte hinzufügen.Repl.it mit allen Testfällen!
Erläuterung:
Grundsätzlich passiert hier Folgendes:
Mit wird eine Liste
W
erstelltW=[*map(chr,range(65,91))]
, die alle Großbuchstaben des englischen Alphabets enthält. Aus diesem Grund ist immer eine Eingabe in Großbuchstaben erforderlich.Für jedes Tupel
i
in einer Liste, die wir aufrufen werdenU
, die alle drei aufeinander folgenden Buchstabentupel enthält, dh:erstellt von
zip(W,W[1:],W[2:])
jedemi
ist , so lange die Ausgabeliste vollständig hinzugefügt , wie alle Elemente in der eingestellten Versioni
({*i}
) in der eingestellten Version des Eingangs sindX
({*X}
), das heißt{*X}>={*i}
, das heißtX
ein Superset voni
. Andernfalls wird die leere Version voni
(()
) zur Liste hinzugefügt.Nachdem alle Tupel mit den vollständig hinzugefügten Übereinstimmungen durchlaufen wurden, wird die Liste als endgültige Ausgabe zurückgegeben.
quelle
Scala, 59 Bytes
Ungolfed:
Erläuterung:
quelle
Eigentlich 13 Bytes
Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing
quelle
Java 7, 230 Bytes
Dies kann höchstwahrscheinlich Golf gespielt werden, aber die Herausforderung war viel schwieriger als ich ursprünglich in Java dachte.
Ungolfed & Testfälle:
Probieren Sie es hier aus.
Ausgabe:
quelle
PowerShell v2 +, 93 Byte
Fühlt sich viel länger an als erforderlich, aber ich kann nicht weiter Golf spielen.
Übernimmt die Eingabe
$n
. Schleifen von97
bis120
zusammenhängende Drei-Buchstaben - Strings Konstruktion - die, bis zu der ist|?
, werden wir habenabc
,bcd
,cde
etc. an der Pipeline. Dann wird dies durch einWhere-Object
(das|?
) geleitet, um nur die Elemente herauszunehmen, bei denen die Klausel wahr ist. Hier ist die Klausel 1) die Eingabezeichenfolge$n
, die alschar
-array,sort
ed undselect -u
nique'd umgewandelt und dann-join
wieder in eine Zeichenfolge umgewandelt wird-match
. Wenn es sich um eine Übereinstimmung handelt, befindet sich die Zeichenfolge mit drei Buchstaben im Wort und wird daher durch die gefiltert|?
. Die Ergebnisse verbleiben in der Pipeline und die Ausgabe ist implizit.Beispiele
(Beachten Sie, dass hier die Ausgabe durch Leerzeichen getrennt ist, da die Ausgabe durch Verkettung stringiert wird.)
quelle
Retina
10656 BytesDeduplizieren, Sortieren. Hinzufügen
abc
. Suchen Sie, ob die Teilzeichenfolge gefunden wurde, und hängen Sie sie an. Zum nächsten Teilstring übersetzen. Wiederholen. Dann entfernen Sie die ersten beiden Zeilen.Probieren Sie es online aus
Naive Lösung:
Deduplizieren, sortieren und dann überlappende Übereinstimmungen von 3 aufeinander folgenden Buchstaben ausgeben.
Probieren Sie es online aus
quelle
JavaScript (Firefox 48), 93 Byte
Dies bietet sich für eine 96-Byte-ES6-Version an :
Wie es funktioniert
Der erste große Teil der Funktion lautet:
new Set(string)
Erstellt ein Set-Objekt, das eines der eindeutigen Zeichen in der Zeichenfolge enthält. Zum Beispielnew Set("foghorn")
wird zurückkehrenSet ["f", "o", "g", "h", "r", "n"]
. Wir können dies mit in ein Array konvertieren[... ]
und es dann mit dem eingebauten sortieren.sort()
. Dies wird"foghorn"
zu["f", "g", "h", "n", "o", "r"]
.Der nächste Schritt ist dies:
Dies ordnet jeden
c
Haracter ima
Ray dem Charakter zu, der mit den beiden Gegenständen dahinter verkettet ist. Zum Beispiel["f", "g", "h", "n", "o", "r"] => ["fgh", "ghn", "hno", "nor", "orundefined", "rundefinedundefined"]
. (Dasundefined
s wird angezeigt, wenn Sie versuchen, auf ein nicht vorhandenes Mitglied des Arrays zuzugreifen.Der letzte Schritt ist das Filtern:
Erstens ist das
!c[3]&
, alle Zeichenfolgen, die enthalten, auszuschließenundefined
. Dies ist notwendig, weil ein Fehler dazu führt, dass der folgende Algorithmus z. B.gmundefined
als aufeinanderfolgendes Triplet gezählt wird.Alle drei aufeinanderfolgenden Zeichenfolgen lauten, wenn sie als Basis-36-Zahlen interpretiert werden, 38 modulo 1333. Ich habe dies durch die folgende Berechnung herausgefunden:
Wenn also eine Zeichenfolge mit drei Zeichen 38 mod 1333 in base-36 ist, sind die drei Zeichen im Alphabet aufeinanderfolgend.
Testschnipsel
Code-Snippet anzeigen
quelle
gem
undmage
.!c[3]
Trick angewendet, durch den meine ES6-Antwort auf die Länge Ihrer vorherigen ES6-Antwort herabgesetzt wurde, sodass ich jetzt sogar Ihre Firefox-Antwort über 30 übertreffe. Das tut mir leid.Schläger 237 Bytes
Testen:
Ausgabe:
Ausführliche Version:
quelle
Ruby , 50 Bytes
each_cons(3)
Ruft alle aufeinanderfolgenden Unterlisten der Länge 3 aus dem Alphabet ab?a..?z
unde&s.chars==e
wählt dann mithilfe von setwise intersection nur diejenigen aus, die alle Zeichen in der Zielzeichenfolge enthalten. Gibt eine Liste von Listen zurück.Probieren Sie es online!
quelle
[R] 110 Bytes
Ich bin sicher, es ist immer noch Golf
quelle
Japt ,
109 BytesProbieren Sie es aus oder führen Sie alle Testfälle aus
quelle