Nesse desafio, você deve alterar os caracteres em uma sequência de caracteres inserida n número de vezes e emitir a sequência de caracteres deslocada
Entrada
A entrada primeiro conterá uma sequência. Na próxima linha, um número inteiro, que indica n
estará presente.
Resultado
- Se
n
for positivo, mude os caracteres da sequência para osn
horários certos . - Se
n
for negativo, mude os caracteres da sequência para osn
tempos da esquerda . - Se
n
for zero, não mude os caracteres na string.
Após o deslocamento (exceto quando n
zero), imprima a sequência deslocada.
Notas
- A cadeia não estará vazia ou
null
. - A cadeia não terá mais de 100 caracteres e conterá apenas caracteres ASCII no intervalo
(espaço) a
~
(til) (códigos de caracteres 0x20 a 0x7E, inclusive). Consulte a tabela ASCII para referência. - A mudança é cíclica.
- O número
n
pode ser positivo, negativo ou zero. n
será sempre maior ou igual a -1000 e menor ou igual a 1000- Você pode receber informações via
stdin
ou a partir de argumentos da linha de comando - A string deslocada deve ser emitida no
stdout
(ou equivalente mais próximo) - Você pode escrever um programa completo ou uma função que recebe entrada e gera a string no
stdout
equivalente mais próximo
Casos de teste
1)
Hello world!
5 -->orld!Hello w
2)
Testing...
-3 -->ting...Tes
3)
~~~
1000 -->~~~
4)
12345
0 -->12345
5)
ABA
17 -->BAA
Pontuação
Isso é código-golfe , então o envio mais curto (em bytes) vence.
Javascript ( ES5 ),
5552 bytesComentado:
fonte
CJam, 5 bytes
Isso é bem direto.
Experimente online aqui
fonte
C, 93 bytes
Mais clara é a versão do argumento da função que foi modificada para tornar a versão do argumento da linha de comando
Este tem apenas 68 bytes, o que mostra apenas como C está em desvantagem ao lidar com argumentos de linha de comando.
Se o deslocamento,,
n
é positivo, entãostrlen(s)-n%strlen(s)
é o deslocamento e sen
é negativo, o deslocamento é-n%strlen(s)
. Asprintf
impressões do deslocamento,,c
até o final da sequência e, em seguida, osc
caracteres finais desde o início.Exemplos:
fonte
v[2]
é"1"
, o código simplesmente gera a string sem nenhuma modificação. E só"~~~"
e"12345"
funciona. O restante deles fornece resultados errados. Se todos rodassem mais uma vez, teria sido correto.main(a,v,n)
->n;main(a,v)
) clang no linux e funciona como esperado. Para o gcc, estou usando a versão 5.1.0 e compilandogcc -o rotstr rotstr.c
. Qual compilador você está usando?n
Também tentei tornar global. O mesmo problema. Eu compilei usandogcc file.c -o file
. Estou usando o GCC 4.8.1 no Windows. Existe algum comportamento indefinido no seu código?v[2]-v[1]-1
porstrlen(v[1])
pode fazer a diferença, esse é o único lugar em que consigo pensar em algo sutil acontecendo. Infelizmente não tenho acesso a uma máquina Windows para testar.Python 3, 45 bytes
O núcleo do programa é
Todo o resto é apenas um trabalho desajeitado com E / S.
fonte
ABA 17
caso de teste e, em geral, se|n| > length of string
n=int(input())%len(s);
, ele funcionaria para números inteiros maiores que o comprimento da string, mas exigiria mais 7 caracteresK,
87 bytesJá existe um primitivo "rotate" (
!
) que executa uma generalização dessa operação para listas. K strings são listas de caracteres, portanto se aplicam. A especificação favorece um pouco CJam e Pyth, porque a rotação de K passa na direção oposta ao que é desejado. O agrupamento!
de uma função e a negação do argumento implícitox
farão o que queremos:Uma abordagem um pouco mais curta, sugerida por kirbyfan64sos, é eliminar os parênteses e a negação em favor de reverter a string (
|
) antes e depois da rotação.Se não fosse por essa incompatibilidade de impedância, a solução seria simplesmente
Chamado de forma idêntica:
fonte
|
, a rotação e a reversão novamente produziriam o mesmo resultado? Nesse caso, você pode cortar um personagem.Pip, 10 bytes
Isso poderia possivelmente ser melhorado ainda mais. Ainda assim, para um idioma sem operador de turno, 10 bytes não são ruins.
Explicação:
Ele funciona porque corda e lista de indexação em Pip é cíclica:
"Hello"@9 == "Hello"@4 == "o"
.fonte
rs , 180 caracteres
Demonstração ao vivo .
A maior parte disso está revertendo a string se o número de entrada for negativo. Aproveitei o fato de que apenas alguns caracteres ASCII são válidos e usei a guia para minha vantagem.
Note que eu tive que trapacear um pouco: como o rs é um modificador de texto de linha única, eu tive que usar
<number> <text>
como formato de entrada.fonte
Java, 167
Leva a entrada pela linha de comando.
engraçado o suficiente, originalmente eu havia revertido acidentalmente como a corda deveria ser trocada. Mas corrigir esse erro foi mais curto: basta multiplicar n por -1 e depois escrever a lógica corretamente.
expandido:
fonte
enum S{; ... }
?enum
s podem ser usados assim!Integer.parseInt
pode sernew Integer
(-5 bytes); en%=l;
pode ser removido se você mudarr[0].substring(n)+
parar[0].substring(n%=l)+
(-2 bytes). Além disso, você pode especificar que isso é Java 6, porque no Java 7 ou superior, uma enumeração commain
-method não é mais possível.PHP> = 7.1, 88 bytes (não concorrente)
Casos de teste
fonte
Japonês , 2 bytes
Experimente online
fonte
Casio Basic, 27 bytes
Como se vê, há um recurso interno para isso na Casio ClassPad! Mas funciona ao contrário, portanto
-n
.24 bytes para o código, 3 bytes para especificar
s,n
como argumentos.fonte
05AB1E , 6 bytes
Experimente online ou verifique todos os casos de teste .
Explicação:
Como o 05AB1E possui apenas integrados para Girar uma vez para a direita / esquerda , e não Girar
N
quantidade para a direita / esquerda , faço um loop nalength + input
quantidade de vezes e giro várias vezes para a direita.Por exemplo:
10 + -3 = 7
tempos para a direita, resultando emting...Tes
.11 + 5 = 16
tempos para a direita, resultando emworldHello
.fonte
Julia 0.6 , 31 bytes
Experimente online!
fonte
Stax , 2 bytes
Execute e depure
fonte
Perl 5 +
-palF
, 26 bytesExperimente online!
fonte