Bei dieser Herausforderung müssen Sie die Zeichen in einer eingegebenen Zeichenfolge n-mal verschieben und die verschobene Zeichenfolge ausgeben
Eingang
Die Eingabe enthält zunächst eine Zeichenfolge. In der nächsten Zeile steht eine ganze Zahl, die bezeichnet n
.
Ausgabe
- Wenn dies
n
positiv ist, verschieben Sie die Zeichen in der Zeichenfolge nach rechtsn
. - Wenn dies
n
negativ ist, verschieben Sie die Zeichen in der Zeichenfolge nach linksn
. - Wenn
n
Null ist, verschieben Sie die Zeichen in der Zeichenfolge nicht.
n
Drucken Sie nach dem Verschieben (außer wenn Null ist) die verschobene Zeichenfolge.
Anmerkungen
- Die Zeichenfolge wird nicht leer sein oder
null
. - Die Zeichenfolge darf nicht länger als 100 Zeichen sein und enthält nur ASCII-Zeichen im Bereich
(Leerzeichen) bis
~
(Tilde) (Zeichencodes 0x20 bis 0x7E, einschließlich). Siehe ASCII-Tabelle als Referenz. - Die Verschiebung ist zyklisch.
- Die Zahl
n
kann positiv, negativ oder null sein. n
wird immer größer oder gleich -1000 und kleiner oder gleich 1000 sein- Sie können Eingaben über
stdin
oder über Befehlszeilenargumente vornehmen - Die verschobene Zeichenfolge muss in der
stdout
(oder der nächsthöheren Entsprechung) ausgegeben werden. - Sie können ein vollständiges Programm oder eine Funktion schreiben, die die Eingabe und Ausgabe der Zeichenfolge in
stdout
oder in der nächsten Entsprechung übernimmt
Testfälle
1)
Hello world!
5 -->orld!Hello w
2)
Testing...
-3 -->ting...Tes
3)
~~~
1000 -->~~~
4)
12345
0 -->12345
5)
ABA
17 -->BAA
Wertung
Dies ist Code-Golf , also gewinnt die kürzeste Einreichung (in Bytes).
Javascript ( ES5 ),
5552 BytesKommentiert:
quelle
CJam, 5 Bytes
Das ist ziemlich einfach.
Probieren Sie es hier online aus
quelle
C 93 Bytes
Deutlicher ist die Funktionsargumentversion, die geändert wurde, um die Befehlszeilenargumentversion zu erstellen
Dies sind nur 68 Bytes, was nur zeigt, wie benachteiligt C im Umgang mit Befehlszeilenargumenten ist.
Wenn die Verschiebung,,
n
positiv ist,strlen(s)-n%strlen(s)
ist der Versatz und wenn sien
negativ ist, ist der Versatz-n%strlen(s)
. Derprintf
Ausdruck erfolgt vom Offset,c
bis zum Ende der Zeichenfolge und dann die letztenc
Zeichen vom Anfang an.Beispiele:
quelle
v[2]
gibt"1"
der Code die Zeichenfolge einfach ohne Änderungen aus. Und nur"~~~"
und"12345"
funktioniert. Der Rest von ihnen gibt falsche Ausgaben. Wenn sich alle noch einmal gedreht hätten, wäre das korrigiert worden.main(a,v,n)
->n;main(a,v)
) unter Linux getestet und es funktioniert wie erwartet. Für gcc verwende ich Version 5.1.0 und kompiliere mitgcc -o rotstr rotstr.c
. Welchen Compiler verwenden Sie?n
global zu machen. Gleicher Fehler. Ich habe mit kompiliertgcc file.c -o file
. Ich verwende GCC 4.8.1 unter Windows. Gibt es ein undefiniertes Verhalten in Ihrem Code?v[2]-v[1]-1
durchstrlen(v[1])
könnte einen Unterschied machen, das ist der einzige Ort, an dem mir etwas Feines einfällt. Leider habe ich keinen Zugang zu einem Windows-Rechner zum Testen.Python 3, 45 Bytes
Der Kern des Programms ist
Der Rest ist nur schwerfällige Arbeit mit I / O.
quelle
ABA 17
Testfall fehl und wäre im Allgemeinen wenn|n| > length of string
n=int(input())%len(s);
, funktioniert dies für Ganzzahlen, die länger als die Zeichenfolge sind, aber 7 weitere Zeichen erfordernK,
87 BytesEs gibt bereits ein primitives "rotate" (
!
), das eine Verallgemeinerung dieser Operation für Listen durchführt. K-Zeichenfolgen sind Listen von Zeichen, daher gilt dies. Die Spezifikation bevorzugt jedoch CJam und Pyth, da Ks Drehung zufällig in die entgegengesetzte Richtung von dem geht, was gewünscht wird. Verpackung!
eine Funktion einschließen und das implizite Argument negierenx
, tun Sie, was wir wollen:Ein etwas kürzerer Ansatz, den kirbyfan64sos vorschlägt, besteht darin, die Klammern und die Negation zu beseitigen, um die Zeichenfolge (
|
) vor und nach der Drehung umzukehren .Ohne diese Impedanzfehlanpassung wäre die Lösung einfach
Identisch genannt:
quelle
|
, Drehen der Saite und erneutes Umkehren zu demselben Ergebnis führen? In diesem Fall können Sie ein Zeichen abschneiden.Pip, 10 Bytes
Dies könnte möglicherweise weiter verbessert werden. Für eine Sprache ohne Shift-Operator sind 10 Bytes jedoch nicht schlecht.
Erläuterung:
Es funktioniert , weil String und Liste Indizierung in Pip ist zyklisch:
"Hello"@9 == "Hello"@4 == "o"
.quelle
rs , 180 Zeichen
Live-Demo .
Meistens wird die Zeichenfolge umgekehrt, wenn die eingegebene Nummer negativ ist. Ich habe die Tatsache ausgenutzt, dass nur einige ASCII-Zeichen gültige Eingaben sind, und die Registerkarte zu meinem Vorteil verwendet.
Beachten Sie, dass ich ein wenig schummeln musste: Da rs ein einzeiliger Textmodifikator ist, musste ich
<number> <text>
als Eingabeformat verwenden.quelle
Java, 167
Übernimmt die Eingabe über die Befehlszeile.
lustig genug, ursprünglich hatte ich versehentlich umgekehrt, wie die Saite verschoben werden sollte. Die Behebung dieses Fehlers war jedoch kürzer, als nur n mit -1 zu multiplizieren und dann die Logik richtig zu schreiben.
erweitert:
quelle
enum S{; ... }
?enum
s so verwendet werden kann!Integer.parseInt
kann seinnew Integer
(-5 Bytes); undn%=l;
kann entfernt werden, wenn Sier[0].substring(n)+
zur[0].substring(n%=l)+
(-2 Byte) wechseln . Möglicherweise möchten Sie auch angeben, dass dies Java 6 ist, da in Java 7 oder höher eine Aufzählung mitmain
-method nicht mehr möglich ist.PHP> = 7.1, 88 Bytes (nicht konkurrierend)
Testfälle
quelle
Japt , 2 Bytes
Probieren Sie es online aus
quelle
Casio Basic, 27 Bytes
Wie sich herausstellt, gibt es dafür ein eingebautes Casio ClassPad! Aber es funktioniert umgekehrt
-n
.24 Bytes für den Code, 3 Bytes
s,n
als Argumente.quelle
05AB1E , 6 Bytes
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
Seit 05AB1E gibt es nur integrierte Funktionen zum Drehen einmal nach rechts / links und nicht zum Drehen des
N
Betrags nach rechts / links , I - Schleifelength + input
Höhe der Zeit und dass viele Male nach rechts drehen.Beispielsweise:
10 + -3 = 7
mal nach rechts, was zur Folge hatting...Tes
.11 + 5 = 16
mal nach rechts, was dazu führtworldHello
.quelle
Julia 0,6 , 31 Bytes
Probieren Sie es online!
quelle
Stax , 2 Bytes
Führen Sie es aus, und debuggen Sie es
quelle
Perl 5+
-palF
, 26 BytesProbieren Sie es online!
quelle