Diese Herausforderung ist inspiriert von dieser sehr schönen Antwort von TidB.
In der Antwort von TidB sind alle acht Zeichen in der richtigen Reihenfolge: gnilwoB edoC
( Code Bowling
rückwärts). Die anderen Saiten jedoch sind waren in einer fremden, zufälligen Reihenfolge.
Ihre Herausforderung besteht darin, dies zu beheben.
Nehmen Sie eine (nicht leere) Zeichenfolge und eine positive Ganzzahl n
als Eingabe. Die Zeichenfolge enthält ASCII-Zeichen im Bereich von 32 bis 126 (Leerzeichen für Tilde).
Sie müssen die Zeichenfolge in aufsteigender Reihenfolge sortieren (von links gesehen, basierend auf dem ASCII-Code-Wert), aber jedes n
Zeichen ab dem Ende der Zeichenfolge überspringen . Nehmen wir als Beispiel den String abcdABC123
als Eingabe und n=4
dann erhalten wir:
abcdABC123 <- Input string. (n=4)
_b___B___3 <- These will not be sorted (every 4th starting from the end)
1_2AC_acd_ <- The remaining characters, sorted
1b2ACBacd3 <- The final string (the output)
Ein anderes Beispiel:
9876543210 <- Input string (n=2)
_8_6_4_2_0 <- These will not be sorted
1_3_5_7_9_ <- The remaining characters, sorted
1836547290 <- The final string (the output)
Die Eingabezeichenfolge kann in einem optionalen Format erfolgen (Zeichenfolge, Liste der Zeichen, Liste der einzelnen Zeichenfolgen ...). Die eingegebene Ganzzahl kann auch in einem optionalen Format angegeben werden.
Testfälle:
Das Format lautet n=__
, gefolgt von der Eingabezeichenfolge in der nächsten Zeile. Die Ausgabe erfolgt in der Zeile darunter.
n=1 (All elements will stay in place)
nafgaksa1252#"%#
nafgaksa1252#"%#
n=214 (The last character will stay in place. All other are sorted.
&/lpfAVD
&/AVflpD
n=8
g7L9T E^n I{><#ki XSj!uhl y= N+|wA}Y~Gm&o?'cZPD2Ba,RFJs% V5U.W;1e 0_zM/d$bH`@vKoQ 43Oq*C
g n !#$%&'i*+,./01l234579;w<=>?@ADoEFGHIJKBLMNOPQR STUVWXYeZ^_`abcdhjkmqsuovyz{|}~C
PHP, 101 Bytes
Negative String-Indizes (PHP 7.1) sparen 21 Bytes - und möglicherweise den Tag:
Laufen Sie mit
php -nr '<code>' '<string>' <N>
.Nervenzusammenbruch
quelle
$i-=1
nicht$i--
?$i--
nicht funktioniert wenn es$i
istNULL
.--$i
das würde ich auch nicht brauchen. ;)Oktave ,
6554 BytesProbieren Sie es online!
Verwendet die logische Indizierung, um ein Array von "festen" und "sortierten" Zeichen zu erstellen. Erläuterung:
Die Art und Weise, wie ich sie erstellt habe
l
,s
setzt voraus, dass sie ungleich Null ist, was meiner Meinung nach eine vernünftige Voraussetzung ist, da viele Sprachen\0
als Begrenzer für das Ende der Zeichenfolge verwendet werden.quelle
l
einen Vektor von Indexnummern direkt umgehen und verwendenPython 2, 191 Bytes
Ja, ich bin sicher, das ist eine schreckliche Lösung.
Probieren Sie es online aus
Ich werde mich nicht darum kümmern, es zu erklären. Es war in Ordnung, bis mir klar wurde, dass es von Anfang an indexiert werden muss. Jetzt ist es ein Monster. An dieser Stelle bin ich nur froh, dass es funktioniert.
quelle
JavaScript (ES6),
10093 ByteÜbernimmt Eingaben in der Currying-Syntax
(s)(n)
.Formatiert und kommentiert
Testfälle
Code-Snippet anzeigen
quelle
Perl 5 , 94 Bytes
88 Byte Code +
-F -pl
Flags.Probieren Sie es online!
Es ist meiner Meinung nach viel zu lang, aber schon gar nicht so hässlich ... Ich versuche es trotzdem weiter zu golfen.
quelle
Jelly ,
1413 BytesVollständiges Programm, das den String nach STD ausgibt *.
Probieren Sie es online!
Wie?
Ich kann nicht anders, als zu glauben,dass es einen Weg gibt, die Tatsache zu nutzen,Ḣ
die ihre Eingabe verändert* für eine Funktion möchte man die Ausgabe mit zu einer einzigen Liste zusammenfassen
F
.Zum Beispiel ein Eingang
"abcdABC123"
,4
ergibt sich :[[['1'],['b']],[['2','A','C'],['B']],[['a','c',',d'],['3']]]
statt:
['1','b','2','A','C','B','a','c',',d','3']
quelle
Python + NumPy ,
115 bis114 ByteVerwendet eine reguläre Python-Liste als Eingabe (war nicht sicher, ob das Aufnehmen eines Arrays als koscher angesehen wird); gibt ein NumPy-Array zurück, das das Ergebnis enthält.
Arbeitet, indem die relevanten Indizes ausgeblendet und der Rest sortiert wird.
quelle
Python 2,
119113 BytesErstellt eine Liste aller zu sortierenden Zeichen, sortiert sie und führt sie zum Drucken zusammen, wobei ein Teil der Umkehrung durch negative Indizierung vermieden wird.
quelle
print"".join(sorted(l[~a]for a in i if a%n)[-a+a/n]if a%n else l[~a]for a in i)[::-1]
spart 5 BytesRuby, 64 Bytes
Verwendet Regex, um alle irrelevanten Zeichen zu erfassen, sowohl zum Ersetzen als auch zum Sortieren.
Probieren Sie es online aus
quelle