Garland Wörter
Ein Girlandenwort ist ein Wort, das wie eine Girlande aneinander gereiht werden kann, da es mit denselben Buchstaben endet, mit denen es beginnt. Diese Buchstabengruppen können sich sogar überschneiden!
Beispielsweise underground
handelt es sich um ein Girlandenwort in der Reihenfolge 3
, da es mit denselben 3 Zeichen beginnt und endet und
. Das heißt es könnte gerne aneinander gereiht werden undergroundergrounderground...
.
alfalfa
ist auch ein Girlandenwort! Es ist in Ordnung 4. Es beginnt und endet mit alfa
. Es kann aneinandergereiht werden , etwa so: alfalfalfalfa
.
Ein Prozess, den ich garlandifying nenne, besteht darin, dass Sie, sobald Sie die Reihenfolge n
eines Girlandenworts festgelegt haben, das ursprüngliche Wort nehmen und das Segment hinzufügen, das erforderlich ist, um es als Girlandenzeitschleife zu n
verwenden. Da onion
es sich also um ein 2
Girlandenwort handelt, würden Sie onion
die ersten 2
Buchstaben abhacken, um sie zu erhalten, ion
und diese zu den Endzeiten hinzufügen, um sie 2
zu erhalten onionionion
.
Zielsetzung
Erstellen Sie ein Programm oder eine Funktion, die Eingaben von der Standardeingabe oder einem Funktionsargument entgegennimmt und das Wort als Girlande ausgibt oder zurückgibt.
Alle Wörter werden in Kleinbuchstaben geschrieben und die höchstmögliche Reihenfolge für ein Wort ist length(word) - 1
.
Beispiel I / O
"onion" --> "onionionion"
"jackhammer" --> "jackhammer"
"abracadabra" --> "abracadabracadabracadabracadabracadabra"
"" --> ""
"zvioz" --> "zviozvioz"
"alfalfa" --> "alfalfalfalfalfalfa"
"aaaa" --> "aaaaaaa"
Dies ist Code-Golf , also gewinnt die geringste Anzahl von Bytes.
Antworten:
Pyth,
1918 BytesProbieren Sie es online aus: Vorführ- oder Testgeschirr
Erklärungen:
quelle
Python, 60 Bytes
Habe auf Besseres gehofft, aber na ja.
s.find
funktioniert hier ordentlich anstelle vonnot s.startswith
.quelle
Netzhaut , 58 Bytes
Jede Zeile sollte in eine eigene Datei gehen, aber Sie können den Code als eine Datei mit dem
-s
Flag ausführen .Die vier Substitutionspaare führen Folgendes aus:
order
Anzahl der Zeichen aufgeteilt ist.order
mal an.Die Zeichenfolge gibt für das Beispiel Folgendes an
onion
:quelle
Haskell, 64 Bytes
Tests:
quelle
Java,
160 bis157 BytesInput-Output:
Zur besseren Lesbarkeit in Abständen und mit Tabs versehen:
Vorschläge sind willkommen.
quelle
i=0;
?Sed:
8784 Zeichen(83 Zeichen Code + 1 Zeichen Befehlszeilenoption.)
Probelauf:
quelle
CJam,
2423 BytesNur um es mit etwas zu beginnen ..
Probieren Sie es hier online aus
quelle
Matlab:
978982 BytesFunktion, die einen regulären Ausdruck mit Lookbehind und einer Erfassungsgruppe verwendet:
Dies
sum
ist erforderlich, um die Eingabe von Leerzeichenfolgen zu verarbeiten (konvertieren[]
in0
).Beispiele:
quelle
REGXY,
5349 BytesVerwendet REGXY , eine auf Regex-Substitution basierende Sprache
Überblick: Eine Reihe von regulären Ausdrücken wird angewendet. Ein Beispiellauf würde so aussehen:
Detaillierte Erklärung Das Folgende ist eine zeilenweise Aufschlüsselung der regulären Ausdrücke:
Hierbei handelt es sich um eine reguläre Ersetzung, die mit der ersten leeren Zeichenfolge (dh dem Anfang der Zeichenfolge) übereinstimmt und diese durch alles rechts von match (
$'
) gefolgt von einem Hash ersetzt. Zum Beispiel wird esonion
zuonion#onion
.Diese Zeile findet den Abschnitt, der sich überlappt, indem nach einer Gruppe von Zeichen unmittelbar vor dem # (
(.+)
) gesucht wird, die auf der anderen Seite des # (\1
) identisch sind . Das \ K bedeutet nur "Vergiss, dass ich etwas gefunden habe", was bedeutet, dass es bei der Ersetzung nicht ersetzt wird. Das bedeutet effektiv, dass wir der Position einfach ein # hinzufügen, nachdem die Überlappung gefunden wurde und sichonion#onion
in verwandelt hatonion#on#ion
.Das anfängliche 'a' ist nur eine Bezeichnung für den regulären Ausdruck. Danach finden wir das erste # gefolgt von einem einzelnen Zeichen (
.
) und erfassen alles danach bis zum nächsten # (.*#
). Wir ersetzen dies durch alles rechts von der Übereinstimmung, dh das letzte Token ($ '), gefolgt von einem # ($1
), gefolgt vom zweiten Token abzüglich eines Zeichens (wir behandeln dies als einen Zähler und verringern ihn bei jeder Iteration). Im Fall von Zwiebeln # on # ion, die beide Token wir Rückreferenzierung ist in Klammern gezeigt, und der Abschnitt der gesamten regex Einstimmungen zwischen den Rohren:onion|(#)o(n#)|ion
. Wir ersetzen dann die Bits, die wir angleichen (zwischen den Pipes), durch$'
(alles rechts von der Übereinstimmung, dh 'ion'), dann $ 1 (das #), dann $ 2 (n #), was bedeutet, dass wir am Ende mitonion|(ion)(#)(n#)|ion
(Klammern ) enden die drei Token in der Ersatzzeichenfolge).Wenn der reguläre Ausdruck im ersten Wechsel (alles vor der Pipe) nicht übereinstimmt, müssen wir unseren Zähler auf Null verringert haben, was bedeutet, dass das zweite Token keine Zeichen enthält. Stattdessen schauen wir uns den zweiten Teil des Musters an
#.*
. Dies ersetzt einfach alles nach dem ersten # mit$'$1$2
. Da durch diese Abwechslung keine Rückverweise erstellt werden und rechts von der Übereinstimmung (.*
Übereinstimmungen bis zum Ende der Zeichenfolge) nichts vorhanden ist , beenden wir die Übereinstimmung und geben das Ergebnis zurück.Dies ist nur ein Verweis auf die vorherige Zeile und stellt sicher, dass die reguläre Ausdrücke so lange ersetzt werden, bis sie nicht mehr übereinstimmen.
quelle
jq 1,5: 91 Zeichen
(87 Zeichen Code + 4 Zeichen Befehlszeilenoption.)
Probelauf:
quelle
RS ,
5148 BytesNEHMEN SIE DAS, RETINA UND SED !!!!! ;)
Schneiden Sie 3 Bytes dank @randomra ab.
Live-Demo und Testfälle.
Beachten Sie, dass der
jackhammer
Testfall nicht vorhanden ist. Es gibt einen Fehler im Umgang mit Leerzeichen in der Weboberfläche , der dazu führt, dass falsche Ausgaben gedruckt werden. Die Offline-Version vonrs
behandelt es richtig.51-Byte-Version:
Live-Demo und Testfälle für Original.
quelle
JavaScript (ES6), 95 Byte
Demo
Firefox erst einmal:
quelle
JavaScript (ES6), 82 Byte
[Meine ursprüngliche Antwort wurde gelöscht, da ich jetzt ES6 gelernt habe und daran interessiert war, eine rekursive Lösung für diese Herausforderung zu finden.]
Beispiel
quelle
CoffeeScript + ES6, 77 Bytes
Gleicher Ansatz wie meine JavaScript-Antwort.
quelle
C
Golf gespielt: 195 Bytes - GCC
quelle
int
implizit in (ausreichend alten Versionen von) C?Groovy
755755 BytesErstaunlich, wie es helfen kann, am nächsten Tag auf etwas zurückzukommen
Ungolfed:
quelle
Falls jemand den Code in JS benötigt, um ihn zu testen. Hinweis: Ich habe die Zeichenfolge vom Ende durchlaufen, um die Effizienz zu erhöhen:
quelle