Bei einer Ganzzahl k und entweder einem Textblock oder einem 2d-Array, dessen innere Arrays möglicherweise ungleich lang sind (ähnlich einem Textblock), drehen Sie jedes Zeichen oder Element in der k- ten Spalte nach oben oder unten zur nächsten Position das existiert.
Beispiel
Drehen Sie die 20. Spalte des folgenden Textes (1-basiert):
A line with more than k characters.
A longer line with more than k character.
A short line.
Rotate here: ------v--
This is long enough.
This is not enough.
Wrapping around to the first line.
Ausgabe:
A line with more thtn k characters.
A longer line with aore than k character.
A short line.
Rotate here: ------m--
This is long enoughv
This is not enough.
Wrapping around to .he first line.
Wenn Sie die k- te Spalte derselben Eingabe drehen, wobei 35 < k <42 ist, wird der Eingabetext unverändert angezeigt.
Regeln
- Sie können Rohtext, ein Array von Zeilen, ein 2D-Array von Zeichen oder ein beliebiges vernünftiges Format zur Darstellung der Daten verwenden. Sie können auch andere Datentypen als Zeichen verwenden.
- Die Anzahl der möglichen Werte des Datentyps der Elemente muss mindestens 20 betragen, wenn Ihre Codelänge davon abhängt, andernfalls mindestens 2. Dies kann eine Teilmenge der Zeichen oder andere Werte sein, die vom systemeigenen Typ unterstützt werden.
- Leerzeichen und alle Arten von Nullwerten sind nur normale Werte, wenn Sie sie in der Eingabe zulassen. Sie können sie auch einfach im Elementtyp ausschließen.
- Regeländerung: Sie können die kürzeren Arrays mit einem allgemeinen Standardwert (z. B. Leerzeichen) auffüllen, wenn Sie Arrays mit gleicher Länge zum Speichern der Daten bevorzugen.
- k könnte 0-basiert oder 1-basiert sein. Es befindet sich garantiert in der längsten Zeile der Eingabe (dies bedeutet, dass die Eingabe mindestens eine nicht leere Zeile enthält).
- Sie können wählen, ob es sich nach oben oder unten dreht.
- Drehen Sie entweder nur um eine Position oder um n Positionen, wobei n eine positive Ganzzahl ist, die in der Eingabe angegeben ist.
- Kürzester Code gewinnt.
quelle
n~¨⍨↓⍉⎕⌽@(≢¨)@⎕⍉↑⎕,¨⍨n←⊂⊂⍬
. Vielleicht könnten Sie Modded↑
↓
in Ihre Erweiterung aufnehmen, um das Golfen weiter zu verbessern (aber ich bin mir nicht ganz sicher, wie nützlich sie sind).C
undI
lokalisiert sind, damit sie nicht verschmutzen:{~∘I¨⍨↓⍉⎕⌽@(~⊢∊I←⎕INSTANCES⊢∘C)@⎕⍉↑⎕,¨⍨⎕NEW⎕FIX I←C←':Class C' ':EndClass'}
Python 2 ,
11111010999989694 BytesProbieren Sie es online!
Nimmt Eingaben als Liste von Zeilen und 0-Index-Spalten und gibt eine Liste von Zeichenfolgen zurück.
Säule ist nach oben gedreht 1.
-11 Bytes, danke an Jo King
quelle
Java 8,
107106135107 Bytes+29 Bytes für einen Bugfix.
0-indiziert; dreht sich nach unten wie im Beispiel.
Eingabe als Zeichenmatrix; Ändert die Zeichenmatrix, anstatt eine neue zurückzugeben, um Bytes zu sparen.
Probieren Sie es online aus.
Erläuterung:
quelle
char p=m[0][k]
- wenn nicht, löst dies dann keine Ausnahme aus? Gute Arbeit übrigens. Sie schlagen meinen C # -Versuch um ein Vielfaches :)n
k
n
int p=0,t;
p
m[i%s][k]=(char)(p<1?t:p)
Zsh ,
94 87 78 7469 Bytes-7 Bytes durch Ändern eines arithmetischen Ternärs, -9 Bytes durch Ändern des vorhandenen Zeichens (TIL), -4 Bytes durch Eingeben des Index für stdin und der Zeichenfolgen als Argumente, -5 Bytes durch Verwenden einer Zeichenfolge anstelle eines Arrays um die rotierenden Zeichen zu speichern.
Alt Alt Alt AltProbieren Sie es online!Hier sind die Schlüssel dafür, dass diese Antwort funktioniert:
$array[0]
oder$string[0]
ist immer leer$array[n]
oder$string[n]
ist leer, wenn n größer als die Länge des Arrays / Strings istarray[i]=c
oderstring[i]=c
ersetzt das Element / Zeichen.$[$#s<i?0:++j]
,j
wird nicht erhöht , wenn$#s<i
.In der ursprünglichen 94-Byte-Antwort gab es ein interessantes Problem mit der Verwendung
<<<
zum Drucken. Ich musste verwendenecho
, um es zu umgehen:Der Grund dafür ist hier zu sehen:
Hier werden Strings in Subshells ausgeführt, da sie einem anderen Programm als stdin übergeben werden. Wenn kein Programm angegeben ist, wird es implizit an gegeben
cat
. Sie können dies mit sehen<<< $_
.<<< $ZSH_SUBSHELL
ist ähnlich wieecho $ZSH_SUBSHELL | cat
. Da wir inkrementieren müssenj
, können wir uns nicht in einer Unterschale befinden.quelle
R , 62 Bytes
Probieren Sie es online!
Nimmt die Eingabe als mit Leerzeichen aufgefüllte Zeichenmatrix auf. Dreht sich nach oben. Vielen Dank an Kirill L. !
R , 74 Bytes
Probieren Sie es online!
Diese Übermittlung geht der Berücksichtigung von gepolsterten Zeilen voraus.
Aliasing
substr
funktioniert hier nicht, weil wir anrufensubstr
undsubstr<-
in der ersten Zeile.E / A als Liste nicht aufgefüllter Zeilen; dreht sich nach oben.
quelle
L
in der übergeordneten Umgebung benannt ist. Ich aktualisiere jedoch gerne die Leerzeichenauffüllung!C # (Visual C # Interactive Compiler) , 82 Byte
Probieren Sie es online!
Wir danken @ASCIIOnly für den Vorschlag,
foreach
der zu einer Einsparung von 12 Byte geführt hat!-8 Bytes dank @someone!
-1 Byte dank @EmbodimentofIgnorance!
quelle
foreach
da es die umgekehrte Reihenfolge ist :(dynamic
diese Option, um Deklarationen zusammenzuführen und 2 Bytes zu speichern (das habe ich noch nie gesehen!). Probieren Sie es online aus!Ruby , 57 Bytes
Probieren Sie es online!
Nimmt die Eingabe als Array von Zeilen
a
. Dreht den Text auf 0-Basis nach untenk
. Kehrt durch Ändern der Eingabe zurücka
.quelle
05AB1E , 21 Bytes
Kann auf jeden Fall noch mehr golfen werden ..
0-indiziert; Eingabe und Ausgabe als Liste von Zeichenfolgen.
Es dreht sich wie im Beispiel nach unten,
<
kann jedoch durch Rotieren>
nach oben ersetzt werden.Probieren Sie es online aus (Fußzeile tritt der Liste durch Zeilenumbrüche bei, entfernen Sie sie, um die tatsächliche Listenausgabe zu sehen).
Erläuterung:
quelle
K4 , 41 Bytes
Lösung:
Erläuterung:
Ich bin mir nicht sicher, ob mir etwas fehlt ... 0-Index, dreht sich nach oben (ändern Sie den Wert auf, um nach unten
1
zu-1
drehen)quelle
Japt v2.0a0, 18 Bytes
0-basiert mit Eingabe und Ausgabe als mehrzeilige Zeichenfolge. Dreht sich um 1 nach oben.
Es muss eine kürzere Methode geben!
Versuch es
quelle
6
. Ihre Antwort überspringt das Leerzeichenline with
in der ersten undRotate here
vierten Zeile, wohingegen die meisten anderen Antworten dieses Leerzeichen ebenfalls drehen.Gelee , 16 Bytes
Ein dyadischer Link, der links eine Liste von Zeilen (Listen von Zeichen, die keine Zeilenumbrüche enthalten) und rechts eine Ganzzahl akzeptiert, die eine Liste von Zeilen zurückgibt.
Probieren Sie es online! (Die Fußzeile teilt sich in Zeilenumbrüche, ruft den Link auf und verbindet sich wieder durch Zeilenumbrüche)
Wie?
quelle
Perl 5 (
-p
), 75 Bytesk ist 0-indiziert, nach unten drehen
TIO
quelle
Perl 6 ,
3833 BytesÄndert das Array an Ort und Stelle (Regeln nicht verboten)
Probieren Sie es online!
quelle
JavaScript (Node.js) , 52 Byte
Probieren Sie es online!
-7 Bytes dank Shaggy!
Ich habe noch keine JavaScript-Antwort erhalten! Port meiner C # Antwort.
quelle
Kohle ,
342821 BytesProbieren Sie es online! Link ist eine ausführliche Version des Codes. Nimmt ein Array von Strings als Eingabe. 0-indiziert. Edit: Nun,
PeekDirection
das wurde behoben, ich kann es direkt manipulieren. Erläuterung:Drucken Sie die Eingabezeichenfolgen.
Zum Anfang der zu drehenden Spalte springen.
Extrahieren Sie die Zellen, die gedruckt wurden.
Ersetzen Sie jede gedruckte Zelle durch den Wert der vorherigen Zelle (zyklisch). Praktischerweise werden die Zellenwerte zum Zeitpunkt des
PeekDirection
Aufrufs gelesen , so dass die Tatsache, dass derMapCommand
Aufruf neue Werte in die Zellen schreibt, keine Rolle spielt.quelle
Pip
-rn
, 32 Bytes0-indiziert, dreht sich nach unten. Probieren Sie es online!
Filtert nach den Indizes aller Zeilen, die lang genug sind, um an der Rotation teilzunehmen. Durchlaufen Sie dann diese Zeilen und tauschen Sie das entsprechende Zeichen in jeder Zeile mit einer temporären Variablen aus
s
. Wenn Sie am Ende die erste Zeile erneut aufrufen, wird der Dummy-Wert wieder ausgeblendet.quelle
Jelly , 19 Bytes
Probieren Sie es online!
1-indiziert. Dreht sich nach unten. Ein monadischer Link, der eine mit einem Rechtspolster versehene Liste von Jelly-Zeichenfolgen (eine Liste von Zeichenlisten) als erstes Argument und k als zweites verwendet. Leerzeichen sind in der Eingabe verboten, außer als rechter Abstand, aber alle anderen Zeichen sind zulässig.
Wie in TIO implementiert, teilt die Fußzeile eine einzelne Zeichenfolge in eine Liste von Zeichenfolgen auf und fügt sie mit der rechten Maustaste ein. Soweit ich weiß, ist das Ergebnis dieses Schritts gemäß den Regeln als Eingabe für den Hauptlink zulässig.
quelle
GFortran , 199 Bytes
-20 oder so durch Lesen von stdin anstelle einer Datei
-14 unter Verwendung impliziter Ganzzahlen für
i, k, n
-4 durch Entfernen von Leerzeichen und
::
Erfordert die Eingabe von
k
und durch den Benutzern
in der ersten Zeile, wobeik
die zu drehende Spalte undn
die Anzahl der Textzeilen ist. Nachfolgende Eingaben sind die zu drehenden Textzeilen. Das war ein Schmerz zu schreiben! Fortran ist so pedantisch!quelle
T-SQL, 195 Bytes
Probieren Sie es online ungolfed version
quelle