Dada uma string, inverta-a intercaladamente. Veja como fazer isso abcdefghi
e abcdefghij
indexado a 0:
- Separe os caracteres nos índices pares dos caracteres nos índices ímpares:
acegi bdfh
acegi bdfhj - Inverta os caracteres em índices ímpares:
acegi hfdb
acegi jhfdb - Intercalar novamente em uma sequência:
ahcfedgbi
ajchefgdib
Regras
- Você deve suportar as seqüências de comprimento par e de comprimento ímpar.
- No índice 0, você deve reverter os caracteres em índices ímpares, não pares.
- Com relação ao índice 1, é claro, você deve reverter os caracteres em índices pares, não ímpares.
- A entrada consistirá em ASCII imprimível (pontos de código 32-126), sem novas linhas.
- Você pode receber a entrada como uma string ou como uma lista de caracteres (NÃO strings de 1 caractere). Por exemplo,
String
/char[]
ouchar*
são permitidos, masString[]
/char[][]
ouchar**
não são.
Casos de teste
Input
Output
Hello, World!
HdlroW ,olle!
Hello World!
H!llooW rlde
ABCDEFGHIJKLMNOPQRSTUVWXYZ
AZCXEVGTIRKPMNOLQJSHUFWDYB
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
}"{$y&w(u*s,q.o0m2k4i6g8e:c<a>_@]B[DYFWHUJSLQNOPMRKTIVGXEZC\A^?`=b;d9f7h5j3l1n/p-r+t)v'x%z#|!~
P
P
AB
AB
xyz
xyz
Para a cadeia vazia, retorne a própria cadeia vazia.
Respostas:
Geléia , 7 bytes
Este é um programa completo.
Experimente online!
Como funciona
fonte
MATL , 8 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
2L
acontece com "Push [2,2,1j]" e5M
"Push [2,2,1j] novamente" ... E algumas pessoas dizem que os idiomas do golfe não são legíveis!2L
produz um literal predefinido.5M
é uma área de transferência automática que armazena entradas para chamadas de funções recentes. Na verdade, ele poderia ser substituído por2L
uma mesma contagem de bytesAlice , 10 bytes
Experimente online!
Metade dos bytes deste programa são gastos na formatação correta da fonte, os comandos reais são justos
IYRZO
, porque Alice possui os recursos corretos para esta tarefa.Explicação
Como eu disse, os espelhos (
/\
), a nova linha e@
existem apenas para fazer o ip se mover na direção certa e finalizar o programa no final. O código real, linearizado, é o seguinte:Bem direto, eu diria.
fonte
Java (OpenJDK 8) ,
108969493 bytesSalvo 1 byte usando o truque de @ Neil
s[s.length+~i|1]
Experimente online!
fonte
String f(char[]s)
coms->
.. E você pode salvar um byte assim, colocando aint
inicialização dentro do loop for:for(int a=s.length,b=0;b<a;b++)
. Experimente online.Python 2 , 52 bytes
Experimente online! ou Experimente todos os casos de teste
fonte
Oitava, 32 bytes
Experimente online!
fonte
JavaScript (ES6), 48 bytes
fonte
Geléia , 9 bytes
Experimente online!
-1 byte graças a Dennis
fonte
¢
porÇ
, não precisará do³
link auxiliar.Retina ,
1713 bytesExperimente online!
Corrigido um erro graças a Neil.
Guardado 4 bytes graças a Kobi.
Seleciona cada letra precedida por um número ímpar de caracteres e os reverte. Faz isso usando o
\G
que corresponde ao final da última correspondência.fonte
$
vez de#
.\G
em vez disso, o lookbehind, e você pode remover o$
:O^`(?<=\G.).
(12 bytes)$
pois todas as entradas estavam em ordem lexicográfica classificada. Adicionei um novo caso de teste no qual seu código falharia.PHP> = 7.1, 58 bytes
Versão Online
fonte
APL (Dyalog) , 9 bytes
Requer
⎕IO←0
(padrão em muitos sistemas) para definição adequada de ímpar e par.Experimente online!
⌽
marcha ré@
nos elementos filtrados pela máscara resultam da aplicação do{
função anônima2|
o mod-2 de⍳
os índices de≢
a contagem (comprimento) de⍵
o argumento}
no argumentofonte
Röda , 34 bytes
Experimente online!
Explicação
Aqui está uma solução alternativa ao mesmo bytecount
3634 bytesEssa é uma função anônima que recebe a entrada como uma sequência do fluxo de entrada.
fonte
Python 2 , 67 bytes
Experimente online!
fonte
OCaml , 70 bytes
Experimente online!
fonte
Haskell , 63 bytes
Experimente online! Uso:
f "some string"
.Para strings ímpares
abcdefghi
, a funçãof
passa a string e sua reversão para a função!
, que alterna o recebimento de caracteres de ambas as strings. Para seqüências pares, isso não funciona, e precisamos anexar um caractere fictício primeiro para obter o deslocamento correto.fonte
C, 69 bytes
Bem simples. Anda na sequência, imprimindo o caractere atual ou o oposto.
Ungolfed e explicou:
fonte
Mathematica, 82 bytes
fonte
Japonês ,
1413 bytes12 bytes de código, +1 para o
-P
sinalizador.Guardado 1 byte graças a @Shaggy
Explicação:
Experimente online!
fonte
ë2,1
é bastante feio. Acho que você pode fazeró o
, talvez ...Åë
também funciona.Japonês , 8 bytes
Teste-o
fonte
K (oK) , 18 bytes
Solução:
Experimente online!
Exemplos:
Explicação:
Interpretada principalmente da direita para a esquerda, encontre os caracteres dos índices ímpares, inverta-os e coloque-os de volta na string
fonte
J, 26 bytes
destroçado
explicação
(0 1$~#)]`(|.@])/.]
Use Key/.
para dividir a entrada nos grupos pares / ímpares:(0 1$~#)
cria a definição do grupo, repetindo 0 e 1 ciclicamente no comprimento da entrada. Nós usamos a forma gerundial de Key por seu verbo principal]`(|.@])
, que se aplica a identidade para o primeiro grupo e inverte o segundo grupo:(|.@])
.,@,./
Experimente online!
fonte
(\:2|#\)({~/:)#\<.#\.
e 19 bytes com[:,@,./]]
| ./. ~ 2 | # `[:,@,./]]`|./.~2|#\
, os carrapatos foram analisados0,@|:]]`|./.~2|#\
Python 3,
9387 bytesfonte
reversed(s[1::2])
pors[1::2][::-1]
para salvar 4 bytesf=lambda s,j="".join:j(j(t)for t in zip(s[::2],s[1::2][::-1]))+("",s[-1])[len(s)%2]
Perl 6 ,
63 5855 bytesTeste-o
Teste-o
Teste-o
Eu tive que usar, em
roundrobin
vez dezip
, porquezip
pára assim que uma das listas de entrada é esgotada.fonte
Mathematica, 62 bytes
toma como entrada uma string
Experimente online!
fonte
APL (Dyalog) , 24 bytes
Bytes jogados graças a @ Adám
Experimente online!
fonte
GNU APL 1.2, 24 bytes
O APL funciona da direita para a esquerda.
⍴R←⍞
atribui entrada do usuárioR
e avalia seu comprimento. Divida pela metade, multiplicando.5
e aplicando a⌊
função de piso.⍳
retorna todos os números de 1 ao argumento.O APL opera em matrizes; portanto,
2×
a matriz que obtivemos⍳
dobra cada elemento, fornecendo apenas os índices pares (indexado a 1, portanto, depende de⎕IO
ser 1).Ao acessar vários índices de um vetor, o APL fornece os elementos nesses índices em um vetor.
R[X←2×⍳⌊.5×⍴R←⍞]
fornece apenas os elementos indexados pares.⌽
inverte os elementos. Em seguida, atribua os valores revertidos de volta aos índices pares (atribuindo esses índices aX
economia de 6 bytes).◊
é o separador de instruções. Após a reversão, avalieR
para imprimir o resultado.fonte
Perl 5, 46 + 3 para sinalizador -F = 49 bytes
Usa o
-F
sinalizador para dividir automaticamente a entrada em uma matriz de caracteres@F
,. Faz um loop na matriz e gera esse elemento para um índice par ou esse índice (mais um para uma sequência de comprimento ímpar) do final para uma entrada ímpar.Recebe entrada com uma nova linha à direita. Sem a nova linha à direita, basta alterar o pré-incremento em
$x
para um pós-incremento.Um pouco mais legível:
fonte
05AB1E , 21 bytes
Experimente online!
Eu estou supondo que a razão pela qual isso não foi feito no 05AB1E ainda é porque é nojento ...
Mais uma vez, o
zip
elemento soltar automaticamente o último elemento da função dói em vez de ajudar.PS Se você tiver sugestões de melhoria na minha resposta, publique a sua; é provável que haja uma melhoria suficiente para garantir que você obtenha os pontos. Tenho muita vergonha dessa resposta.
fonte
q / kdb +,
70564738352927 bytesSolução:
Exemplo:
Explicação:
Encontre os índices ímpares da sequência, inverta esta lista, retire os elementos nesses pontos e, em seguida, reatribua-os no lugar à sequência original.
Edições:
-9 bytes; mudar
count
para(#:)
,til
para(!)
,where
para(&:)
ereverse
para(|:)
.-3 bytes; mudar
(#:)
para(#)
,(&:)
para(&)
e(|:)
para(|)
-6 bytes; reescrita completa
-2 bytes; usando atribuição em vez de aplicar
fonte
05AB1E , 12 bytes
Experimente online!
fonte