Wenn Sie eine Zeichenfolge haben, kreuzen Sie sie zuerst wie folgt an:
Schreiben Sie zuerst die Zeichenfolge.
abcde
Als nächstes schreiben Sie die Zeichenfolge gedreht um eins nach links.
abcde
bcdea
Mach so weiter, bis du len (string) Zeilen geschrieben hast .
abcde
bcdea
cdeab
deabc
eabcd
Lesen Sie nun aus der Zeichenfolge wie folgt:
----+
+--+|
|+>||
|+-+|
+---+
Welches gibt:
abcdeabcdcbaedcbcdeabaede
Diesen String drucken.
Testfälle
abcdef -> abcdefabcdedcbafedcbcdefabcbafedefaf
cena! -> cena!cenanec!anena!cec!a!
ppcg -> ppcgppcppgcpcgpg
abc -> abcabacbc
ab -> abab
a -> a
->
Bitte kommentieren Sie, wenn ein Testfall nicht korrekt ist.
Denken Sie daran, das ist Code-Golf , also gewinnt der Code mit der geringsten Anzahl von Bytes.
cena!
ist falsch. Es sollte mit Ihrem Beispiel übereinstimmen,abcde
da beide 5 Buchstaben sind:cena!cenanec!anena!cec!a!
Antworten:
JavaScript (ES7),
83807877 ByteBonus ES3-konformes Programm:
Erläuterung
Dies nutzt die Tatsache aus, dass die Ausgabe für z. B. eine Zeichenfolge der Länge 5 wie folgt dargestellt werden kann:
wobei jede Ziffer einen Index in der Zeichenfolge darstellt (beginnend mit 0), modulieren Sie die Länge der Zeichenfolge. Mit anderen Worten, wenn n die Länge der Zeichenkette ist, erhöhen wir den Index 2n - 1 Mal, verringern ihn 2 (n - 1) - 1 Mal und erhöhen ihn 2 (n - 2) - 1 Mal usw. Dies kann mit dem folgenden Algorithmus vereinfacht werden:
Dies funktioniert, weil floor (sqrt (x)) die Paritäten nach 2n - 1 Iterationen, dann nach 2 (n - 1) - 1 Iterationen usw. wechselt.
quelle
Pyth , 15 Bytes
Ein Programm, das die Eingabe von a
"quoted string"
und das Ergebnis druckt.Probieren Sie es online! oder überprüfen Sie alle Testfälle (geändert für Mehrfacheingabe).
Wie es funktioniert
quelle
Python 2.7 (in CMD.EXE), 91 Byte
Dies erfordert ein Terminal mit einem funktionierenden Backspace (
\b
) und funktioniert nicht auf repl.it oder ideone.com . Eine print-Anweisung, die mit einem Komma endet, trennt die weitere Ausgabe durch Leerzeichen anstelle einer neuen Zeile oder eines Return. Mit der Rücktaste können wir den Trennungsraum überschreiben.Python 2.7, 96 Bytes
Probiere es auf ideone.com oder repl.it aus (danke an Oliver). Die Eingabe muss eine Python-Zeichenfolge sein, z
'cena!'
.Die vier Scheiben durch die anhängenden Schleife (
s[i:]
,s[:n-i]
,r[i+2:]
,r[:n-i]
) von vier Rand der Spirale aufgenommen. Zum Beispiel mit01234
dem Quadrat ist:So nehmen wir
01234
,0123
,210
,4321
. Die Variablei
ist der Index des Werts oben links in jedem Schritt des Prozesses. In der letzten Spirale können mehrere Scheiben leer sein.quelle
S=''
,print S
undS+=
, und Wickeln alles , bevor diei+=2
in einerprint()
Erklärung mitsep=''
, können Sie 2 Bytes speichern.i<=n
n>i
"a string of odd length."
Jelly ,
1110 BytesTryItOnline! oder alle Tests
Wie?
Das nicht rotierte Quadrat ist eine Reihe von Läufen mit "Oberkante plus Rechtskante" und "Unterkante plus Linkskante", wobei jeder Lauf die Umkehrung des vorherigen Laufs ohne den ersten und letzten Buchstaben ist und der erste davon ist ist die Eingabe plus die Eingabe ohne den letzten Buchstaben (zB Eingabe
"abcde"
hat eine Ausgabe von"abcdeabcd" + "cbaedcb" + "cdeab" + "aed" + "e"
).quelle
05AB1E, 12 Bytes
Probieren Sie es online!
Erläuterung:
quelle
MATL , 27 Bytes
Die leere Eingabe wird mit einem Fehler beendet (die korrekte Ausgabe wird erstellt).
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
quelle
C,
9594 BytesInspiriert von @ETHproductions Antwort.
quelle
Perl, 99 Bytes
Whitespace ist nicht Teil des Programms und dient der Lesbarkeit.
Nicht sehr effizienter Code. Ich sollte in der Lage sein, die ersten drei Zeilen irgendwie zu verkürzen, aber alles, was ich versuchte, schlug fehl. Dieser ternäre Operator muss auch irgendwie korrigiert werden, aber auf diese Weise konnte ich meinen Code um etwa 10 Byte verkürzen, weil ich so viel ausschneiden konnte.
Der Code erstellt eine Liste von Palindromen, die durch gerade Zahlen getrennt sind und die Stellenwerte der zu ziehenden Zeichenfolge darstellen.
quelle
-F
welches die Zeilen 1 und 3 ersetzt. Geben Sie die Eingabe mit einecho -n
, um das zu entfernenchop
. (das sollte dich um die 81 Bytes bringen)Eigentlich ,
2113 BytesDieser Algorithmus basiert größtenteils auf Jonathan Allans Jelly-Antwort . Es gibt zwei Möglichkeiten, das Ergebnis als eine Zeichenfolge zu drucken. Der hier verwendete Ansatz dupliziert einen Zwischenschritt und addiert ihn dann zu einer laufenden Summe in Register 1 (standardmäßig eine leere Zeichenfolge).
;╕
in der funktion, dann╛
am ende. Der andere Ansatz besteht darin, einen Zwischenschritt zu duplizieren, diese doppelten Schritte auf dem Stapel zu belassen und sie am Ende zu einer Zeichenfolge zu summieren.;
in der funktion, dannkΣ
am ende.Golfvorschläge sind willkommen. Probieren Sie es online!
Ungolfing
quelle
Python 3, 59 Bytes
repl.it
Ein direkter Port meiner Gelee-Antwort ; Es wird nur ein vollständiges Programm eingegeben (und keine Funktion).
Das
print(x,end='')
ist eine print - Anweisung , die die Standard - Newline nicht gedruckt wird.quelle
Python 3, 93 Bytes
Probieren Sie es online!
quelle
print(...,end='')
tunprint(end=s[i:]+s[:n-i]+r[i+2:]+r[:n-i]
abcde
, es fehlt einee
am Ende.i<=n
stattn-i
für Ihren Zustand.