Lettres, bougez! Pt. 2


14

Les premières lettres, bougez! était très populaire, mais avait une participation limitée. Celui-ci sera plus facile à résoudre, mais nous espérons qu'il impliquera quelques astuces dans le golf.

Vous obtenez une chaîne de lettres minuscules uniquement. Pour chaque lettre, avec la position dans l'alphabet m , déplacez - le afin de la m e lettre de la fin. Si la valeur de m est plus longue que la longueur de la chaîne, déplacez-la vers l'avant. N'affiche que la chaîne entièrement transformée.

Exemples:

"girafe"

  • 'g' est la 7e lettre de l'alphabet, c'est déjà la 7e lettre de l'arrière, alors laissez-la.
  • 'i' est la 9e lettre, puisque 9 est plus grand que la longueur du mot, il va à l'avant, donc la chaîne devient igraffe
  • 'r' est la 18e lettre, comme 'i' elle va au devant: rigaffe
  • 'a' est la 1ère lettre, elle va jusqu'au bout: rigffea
  • 'f' est la 6ème lettre, elle devient la 6ème à l'arrière: rfigfea
  • le "f" suivant est également la 6ème lettre, il va donc aussi à la 6ème à l'arrière: rffigea
  • 'e' est la 5e lettre, elle va à la 5e de l'arrière: rfefiga

"fleur"

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

"ananas"

  • '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(assurez-vous de déplacer le e qui n'a pas déjà été déplacé! Ici, cela n'a pas d'importance, mais en dessous.)

Merci à @Neil d'avoir amélioré les cas de test avec ces 3 ajouts:

"Pizza"

  • 'p' (16) => pizza
  • «i» (9) => ipzza
  • 'z' (26) => zipza
  • 'z' (26) => zzipa(déplacer le deuxième 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

"personnages"

  • «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

Réponses:


9

CJam, 41 38 octets

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

Testez-le ici.


Le vote majoritaire est la seule autre réponse qui fonctionne sur tous mes cas de test.
Neil

Le plus court pour passer tous les cas de test!
geokavel

4

Python 3, 78 octets.

Enregistré 2 octets grâce à orlp.
7 octets enregistrés grâce à DSM.

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

Construit le mot sous forme de liste, puis le joint.


(q-p,0)[p>q]est plus long que min(q-p,0).
orlp

Ça l'est, mais ça ne fait pas la même chose. Cela va toujours retourner 0 ou un négatif.
Morgan Thrapp

Désolé, je voulais dire max(q-p,0).
orlp

3

Python 2, 86 octets

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 octets

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

Exemples

Python 2:

$ python2 test.py
"flower"
rweolf

Python 3:

$ python3 test.py
flower
rweolf

3
k.removesupprime la première instance, donc cela va échouer pour quelque chose comme baa.
Sp3000

2

Javascript ES6, 136 134 131 131 octets

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())

Notez que je prends grand soin de ne pas déplacer deux fois le même personnage, sinon il pizzase transforme en zipzace qu'il devrait être zzipa. Il y a aussi un cas de bord traitant de ne pas supprimer les caractères prématurément; charactersdevient peut srtrchaeac- être ou srtrheccaasi vous le faites mal, mais ça devrait l'être srtrhcecaa. Un autre mot délicat est abracadabrapour lequel la sortie rrabaaadcbaserait incorrecte; rrbcdaaabaaserait correct.

Edit: rasé de deux octets en utilisant une sous-chaîne qui contraint automatiquement ses arguments à la plage 0..length.

Edit: rasé de trois octets en changeant la première sous-chaîne en substr comme suggéré par user81665.


Je pense que vous pourriez utiliser à la substrplace de substring.
user81655

slicec'est mieux (je pense).
Mama Fun Roll

@ ՊՓԼՃՐՊՃՈԲՍԼ Il ne le peut pas car le fait de passer des nombres négatifs en le slicebrise.
user81655

oh oublié ça.
Mama Fun Roll

Oui, il y a eu une petite erreur avec le pizzacas de test que vous avez mis sur mon post, mais je l'ai corrigé.
geokavel

1

Pyth, 18 17 octets

uXeS,Z-lzhx;HGHzk

Suite de tests .

Itère en utilisant réduire sur la chaîne d'entrée, en insérant dans une chaîne, chaîne vide de cas de base, à la position correcte.


1

𝔼𝕊𝕄𝕚𝕟, 23 caractères / 40 octets

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

Try it here (Firefox only).

Explication

ᴉⓜΞăМƲ ïꝈ-ᶛą$,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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.