En este desafío, debe cambiar los caracteres en una cadena ingresada n número de veces y generar la cadena desplazada
Entrada
La entrada primero contendrá una cadena. En la siguiente línea, un número entero, que denota nestará presente.
Salida
- Si nes positivo, cambie los caracteres de la cadena a losntiempos correctos .
- Si nes negativo, cambie los caracteres de la cadena a la izquierdan.
- Si nes cero, no desplace los caracteres en la cadena.
Después de cambiar (excepto cuando nes cero), imprima la cadena desplazada.
Notas
- La cadena no estará vacía o null.
- La cadena no tendrá más de 100 caracteres y solo contendrá caracteres ASCII en el rango (espacio) a~(tilde) (códigos de caracteres 0x20 a 0x7E, inclusive). Consulte la tabla ASCII para referencia.
- El cambio es cíclico.
- El número npuede ser positivo, negativo o cero.
- nsiempre será mayor o igual a -1000 y menor o igual a 1000
- Puede tomar datos a través de stdino desde argumentos de línea de comando
- La cadena desplazada debe salir en el stdout(o el equivalente más cercano)
- Puede escribir un programa completo o una función que tome la entrada y la salida de la cadena en el stdoutequivalente más cercano
Casos de prueba
1)
Hello world!
5             -->orld!Hello w
2)
Testing...
-3            -->ting...Tes
3)
~~~
1000          -->~~~
4)
12345
0             -->12345
5)
ABA
17            -->BAA
Puntuación
Este es el código de golf , por lo que gana el envío más corto (en bytes).

Javascript ( ES5 ),
5552 bytesComentado:
fuente
CJam, 5 bytes
Esto es bastante sencillo.
Pruébalo en línea aquí
fuente
C, 93 bytes
Más clara es la versión de argumento de función que se modificó para hacer la versión de argumento de línea de comando
Este tiene solo 68 bytes, lo que demuestra cuán desventajoso es C cuando se trata de argumentos de línea de comando.
Si el desplazamiento,,
nes positivo, entoncesstrlen(s)-n%strlen(s)es el desplazamiento y sines negativo, el desplazamiento es-n%strlen(s). Lasprintfimpresiones desde el desplazamiento,chasta el final de la cadena, y luego losccaracteres finales desde el principio.Ejemplos:
fuente
v[2]es así"1", el código simplemente genera la cadena sin modificaciones. Y solo"~~~"y"12345"funciona. El resto da resultados incorrectos. Si todos giraran una vez más, habría sido correcto.main(a,v,n)->n;main(a,v)) clang en linux y funciona como se esperaba. Para gcc estoy usando la versión 5.1.0 y compilando congcc -o rotstr rotstr.c. Qué compilador estas usando?nglobal también. Mismo problema. Recopilé usandogcc file.c -o file. Estoy usando GCC 4.8.1 en Windows. ¿Hay algún comportamiento indefinido en su código?v[2]-v[1]-1constrlen(v[1])podría hacer una diferencia, que es el único lugar que se me ocurre algo sutil pasando. Lamentablemente no tengo acceso a una máquina de Windows para probar.Python 3, 45 bytes
El núcleo del programa es
Todo lo demás es solo un trabajo torpe con E / S.
fuente
ABA 17caso de prueba, y en general lo haría si|n| > length of stringn=int(input())%len(s);, funcionaría para enteros mayores que la longitud de la cadena, pero requeriría 7 caracteres másK,
87 bytesYa existe un primitivo "rotar" (
!) que realiza una generalización de esta operación para las listas. Las cadenas K son listas de caracteres, por lo que se aplica. Sin embargo, la especificación favorece un poco a CJam y Pyth, porque la rotación de K pasa a la dirección opuesta a la deseada. Ajustar!una función y negar el argumento implícitoxhará lo que queramos:Un enfoque un poco más corto, sugerido por kirbyfan64sos, es eliminar los paréntesis y la negación a favor de invertir la cadena (
|) antes y después de la rotación.Si no fuera por este desajuste de impedancia, la solución sería simplemente
Llamado idénticamente:
fuente
|, rotar eso e invertirlo nuevamente arrojaría el mismo resultado? Si es así, puedes cortar un personaje.Pip, 10 bytes
Esto posiblemente podría mejorarse aún más. Aún así, para un idioma sin operador de turno, 10 bytes no está mal.
Explicación:
Funciona porque la cadena y la lista de indexación de la pipa es cíclico:
"Hello"@9 == "Hello"@4 == "o".fuente
rs , 180 caracteres
Demostración en vivo .
La mayor parte de esto está invirtiendo la cadena si el número de entrada es negativo. Aproveché el hecho de que solo algunos caracteres ASCII son entradas válidas y utilicé la pestaña para mi ventaja.
Tenga en cuenta que tuve que hacer un poco de trampa: dado que rs es un modificador de texto de una sola línea, tuve que usarlo
<number> <text>como formato de entrada.fuente
Java, 167
Toma la entrada a través de la línea de comando.
Curiosamente, originalmente había invertido accidentalmente cómo se suponía que se debía mover la cuerda. Pero corregir ese error fue más corto para multiplicar n por -1 y luego escribir la lógica correctamente.
expandido:
fuente
enum S{; ... }?enums se puede usar así!Integer.parseIntpuede sernew Integer(-5 bytes); yn%=l;se puede eliminar si cambiar[0].substring(n)+ar[0].substring(n%=l)+(-2 bytes). Además, es posible que desee especificar que esto es Java 6, porque en Java 7 o superiormainya no es posible una enumeración con -method.PHP> = 7.1, 88 bytes (no competitivos)
Casos de prueba
fuente
Japt , 2 bytes
Pruébalo en línea
fuente
Casio Basic, 27 bytes
¡Resulta que hay una función integrada para esto en la Casio ClassPad! Pero funciona a la inversa, por lo tanto
-n.24 bytes para el código, 3 bytes para especificar
s,ncomo argumentos.fuente
05AB1E , 6 bytes
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Dado que 05AB1E solo tiene incorporados para Girar una vez hacia la derecha / izquierda , y no Girar la
Ncantidad hacia la derecha / izquierda , hago un bucle delength + inputcantidad de veces y giro tantas veces hacia la derecha.Por ejemplo:
10 + -3 = 7veces hacia la derecha, lo que dará como resultadoting...Tes.11 + 5 = 16veces hacia la derecha, lo que dará como resultadoworldHello.fuente
Julia 0.6 , 31 bytes
Pruébalo en línea!
fuente
Stax , 2 bytes
Ejecutar y depurarlo
fuente
Perl 5 +
-palF, 26 bytesPruébalo en línea!
fuente