Cartas, mexa-se! Pt. 2

14

As primeiras cartas, mexam-se! era muito popular, mas tinha participação limitada. Este será mais fácil de resolver, mas espero envolver alguns truques no golfe.

Você recebe uma sequência de apenas letras minúsculas. Para cada carta, com a posição no alfabeto m , movê-lo de modo que se torna o m th carta do fim. Se o valor de m for maior que o comprimento da string, mova-o para a frente. Saída apenas a cadeia totalmente transformada.

Exemplos:

"girafa"

  • 'g' é a sétima letra do alfabeto, já é a sétima letra do verso, então deixe-o.
  • 'i' é a 9ª letra, uma vez que 9 é maior que o comprimento da palavra, ela vai para a frente, então a string se torna igraffe
  • 'r' é a 18ª letra, como 'i' vai para a frente: rigaffe
  • 'a' é a primeira letra, vai até o fim: rigffea
  • 'f' é a sexta letra, torna-se a sexta na parte de trás: rfigfea
  • o próximo 'f' também é a sexta letra, e também a sexta parte de trás: rffigea
  • 'e' são as 5as letras, vão para a quinta parte de trás: rfefiga

"flor"

  • 'f' (6) => flower
  • «l» (12) => lfower
  • «o» (15) => olfwer
  • 'w' (23) => wolfer
  • «e» (5) => weolfr
  • «r» (18) => rweolf

"abacaxi"

  • «p» (16) => pineapple
  • «i» (9) => ipneapple
  • «n» (14) => nipeapple
  • «e» (5) => nipaepple
  • 'a' (1) => nipepplea
  • «p» (16) => pnipeplea
  • «p» (16) => ppnipelea
  • «l» (12) => lppnipeea
  • 'e' (5) => lppneipea(certifique-se de mover o e que ainda não foi movido! Aqui não importa, mas abaixo disso.)

Agradecemos à @Neil por melhorar os casos de teste com estas três adições:

"pizza"

  • «p» (16) => pizza
  • «i» (9) => ipzza
  • «z» (26) => zipza
  • 'z' (26) => zzipa(movendo o segundo z!)
  • 'a' (1) => zzipa

"abracadabra"

  • 'a' (1) => bracadabraa
  • 'b' (2) => racadabraba
  • «r» (18) => racadabraba
  • 'a' (1) => rcadabrabaa
  • «c» (3) => radabrabcaa
  • 'a' (1) => rdabrabcaaa
  • 'd' (4) => rabrabcdaaa
  • 'a' (1) => rbrabcdaaaa
  • 'b' (2) => rrabcdaaaba
  • «r» (18) => rrabcdaaaba
  • 'a' (1) => rrbcdaaabaa

"personagens"

  • «c» (3) => haractecrs
  • «h» (8) => arhactecrs
  • 'a' (1) => rhactecrsa
  • «r» (18) => rhactecrsa
  • 'a' (1) => rhctecrsaa
  • «c» (3) => rhtecrscaa
  • «t» (20) => trhecrscaa
  • «e» (5) => trhcrescaa
  • «r» (18) => rtrhcescaa
  • 's' (19) => srtrhcecaa
geokavel
fonte

Respostas:

9

CJam, 41 38 bytes

lee_S+W%\{Xa-X1='`-/(Xa+\L*+}fX1>W%1f=

Teste aqui.

Martin Ender
fonte
Voto positivo, pois é a única outra resposta que funciona em todos os meus casos de teste.
Neil
Mais curto para passar em todos os casos de teste!
precisa saber é
4

Python 3, 78 bytes.

Economizou 2 bytes graças ao orlp.
Economizou 7 bytes graças ao DSM.

x=input()
y=[]
for z in x:m=max(len(x)-ord(z)+96,0);y[m:m]=z
print(''.join(y))

Constrói a palavra como uma lista e depois se junta a ela.

Morgan Thrapp
fonte
(q-p,0)[p>q]é maior que min(q-p,0).
orlp
É, mas isso não faz a mesma coisa. Isso sempre retornará 0 ou negativo.
Morgan Thrapp
Desculpe, eu quis dizer max(q-p,0).
orlp
3

Python 2, 86 bytes

a=input();k=list(a)
for i in a:k.remove(i);k.insert(ord(i)-97,i)
print"".join(k)[::-1]

Python 3, 88 bytes

a=input();k=list(a)
for i in a:k.remove(i);k.insert(ord(i)-97,i)
print("".join(k)[::-1])

Exemplos

Python 2:

$ python2 test.py
"flower"
rweolf

Python 3:

$ python3 test.py
flower
rweolf
Zach Gates
fonte
3
k.removeremove a primeira instância, então isso falhará em algo como baa.
Sp3000
2

Javascript ES6, 136 134 131 bytes

s=>([...s].map(c=>{s=s.replace(c,'');p=s.length+97-c.charCodeAt();s=s.substr(0,p)+c.toUpperCase()+s.substring(p)}),s.toLowerCase())

Note que eu tenho muito cuidado para não mover o mesmo personagem duas vezes, caso contrário, pizzavira zipzaquando deveria ser zzipa. Há também um caso avançado que trata de não remover caracteres prematuramente; characterstorna-se talvez srtrchaeacou srtrheccaase você fizer errado, mas deveria ser srtrhcecaa. Outra palavra complicada é abracadabrapara a qual a saída rrabaaadcbaestaria incorreta; rrbcdaaabaaestaria correto.

Editar: Raspou dois bytes usando substring que automaticamente coage seus argumentos para o intervalo de 0 a comprimento.

Editar: raspou três bytes alterando a primeira substring para substr, conforme sugerido pelo user81665.

Neil
fonte
Eu acho que você poderia usar em substrvez de substring.
precisa saber é o seguinte
sliceé melhor (eu acho).
Mama Fun Roll
@ ՊՓԼՃՐՊՃՈԲՍԼ Ele não pode, porque passar números negativos para quebrá- slicelo.
user81655
oh esqueci disso.
Mama Fun Roll
Sim, houve um pequeno erro com o pizzacaso de teste que você colocou no meu post, mas eu o corrigi.
geokavel
1

Pitão, 18 17 bytes

uXeS,Z-lzhx;HGHzk

Conjunto de Teste .

Repete usando reduzir sobre a sequência de entrada, inserindo em uma sequência, sequência vazia da caixa base, na posição correta.

Maltysen
fonte
1

23, 23 caracteres / 40 bytes

ᴉⓜΞăМƲ ïꝈ-ᶛą$,0),0,$;Ξ⨝

Try it here (Firefox only).

Explicação

ᴉⓜΞăМƲ ïꝈ-ᶛą$,0),0,$;Ξ⨝ // implicit: ï=input, ᴉ=input split into chars, Ξ=empty array, ᶛ=lowercase alphabet
ᴉⓜ                      // map over input chars
   ΞăМƲ ïꝈ-ᶛą$,0),0,$;   // use splice to insert map item into Ξ at requested index
                      Ξ⨝ // join Ξ
                         // implicit output
Mama Fun Roll
fonte