Descrição do Desafio
Ciclo todas as letras da primeira parte do alfabeto em uma direção e as letras da segunda metade do alfabeto na outra. Outros caracteres permanecem no lugar.
Exemplos
1: Olá mundo
Hello_world //Input
Hell ld //Letters from first half of alphabet
o wor //Letters from second half of alphabet
_ //Other characters
dHel ll //Cycle first letters
w oro //Cycle second letters
_ //Other characters stay
dHelw_oroll //Solution
2: codegolf
codegolf
c deg lf
o o
f cde gl
o o
focdeogl
3 .: corda vazia
(empty string) //Input
(empty string) //Output
Entrada
String que você precisa girar. Pode estar vazio. Não contém novas linhas.
Saída
Seqüência de caracteres de entrada girada, nova linha final permitida
Pode ser gravada na tela ou retornada por uma função.
Regras
- Não são permitidas brechas
- Isso é código-golfe, então o código mais curto em bytes que resolve o problema ganha
- O programa deve retornar a solução correta
Respostas:
MATL , 29 bytes
Experimente online!
Explicação
fonte
Retina , 55 bytes
Experimente online!
Usa dois estágios de classificação para girar as letras da primeira e da segunda metade separadamente.
fonte
05AB1E ,
444342 bytesExplicação
Gere uma lista das letras do alfabeto dos dois casos.
['Aa','Bb', ..., 'Zz']
Divida em 2 partes e guarde uma cópia no registro.
Extrair as letras da entrada que fazem parte da 1ª metade do alfabeto, girá-lo e armazenar em X .
Extrair as letras da entrada que fazem parte da segunda metade do alfabeto, girá-lo e armazenar em Y .
Laço principal
Experimente online!
Nota: O líder
Ð
pode ser omitido no 2sable para uma solução de 41 bytes.fonte
<s>44</s>
ainda parece 44.Javascript (ES6),
155142138 bytesEditar: salvou
34 bytes usandounshift()
(inspirado na resposta de edc65)Como funciona
A
R
função usa um método de matriz como parâmetrom
:É usado pela primeira vez com o
push
método para armazenar caracteres extraídos ema[]
(primeira metade do alfabeto) eb[]
(segunda metade do alfabeto). Depois que essas matrizes são rotacionadas,R()
é chamado uma segunda vez com oshift
método para injetar os novos caracteres na sequência final.Daí a sintaxe um pouco incomum:
R`push`
eR`shift`
.Demo
fonte
a.unshift(a.pop(b.push(b.shift())))
CJam , 41 bytes
Experimente online!
Usa uma abordagem semelhante à minha resposta de embaralhamento de vogal .
fonte
Python, 211 bytes
O melhor que eu poderia fazer. Pega a sequência de STDIN e imprime o resultado em STDOUT.
alternativa com 204 bytes, mas infelizmente imprime uma nova linha após cada caractere:
fonte
Python 2, 149 bytes
fonte
JavaScript (ES6), 144
Usando a
parseInt
base 36 para separar a primeira metade, a segunda metade e a outra. Para qualquer personagemc
, eu avalioy=parseInt(c,36)
para quec '0'..'9' -> y 0..9
c 'a'..'m' or 'A'..'M' -> y 10..22
c 'n'..'z' or 'N'..'Z' -> y 23..35
c any other -> y NaN
O mesmo
y=parseInt(c,36), x=(y>22)+(y>9)
valex==1
para a primeira metade,x==2
para a segunda metade ex==0
para qualquer outra (comoNaN
> qualquer número é falso)Primeiro passo: a string de entrada é mapeada para uma matriz de 0,1 ou 2. Enquanto isso, todos os caracteres da string são adicionados a 3 matrizes. No final desta primeira etapa, a matriz 1 e 2 são giradas em direções opostas.
Segunda etapa: a matriz mapeada é varrida, reconstruindo uma sequência de saída que pega cada caractere das 3 matrizes temporárias.
Menos golfe
Teste
fonte
Perl. 53 bytes
Inclui +1 para
-p
Execute com a entrada em STDIN:
drotate.pl
:fonte
Python,
142133 bytesUma melhor variação sobre o tema:
ungolfed:
solução anterior:
ungolfed:
fonte
Ruby, 89 bytes
fonte
PHP, 189 bytes
Muito difícil de jogar golfe ... Aqui está a minha proposta:
fonte