Você precisa escrever uma função / programa que receba entrada por meio dos stdin
/ argumentos da linha de comando / argumentos da função, mescla caracteres em uma sequência e depois produza a sequência final via stdout
.
A entrada primeiro conterá uma sequência (não vazia ou null
), um espaço e, em seguida, um número par de números não negativos, todos separados por espaços. Se a entrada for obtida através de argumentos de função, a sequência será um dos argumentos, enquanto os números inteiros, separados por um espaço, serão o outro. Você deve trocar os caracteres da sequência nos índices correspondentes aos pares consecutivos de números.
Por exemplo:
Hello_world! 0 6
deve resultar em
wello_Horld!
Premissas
- Você pode escolher entre indexação com base em 0 e com base em 1 e pode assumir que os índices fornecidos sempre estarão dentro do intervalo.
- A cadeia não terá mais de 100 caracteres e conterá apenas caracteres ASCII no intervalo
!
de~
(códigos de caracteres 0x21 a 0x7E, inclusive). Consulte a tabela ASCII para referência. - Os dois índices em um par podem ser idênticos (nesse caso, nada é trocado nessa etapa).
Pontuação
Isso é código de golfe, então a submissão mais curta (em bytes) vence.
Casos de teste
Hello_world! 0 6 => wello_Horld!
First 1 2 1 0 0 4 => tFisr
(Second!$$) 8 7 10 1 => ()econd$!$S
~Third~ 0 0 6 6 0 6 6 0 => ~Third~
Respostas:
CJam, 11 bytes
Como funciona
Essa é uma abordagem um pouco diferente, na qual eu simplesmente executo um loop do while, até que eu tenha pares de números restantes na entrada.
Experimente online aqui
fonte
Python 3,
8986 bytesDescompacte todas as coisas. (3 bytes salvos graças a @potato)
fonte
[*s],*L=input().split()
você pode retirar a linha depois dela. Eu realmente gosto da sua solução, é quase elegante, mesmo que seja muito golfista.CJam, 13 bytes
Teste aqui.
Explicação
fonte
C (137 b)
A explicação está chegando ...
Argumentos
T = uma palavra do tipo char * .
V = uma matriz de um número par de elementos inteiros.
L = comprimento de V
Resultado
corda mista
Como funciona ? :
varre os números da matriz V vice-versa e coloca o enésimo elemento da sequência depois de acompanhar todo o seu progresso até o ponto real. Exemplo
input = T = "Primeiro", V = {1,2,1,0,0,4}
V inverso = {4,0,0,1,2,1}
Experimente aqui
fonte
int
não é necessário (pode resultar em comportamento inesperado) e asint
variáveis que são parâmetros não precisam de umaint
variável, em vez de declarar no loop pode ser declarada em um local fora do loop, use emputchar
vez deprintf
etcPython
3-161149Jogou golfe trocando algumas variáveis e usando
;
como no comentário de Tim.Eu esperava que saísse parecendo golfe, mas não tanto assim.
fonte
while
parawhile c<len(t):line1;line2;line3...
.c=c+2
vai parac+=2
c
na verdade, é indexart
(a entrada) para obter as posições que precisamos trocar. Mas comot[0]
é a corda, precisamos trocart[1]
et[2]
segurar o primeiro par de swaps.C,
109107102 bytesNota:
s
ea
precisa ser declarado como matrizes globais.s
é a string que você deseja trocar ea
é uma matrizint
com todos os valores numéricos.Se o código acima não funcionar, tente usar em
void f(){...}
vez def(){...}
Código não destruído:
Teste aqui
fonte
Python 3, 135
Explicação:
fonte
C, 70 bytes
Dado que a string de entrada tem no máximo 100, decidi tornar o byte 'NULL' indicando que o final da matriz inteira é inequívoco
0xFF
. Presumivelmente, isso não conta como entrada extra, embora por um custo de(no máximo) 73 bytes possa ser transformado em indexação baseada em 1 e usado'\0'
como o final da matriz.Praticamente apenas faz trocas regulares com uma variável tmp e usa que o operador vírgula introduz pontos de sequência para ter um comportamento definido (diferente de algumas manifestações de xor swaps que teriam uma contagem mais baixa de caracteres, mas que levariam a um comportamento indefinido).
Edit: Conforme solicitado, você pode testá-lo: http://rextester.com/OVOQ23313 .
fonte
Dardo - 123
Supõe que a entrada na linha de comando seja dividida automaticamente em espaços. Caso contrário, ele precisa de uma inicial
x=x[0].split(' ');
para dividir a sequência em texto e índices.Com mais espaço em branco:
Execute / teste isso em dartpad.dartlang.org .
fonte
Rebol - 71
Ungolfed:
fonte
input
função não poderá chamar STDIN a partir daí. A solução alternativa é definir de forma simplesinput
o valor que você deseja testar. Aqui está um exemplo completo do primeiro teste -input: "hello_World 1 7" s: take i: split input" "foreach[a b]i[swap at s do a at s do b]print s
e clique em Fazer no Rebol 3 NB. Rebol usa indexação baseada em 1.C, 143 bytes
O programa acima recebe entrada dos argumentos da linha de comando, copia a sequência em uma matriz, troca os caracteres correspondentes e, em seguida, gera a sequência modificada.
Código não destruído:
fonte
10
um dos índices.JavaScript (ES6), 95
95 bytes com uma entrada de sequência única (função f abaixo)
75 bytes com 2 parâmetros, sequência de caracteres e matriz numérica (função g abaixo)
(Somente EcmaScript 6, Firefox)
fonte