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

Respostas:



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.


(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

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.


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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.