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 n
estará presente.
Salida
- Si
n
es positivo, cambie los caracteres de la cadena a losn
tiempos correctos . - Si
n
es negativo, cambie los caracteres de la cadena a la izquierdan
. - Si
n
es cero, no desplace los caracteres en la cadena.
Después de cambiar (excepto cuando n
es 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
n
puede ser positivo, negativo o cero. n
siempre será mayor o igual a -1000 y menor o igual a 1000- Puede tomar datos a través de
stdin
o 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
stdout
equivalente 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,,
n
es positivo, entoncesstrlen(s)-n%strlen(s)
es el desplazamiento y sin
es negativo, el desplazamiento es-n%strlen(s)
. Lasprintf
impresiones desde el desplazamiento,c
hasta el final de la cadena, y luego losc
caracteres 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?n
global 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]-1
constrlen(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 17
caso de prueba, y en general lo haría si|n| > length of string
n=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ícitox
hará 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{; ... }
?enum
s se puede usar así!Integer.parseInt
puede 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 superiormain
ya 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,n
como 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
N
cantidad hacia la derecha / izquierda , hago un bucle delength + input
cantidad de veces y giro tantas veces hacia la derecha.Por ejemplo:
10 + -3 = 7
veces hacia la derecha, lo que dará como resultadoting...Tes
.11 + 5 = 16
veces 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