Sandbox Post hier .
Erstellen Sie eine Funktion oder ein Programm, das eine Zeichenfolge "springt".
- Die Eingabe ist ein String in Stdin oder die nächstgelegene Alternative
- Die Eingabe enthält nur druckbare ASCII- und / oder Leerzeichen
- Die Ausgabe erfolgt nach Stdout oder der nächstgelegenen Alternative
- Nachgestellte Zeilenumbrüche und Leerzeichen sind zulässig
Wie man einen String springt
- Formatieren Sie den String in beliebig viele ASCII-Federspulen
- Füllen Sie die Spulen mit Leerzeichen bis zur nächsten Spule
- Lesen Sie die Zeichen ab und folgen Sie der Feder um die Spulen
Dies ist eine ASCII-Federspule:
#
# ####
# #
# ####
#
Wo die #
s die Zeichen des Strings sind
Hier ist ein Beispiel:
abcdefghijklmnopqrstuvwxyz
wird
a
b cdef
g h
i jklm
n
o
p qrst
u v
w xyz.
.
Wo die .
s Leerzeichen für Sichtbarkeit ersetzen.
Dann wird die Zeichenfolge zurückgelesen, wobei die ASCII-Feder nach unten um die Schleifen herum verläuft g
und u
zweimal auf und und trifft :
1| a <-3
V b cdef
g h
4| i jklm
V n 2->
...
... geben:
abgjklmhfedcginopuxyz vtsrquw
(mit einem Leerzeichen)
Testfälle
(Zitate hinzugefügt, um nachgestellte Leerzeichen hervorzuheben - bitte in Bezug auf E / A ignorieren)
I: "abcdefghijklmnopqrstuvwxyz"
O: "abgjklmhfedcginopuxyz vtsrquw "
I: "!@#"
O: "!@ # "
I: ""
O: ""
I: "12345 67890"
O: "12690 7 54368 "
I: " "
O: " "
Beachten Sie, dass die Ausgangslänge immer ein Vielfaches von 15 ist, der Länge einer Federspule
Dies ist Code-Golf , daher gewinnt die kürzeste Antwort in Bytes.
Antworten:
Gelee , 26 Bytes
TryItOnline!
Wie?
quelle
Python 2,
10410298 BytesDanke für die Kommentarhilfe!
https://tio.run/#2VDVy
Original:
quelle
input()
das Format verwenden und Eingaben vornehmen"<stuff>"
.lambda
eine anonyme Funktion anstelle eines Programms verwenden - dies ist häufig kürzer .+13
zu+14
und das+1
zu ändern+(len(t)%14>0)
würde es tun, aber es muss einen kürzeren Weg geben.JavaScript (ES6), 79 Byte
Hexadezimaler String, der schamlos aus @ETHproductions gestohlen wurde.
quelle
Netzhaut , 71 Bytes
Probieren Sie es online aus!
Das Permutieren von Strings ist in Retina nicht gerade prägnant ...
quelle
JavaScript (ES7),
144143141114104103 BytesVielen Dank an ETHProductions für eine 10B-Ersparnis!
Beispiel
Ausgabe
quelle
+('0x'+whatever)
konvertieren und es in eine Zahl konvertieren:(_,c)=>b[(c/15|0)*14+ +('0x'+'0169abc7543268d'[c%15])]
'0x'+'...'[c%15]-0+(c/15|0)*14
ein paar Klammern sparen :-)Perl 6 , 61 Bytes
Wie es funktioniert
Die Grundstruktur ist folgende:
Der Ausdruck, der zum Indizieren in jedes 14-stellige Segment verwendet wird
"abgjklmhfedcgin".ords X- 97
, lautet wie folgt:abgjklmhfedcgin
.97 98 103 106 107 108 109 104 102 101 100 99 103 105 110
.0 1 6 9 10 11 12 7 5 4 3 2 6 8 13
.Perl 6 , 64 Bytes
Probieren Sie es online aus!
Wie es funktioniert
Die Grundstruktur ist folgende:
Gleiche Indizes wie oben, aber da wir
.flat
trotzdem aufrufen , können wir einen verschachtelten (aber 1 Byte kürzeren) Ausdruck für sie verwenden :0,1,6,9..12,7,5...2,6,8,13
.(Sieht trivial aus, stützt sich aber tatsächlich auf eine Analyse-Besonderheit von Rakudo Perl 6, die wahrscheinlich ein Fehler ist . Um sie zu schreiben, ohne diesen Fehler auszunutzen, müsste man Parens um das hinzufügen
5...2
.)quelle
Befunge-93, 97 Bytes
Probieren Sie es online aus!
Dies ist eine Aufschlüsselung des Quellcodes, wobei die verschiedenen Komponenten hervorgehoben sind.
Die Hauptschleife beginnt mit der Ausführung von rechts nach links und wird auf der rechten Seite des Spielfelds ausgeführt. Hier lesen wir das erste Zeichen aus stdin und beenden es, wenn es sich um eine EOF handelt.
Im nächsten Abschnitt wird sichergestellt, dass alle EOF-Zeichen mithilfe der Formel in Leerzeichen konvertiert werden
c = c + 31*!(c+1)
. Dies gilt zwar nicht für die erste Iteration, kann jedoch bei nachfolgenden Durchläufen auftreten.Eine Kopie des Zeichens wird im temporären Speicher gespeichert, und anschließend wird in der Tabelle in Zeile 4 ( ) nach dem aktuellen Index gesucht, um festzustellen, ob das Zeichen ausgegeben werden soll oder nicht.
Wenn das Zeichen ausgegeben werden muss, nehmen wir den linken Zweig. Hier wird ein Swap durchgeführt, um den nächsten Swap aufzuheben, und dann wird eine Null gedrückt, um den Zweig nach rechts zu zwingen.
Wenn das Zeichen nicht ausgegeben wurde, tauschen wir es im Stapel unter dem Indexzähler aus (dies ist der Austausch, der im linken Zweig abgebrochen wird). In beiden Fällen speichern wir das Zeichen beim aktuellen Indexversatz im Speicher, erhöhen den Index und prüfen, ob er größer als 13 ist.
Wenn nicht, lesen wir das nächste Zeichen aus stdin und wiederholen die innere Schleife.
Wenn dies der Fall ist, haben wir einen Satz von 14 Zeichen fertiggestellt, von denen 7 ausgegeben wurden (
abgjklm
) und 7 auf dem Stapel verbleiben (cdefhin
). Wir lassen die letzten beiden, Ausgang die restlichen 5 (hfedc
) und dann abrufen und geben die Sonderfälleg
,i
undn
aus dem Speicher.Und das bringt uns zurück zum Anfang der Hauptschleife, wo wir den Vorgang für die nächsten 14 Zeichen erneut wiederholen.
quelle
Mathematica,
7772 BytesVielen Dank an JungHwan Min für das Speichern von 5 Bytes!
Unbenannte Funktion, die eine Liste von Zeichen als Eingabe verwendet und eine Liste von Zeichen zurückgibt.
Partition[#,14,14,{1,1}," "]
teilt die Eingabe in Unterlisten der Länge 14 auf und füllt sie bei Bedarf mit Leerzeichen auf.LetterNumber@"abgjklmhfedcgin"
ausgewertet mit{1,2,7,10,11,12,13,8,6,5,4,3,7,9,14}
, was die Reihenfolge angibt, in der jede Unterliste der Länge 14 aufgenommen werden soll (wobei das 7. Element entsprechend wiederholt wird). Nehmen Sie[[;;,...]]
dann die Elemente aller Unterlisten der Länge 14 in dieser Reihenfolge undJoin@@
fügen Sie die Antworten zusammen.Vorherige Einreichung:
quelle
LetterNumber@"abgjklmhfedcgin"
ist eine kürzere Möglichkeit, die Liste zu komprimieren. Auch;;
anstattAll
ein Byte zu speichern.Python 3 , 86 Bytes
Probieren Sie es online aus!
Als Bonus ist die Zeichenfolge
Tq>]zQ|1/X;:L$o
ein gültiges CJam-Programm, das die eindeutigen Zeichen sortiert auf Standardeingabe druckt. Probieren Sie es online aus! (+ Erklärung)quelle
PHP, 94 Bytes
teilt das Befehlszeilenargument in 14-Byte-Blöcke auf und durchläuft die Übersetzungszeichenfolge als Index für die Unterzeichenfolge. Laufen Sie mit
php -nr '<code>' <string>
.Ich war froh herauszufinden, dass
??
auch die leere Zeichenfolge (für einen "ungültigen" Index) als null akzeptiert wird.quelle
Ruby, 83 Bytes
Die erste Idee war die Verwendung von Hex-Zahlen, aber ord-48 speichert ein weiteres Byte (gestohlen aus der Antwort von throx).
quelle