Wie Saiten verdreht sind
Der Verdrehungsalgorithmus ist sehr einfach. Jede Spalte wird um ihren Index nach unten verschoben (Spalte 0 verschiebt sich um 0, Spalte 1 verschiebt sich um 1, ...). Die Spaltenverschiebung wird nach oben verschoben. Es funktioniert so:
aaaa
bbbb
cccc
Wird:
a
ba
cba
----
cba
cb
c
Alles unter der Linie nach oben. Reales Beispiel:
Original:
\\\\\\\\\\\\
............
............
............
Twisted:
\...\...\...
.\...\...\..
..\...\...\.
...\...\...\
Eingang
Die Eingabe ist entweder ein Array von Zeichenfolgen oder eine mehrzeilige Zeichenfolge. Alle Zeilen haben die gleiche Länge.
Ausgabe
Die verdrillte Zeichenfolge, mehrzeilige Ausgabe bis zur Standardausgabe (oder nächstgelegenen Alternative).
Beispiele:
( >
kennzeichnet die Eingabe, Leerzeichen sind wichtig)
>Hello, world!
>I am another
>string to be
>twisted!
Hwrmoe oo br!
Ieii ,dttr e
s lsna !ohl
ttaltgnw ed
>\\\\\\\\\\\\
>............
>............
>............
\...\...\...
.\...\...\..
..\...\...\.
...\...\...\
>abcdefg
>.......
a.c.e.g
.b.d.f.
>abcdefghij
>..........
>..........
a..d..g..j
.b..e..h..
..c..f..i.
>\\\\.....././
>...../.......
>........././.
>..../.^\\....
\.........../
.\....^..../.
..\../.\../..
...\/...\/...
>cdeab
>deabc
>eabcd
>abcde
cbbbb
ddccc
eeedd
aaaae
>aeimquy37
>bfjnrvz48
>cgkosw159
>dhlptx260
ahknqx147
beloru258
cfipsvy69
dgjmtwz30
>abcdefghi
>jklmnopqr
>stuvwxyz1
>234567890
a3ume7yqi
jb4vnf8zr
skc5wog91
2tld6xph0
Antworten:
Brachylog , 5 Bytes
Probieren Sie es online!
Ruft die Eingabe als Array von Spalten ab (was innerhalb der Spezifikation der Frage zu liegen scheint).
iᵇ
- Verbinden Sie jedes Element im Array mit seinem (0-basierten) Index.ᵐ
- Ordnen Sie dieses Prädikat jedem Element des Ergebnisses zu:↻₎
- Permutieren Sie (die Spalte) zirkulär um den Betrag, der als letztes Element (den Index) angegeben wurdeEinfache Erweiterung auf eine Version, die eine einzelne mehrzeilige Zeichenfolge akzeptiert:
13 Bytes
Probieren Sie es online!
quelle
Pyth, 11
Probieren Sie es hier aus
quelle
APL (Dyalog) , 7 Bytes
Benötigt
⎕io←0
Probieren Sie es online!
⍬⍋⍉
Ruft den Bereich von 0 bis zur Anzahl der Spalten ab.⊖
Umkehrungen⊖⊖⍨⍬⍋⍉
drehen (vertikal) die (vertikal) umgekehrte Eingabe, indem Sie diese0,1..
⊖
umkehren und zurückgeben.quelle
Retina ,
1111019287 BytesDie Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Woo, löste es in einer einzigen Regex-Ersetzung. :) (Wahrscheinlich gibt es eine kürzere Lösung mit mehreren, aber wo macht das Spaß ...)
Probieren Sie es online!
Erläuterung
Dies setzt einige Grundkenntnisse der Bilanzkreise voraus . Kurz gesagt, mit der regulären Ausprägung von .NET können Sie mehrere Erfassungen mit einer einzigen Gruppe durchführen und alle Erfassungen auf einen Stapel verschieben. Dieser Stapel kann auch gelöscht werden, sodass wir ihn zum Zählen von Dingen innerhalb des regulären Ausdrucks verwenden können.
Dadurch wird ein Capture auf beide Gruppen
1
und2
für jeden Charakter vor dem Match (in der aktuellen Zeile) übertragen. Das heißt, es zählt die horizontale Position des Spiels.Der Rest ist in einer Vorausschau:
Wir passen jede Zeile an und verschieben sie auch in die Gruppe
1
, sodass die Gruppe1
nun die Summe der horizontalen und vertikalen Position ist (wobei letztere von unten gezählt wird ). Dies kennzeichnet im Wesentlichen die Diagonalen des Gitters mit ansteigenden Werten, beginnend in der unteren linken Ecke. Das.*
bewegt dann nur den Cursor der Engine an das Ende der Zeichenkette.Wir wechseln nun in einen Lookbehind, der in .NET von rechts nach links übereinstimmt:
Dies wird wiederholt genau
H
Captures aus der Gruppe1
(woH
ist die Höhe der Eingabe) Pop . Der Zweck davon ist, die Gruppe modulo zu nehmenH
. Danach1
enthält group die Zeile (von unten gezählt), aus der das neue Zeichen in der aktuellen Spalte ausgewählt werden soll.Wieder ein Blick von rechts.
(?<-1>.+¶)*.+
Verwenden Sie jetzt group1
, um die Zeile zu finden, aus der das neue Zeichen ausgewählt werden soll, und dann findet der Lookahead die richtige Spalte mithilfe von group2
.Das gewünschte Zeichen wird in einer Gruppe erfasst
3
und durch die Ersetzung zurückgeschrieben.quelle
$+
sieht nützlich aus ... vor allem, wenn Sie nur eine Substitution machen möchten: ^)$+
ist eigentlich ziemlich nutzlos ... die Beschreibung auf MSDN klingt viel nützlicher als es ist, weil es impliziert, dass(a)|(b)
->$+$+
allea
s undb
s verdoppelt, aber stattdessen allea
s entfernt, weil es sich nur auf die syntaktisch letzte Gruppe bezieht . Das heißt, es ist nur ein Weg, um zu vermeiden, dass alle Gruppen gezählt werden, wenn Sie zu faul sind (wie ich). Beim Golfen werden nur bei mehr als 9 Gruppen Bytes gespart, was anfangs wohl eher selten vorkommt.Regex.Replace
für Retina im Sinn hatte , aber ich bin noch nicht dazu gekommen, es zu implementieren).CJam, 13 Bytes
Teste es hier.
Erläuterung
quelle
TeaScript, 10 Bytes
Dank der äußerst präzisen Syntax von TeaScript 3 ist dies wirklich kurz: D
Wäre 1 Byte kürzer, wenn die Sigma-Schleife nicht fehlerhaft wäre
Probieren Sie es online aus
Erläuterung
quelle
Python 3, 164 Bytes
Bei weitem nicht die beste Antwort, aber die erste in Python ...
quelle
)
]
''.join(l)for l in....
MATLAB,
9236 BytesAngenommen, die Eingabezeichenfolge
s
hat bereits die Form eines 2D-Zeichenarrays / einer 2D-Zeichenmatrix, zErläuterung: Durchlaufen Sie die Spalten der Matrix. Führen Sie für jede Spalte eine kreisförmige Verschiebung ihrer Elemente um die Anzahl der Zeichen durch, die dem Spaltenindex entspricht (-1 aufgrund der MATLAB-Indizierung).
quelle
Brachylog , 96 Bytes
Dies erwartet eine Liste von Zeichencode-Zeichenketten als Eingabe und keine Ausgabe, z
brachylog_main([`aaaa`,`bbbb`,`cccc`],_).
Das ist eine lächerlich lange Antwort, und es gibt wahrscheinlich einen viel kürzeren Weg, dies zu tun.
Erläuterung
quelle
JavaScript,
9289 Bytes3 Bytes weg danke @Neil .
Code-Snippet anzeigen
quelle
replace
:m.replace(/./g,(n,j)=>z[((l=z.length)*j+i-j)%l][j])
.[...m].map(
ganzen Weg bis einschließlich der ersten.join
.Python 2, 115 Bytes
Dank dem Wunder
zip
gelang es, dies auf eine Zeile zu bringen. Sehen sie in Aktion hier .quelle
MATL , 18
21BytesDie Eingabe hat die Form
Probieren Sie es online!
Wie es funktioniert :
quelle
F #, 105 Bytes
Mein erster Versuch (nur ein
\n
Charakter ist erforderlich):Verwendung:
quelle
JavaScript (ES6), 73 Byte
Erläuterung
Prüfung
Code-Snippet anzeigen
quelle
Japt, 29 Bytes
Testen Sie es online!
Wie es funktioniert
quelle
Haskell, 81 Bytes
Neuimplementierung des CJam-Beispiels. Obwohl das Umkehren, Zuordnen und Aufzählen Teil von mapAccumR ist, entfernt snd den Akkumulator, da wir ihn nicht mehr benötigen. Die Umkehrung ist nur ein Nebeneffekt der rechten Falte.
quelle
Haskell, 65 Bytes
Anwendungsbeispiel:
g ["1111","2222","3333"]
->["1321","2132","3213"]
.quelle
MATL , 9 Bytes
Probieren Sie es online!
Im Kern ziemlich ähnlich zu Luis Mendos vorhandener MATL-Antwort , aber kürzer, wenn Features verwendet werden, die zu diesem Zeitpunkt wahrscheinlich nicht in der Sprache waren: 1.
"
Durchläuft die Spalten einer Matrix jetzt automatisch, sodass das Erstellen und Indizieren von Spaltenindizes kein kostspieliges Unterfangen darstellt ( Dies ist der Biggie), 2.&h
als Kurzformel zu sagenN$h
und 3. implizites Schleifenende, wenn]
nicht angegeben.Alternativ für das gleiche bytecount:
Probieren Sie es auf MATL Online aus
quelle
C (clang) , 114 Bytes
Arbeitet in GCC unter MinGW. Der GCC von TIO wird durch die Verwendung
strlen
des Init-Ausdrucks der ersten for-Schleife verwirrt .Probieren Sie es online!
quelle