Dans ce défi, vous devez déplacer les caractères dans une chaîne entrée n nombre de fois et sortir la chaîne décalée
Contribution
L'entrée contiendra d'abord une chaîne. Dans la ligne suivante, un entier, qui indique n
sera présent.
Production
- Si
n
est positif, déplacez les caractères de la chaîne au bonn
moment. - Si
n
est négatif, déplacez les caractères de la chaîne vers la gauchen
. - Si
n
est égal à zéro, ne déplacez pas les caractères dans la chaîne.
Après le décalage (sauf quand n
est zéro), imprimez la chaîne décalée.
Remarques
- La chaîne ne sera pas vide ou
null
. - La chaîne ne dépassera pas 100 caractères et ne contiendra que des caractères ASCII dans la plage
(espace) à
~
(tilde) (codes de caractères 0x20 à 0x7E, inclus). Voir le tableau ASCII pour référence. - Le changement est cyclique.
- Le nombre
n
peut être positif, négatif ou nul. n
sera toujours supérieur ou égal à -1000 et inférieur ou égal à 1000- Vous pouvez prendre des entrées via
stdin
ou à partir d'arguments de ligne de commande - La chaîne décalée doit être sortie dans
stdout
(ou l'équivalent le plus proche) - Vous pouvez écrire un programme complet ou une fonction qui prend en entrée et sort la chaîne dans
stdout
ou l'équivalent le plus proche
Cas de test
1)
Hello world!
5 -->orld!Hello w
2)
Testing...
-3 -->ting...Tes
3)
~~~
1000 -->~~~
4)
12345
0 -->12345
5)
ABA
17 -->BAA
Notation
Il s'agit de code-golf , donc la soumission la plus courte (en octets) l'emporte.
Javascript ( ES5 ),
5552 octetsCommenté:
la source
CJam, 5 octets
C'est assez simple.
Essayez-le en ligne ici
la source
C, 93 octets
Plus claire est la version d'argument de fonction qui a été modifiée pour rendre la version d'argument de ligne de commande
Celui-ci ne fait que 68 octets, ce qui montre à quel point C est désavantagé lors du traitement des arguments de ligne de commande.
Si le décalage,,
n
est positif alorsstrlen(s)-n%strlen(s)
est le décalage et s'iln
est négatif, le décalage est-n%strlen(s)
. Lesprintf
impressions à partir du décalage,,c
jusqu'à la fin de la chaîne, puis les derniersc
caractères depuis le début.Exemples:
la source
v[2]
est"1"
, le code sort simplement la chaîne sans aucune modification. Et seulement"~~~"
et"12345"
fonctionne. Le reste donne des sorties erronées. S'ils tournaient tous une fois de plus, cela aurait été correcet.main(a,v,n)
->n;main(a,v)
) clang sous linux et cela fonctionne comme prévu. Pour gcc, j'utilise la version 5.1.0 et je compile avecgcc -o rotstr rotstr.c
. Quel compilateur utilisez-vous?n
monde aussi. Même problème. J'ai compilé en utilisantgcc file.c -o file
. J'utilise GCC 4.8.1 sur Windows. Y a-t-il un comportement indéfini dans votre code?v[2]-v[1]-1
parstrlen(v[1])
pourrait faire une différence, c'est le seul endroit où je peux penser à quelque chose de subtil. Malheureusement, je n'ai pas accès à une machine Windows pour tester.Python 3, 45 octets
Le cœur du programme est
Tout le reste n'est qu'un travail maladroit avec les E / S.
la source
ABA 17
cas de test, et serait en général si|n| > length of string
n=int(input())%len(s);
, cela fonctionnerait pour des entiers supérieurs à la longueur de la chaîne, mais nécessiterait 7 caractères supplémentairesK,
87 octetsIl existe déjà une "rotation" (
!
) primitive qui effectue une généralisation de cette opération pour les listes. Les chaînes K sont des listes de caractères, donc cela s'applique. La spécification favorise un peu CJam et Pyth, car la rotation de K se trouve dans le sens inverse de ce qui est souhaité. Envelopper!
dans une fonction et annuler l'argument implicitex
fera ce que nous voulons:Une approche légèrement plus courte, suggérée par kirbyfan64sos, consiste à supprimer les parenthèses et la négation au profit de l'inversion de la chaîne (
|
) avant et après la rotation.S'il n'y avait pas ce décalage d'impédance, la solution serait simplement
Appelé à l'identique:
la source
|
, la faire tourner et l'inverser à nouveau donnerait le même résultat? Si c'est le cas, vous pouvez couper un personnage.Pip, 10 octets
Cela pourrait très probablement être encore amélioré. Pourtant, pour une langue sans opérateur de décalage, 10 octets n'est pas mauvais.
Explication:
Cela fonctionne parce que la chaîne et l' indexation liste Pip est cyclique:
"Hello"@9 == "Hello"@4 == "o"
.la source
rs , 180 caractères
Démo en direct .
La plupart de ceci inverse la chaîne si le nombre d'entrée est négatif. J'ai profité du fait que seuls certains caractères ASCII sont des entrées valides et j'ai utilisé l'onglet à mon avantage.
Notez que j'ai dû tricher un peu: comme rs est un modificateur de texte sur une seule ligne, j'ai dû utiliser
<number> <text>
comme format d'entrée.la source
Java, 167
Prend l'entrée via la ligne de commande.
assez drôle, à l'origine, j'avais accidentellement inversé la façon dont la chaîne devait être décalée. Mais corriger cette erreur était plus court pour multiplier simplement n par -1 puis pour écrire correctement la logique.
étendu:
la source
enum S{; ... }
?enum
s pouvaient être utilisés comme ça!Integer.parseInt
peut êtrenew Integer
(-5 octets); etn%=l;
peut être supprimé si vous passezr[0].substring(n)+
àr[0].substring(n%=l)+
(-2 octets). De plus, vous voudrez peut-être spécifier qu'il s'agit de Java 6, car en Java 7 ou supérieur, une énumération avecmain
-method n'est plus possible.PHP> = 7.1, 88 octets (sans concurrence)
Cas de test
la source
Japt , 2 octets
Essayez-le en ligne
la source
Casio Basic, 27 octets
En fait, il y a une fonction intégrée pour cela sur le Casio ClassPad! Mais cela fonctionne à l'envers, donc
-n
.24 octets pour le code, 3 octets à spécifier
s,n
comme arguments.la source
05AB1E , 6 octets
Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
Étant donné que 05AB1E ne dispose de fonctions de rotation qu'une seule fois vers la droite / gauche , et non une rotation
N
vers la droite / gauche , je boucle plusieurslength + input
fois et je tourne autant de fois vers la droite.Par exemple:
10 + -3 = 7
temps vers la droite, ce qui entraînerating...Tes
.11 + 5 = 16
temps vers la droite, résultant enworldHello
.la source
Julia 0,6 , 31 octets
Essayez-le en ligne!
la source
Stax , 2 octets
Exécuter et déboguer
la source
Perl 5 +
-palF
, 26 octetsEssayez-le en ligne!
la source