Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine Zeichenfolge s
und eine Ganzzahl n
als Parameter akzeptiert. Ihr Programm sollte die Zeichenfolge bei der Transformation wie folgt drucken (oder zurückgeben):
Beginnen Sie oben links und bewegen Sie sich nach unten und rechts. Schreiben Sie s
als Welle der Höhe n
. Kombinieren Sie dann jede Zeile von oben nach unten als Zeichenfolge (ohne Leerzeichen).
Beispiel
Mit der Zeichenfolge "WATERMELON" und einer Höhe von 3:
Die Welle sollte so aussehen:
W R O
A E M L N
T E
Kombinieren Sie dann die Zeilen von oben nach unten:
WRO
AEMLN
TE
Ihr Programm sollte also den String "WROAEMLNTE" zurückgeben
Ebenso sollte "WASSERMELONE" mit Höhe 4 die folgende Welle erzeugen:
W E
A M L
T R O
E N
Ihr Programm sollte dann den String "WEAMLTROEN" zurückgeben
Regeln
Eingang
Die Eingabe kann in jedem vernünftigen Format erfolgen. Die Zeichenfolge kann auf jeden Fall beliebig sein. Sie können das annehmen0 < n <= s.length
Ausgabe
Die Ausgabe sollte nur aus der transformierten Zeichenfolge (unabhängig davon, ob sie an STDOUT zurückgegeben oder gedruckt wird) und allen nachfolgenden Zeilenumbrüchen bestehen.
Wertung
Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes! Standardlücken sind nicht erlaubt.
Testfälle
Input Output
programmingpuzzles, 5 -> piermnlsomgzgapzru
codegolf, 3 -> cgoeofdl
elephant, 4 -> enlatehp
1234567, 3 -> 1524637
qwertyuiop, 1 -> qwertyuiop
n
> 1 annehmen ? Bitte klären und wenn nicht, fügen Sie einen Testfalln > 0
, aber esn=1
ist ein gültiger Fall. Ich werde die Frage jetzt aktualisieren.Antworten:
Schale , 6 Bytes
Probieren Sie es online!
Funktioniert auch für
n = 1
.Erläuterung
So funktioniert die übergeordnete Funktion
δ
unter der Haube. Angenommen, Sie haben eine Funktion höherer Ordnung, die eine unäre Funktion und eine Liste übernimmt und eine neue Liste zurückgibt. Nimmt zum BeispielÖ
eine Funktion und sortiert eine Liste unter Verwendung dieser als Schlüssel. NimmtδÖ
dann eine Binärfunktion und zwei Listen, komprimiert die Listen,Ö
sortiert die Paare mit der Binärfunktion als Schlüssel und projiziert die Paare schließlich auf die zweite Koordinate. Wir verwendenK
als Schlüsselfunktion, die einfach das erste Argument zurückgibt und das zweite ignoriert.quelle
MATL , 16 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Betrachten Sie Eingänge
5
,'programmingpuzzles'
.quelle
Haskell , 64 Bytes
Probieren Sie es online!
quelle
J ,
54, 29, 27,26 Bytes-1 Byte dank hoosierEE
Probieren Sie es online!
quelle
n=1
seit Anfang|@i:
statt[:|i:
speichert ein ByteR , 68 Bytes
Probieren Sie es online!
n=1
Groß- / Kleinschreibung behoben dank @ J.Doequelle
Python 2 ,
11910898929197939190 BytesProbieren Sie es online!
-1 Byte, danke an Jonathan Frech
quelle
05AB1E (Legacy) ,
118 BytesInspiriert von der MATL -Antwort von @LuisMendo .
-3 Bytes danke an @Adnan, weil ich ein Idiot bin ..>.>
Probieren Sie es online aus .
Erläuterung:
HINWEIS: Das
counter_variable
wird verwendet, da es in der Python Legacy-Version von 05AB1EΣ
keinen integrierten Index hatteN
, den es in der neuen Elixir-Neuschreibversion von 05AB1E hat. Warum verwende ich immer noch die Legacy-Version? Da beim Neuschreiben von Elixir die Zeichenfolge implizit in eine Liste von Zeichen umgewandelt wird und eine zusätzliche Zeichenfolge erforderlich ist,}J
um sie wieder in eine auszugebende Zeichenfolge umzuwandeln (und es enthält derzeit auch einen Fehler,è
bei dem das Indizieren in die verlängerte Liste überhaupt nicht funktioniert) ..: S)quelle
¹g∍
Teil nicht, da 05AB1E die zyklische Indizierung für verwendetè
.Japt , 16 Bytes
Testen Sie es online!
Erläuterung
quelle
ü
Methode ist neu?-P
Flag verwenden, um weitere 2 zu speichern.Gelee , 8 Bytes
6 Byte schlägt für Höhe 1 fehl; Zwei Bytes für die Adressierung ... kann eine 7 gefunden werden?
Eine dyadische Verknüpfung, die eine positive Ganzzahl und eine Liste von Zeichen akzeptiert, die eine Liste von Zeichen ergibt.
Probieren Sie es online!
Wie?
quelle
JavaScript (ES6), 75 Byte
Kürzere Formel vorgeschlagen von @MattH (-3 Bytes)
Übernimmt die Eingabe als
(string)(n)
.Probieren Sie es online!
JavaScript (ES7), 78 Byte
4 Bytes gespart dank @ETHproductions
Übernimmt die Eingabe als
(string)(n)
.Probieren Sie es online!
quelle
o
mitx/n&1?n-x%n:x%n
anstelle von mit berechnenn*n-(x%(n*2)-n)**2
.K ( Kona ), 23 Bytes
Eine Übersetzung der J-Antwort von Galen
quelle
MBASIC ,
146159155 BytesAktualisiert, um n = 1 zu behandeln
Ausgabe:
quelle
Perl 6 , 49 Bytes
Probieren Sie es online!
Nimmt Eingaben als Curry-Funktion.
Erläuterung:
Die Reihenfolge, nach der sortiert wird, sieht folgendermaßen aus (für
n=5
):quelle
J , 24 Bytes
Probieren Sie es online!
Explizites dyadisches Verb. Führen Sie es wie
'codegolf' f 3
.Wie es funktioniert
Normalerweise benötigt die explizite Funktion zusätzliche 5 Bytes in Form von
n :'...'
. Wenn jedoch eine Fehlerbehandlung hinzugefügt wird, sinkt die Differenz aufgrund der Parens und des Speicherplatzes in auf 2 Byte(tacit)<space>::
.quelle
sort up
?! Ihr explizites Verb ist immer noch 3 Bytes kürzer. Gute Entscheidung!APL (Dyalog Classic) , 23 Byte
Probieren Sie es online!
quelle
Powershell,
99 bis95 BytesTestskript:
Ausgabe:
Erläuterung
Das Drehbuch:
Der Ausdruck
((1..$n+$n..1)*$s.Length|gu
erzeugt eine Sequenz wie1,2,3,3,2,1,1,2,3,3,2,1...
und entfernt benachbarte Duplikate.gu
ist ein Alias für Get-Unique .$n=3
die deduplizierte Sequenz gilt:1,2,3,2,1,2,3,2,1...
$n=1
die deduplizierte Sequenz gilt:1
Der Ausdruck
$i++*($n-gt1)
gibt einen Index in der deduplizierten Sequenz zurück.=$i++
wenn$n>1
sonst=0
quelle
Ruby ,
7565 BytesProbieren Sie es online!
Nimmt Eingaben als Array von Zeichen und gibt einen String zurück
Wie es funktioniert:
h
Zeichenfolgenh
und fällt bis0
und usw.).quelle
C
142134 Bytes8 Bytes gespart dank Jonathan Frech
Code:
Erläuterung:
Probieren Sie es online!
quelle
Holzkohle , 21 Bytes
quelle
SNOBOL4 (CSNOBOL4) , 191 Bytes
Probieren Sie es online!
Nimmt
S
dannN
getrennte Zeilen auf.Erläuterung:
quelle
Sauber ,
10584 BytesProbieren Sie es online!
quelle
JavaScript (Node.js) , 83 Byte
Probieren Sie es online!
quelle
Pyth ,
2221 BytesÜbernimmt die Eingabe wie
n
folgts
in separaten Zeilen. Versuchen Sie es online hier oder überprüfen alle Testfälle auf einmal hier .Bearbeiten: Speichert ein Byte, indem das leere Häkchen an das Ende der Verarbeitung verschoben wird. Vorherige Version:
seMhD,V*lz|+PUQP_UQ]0z
quelle
Rot , 153 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Ich habe zwei Lösungen für das Problem. Die erste Lösung, die ich zuerst gemacht habe, dann habe ich mir eine andere Möglichkeit ausgedacht, um Bytes zu sparen, aber das ist nicht so, dass ich es trotzdem aufgenommen habe.
Lösung 1
PHP ,
152144116 BytesProbieren Sie es online!
Lösung 2
PHP , 162 Bytes
Probieren Sie es online!
quelle
$f
und$n-1-$i
können$n-~$i
. 144 Bytesn=1
. Dieser funktioniert für die gleiche Anzahl von Bytes.echo
, um weitere 5 BytesRuby , 84 Bytes
Probieren Sie es online!
quelle