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
geokavel
la source

Réponses:

9

CJam, 41 38 octets

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

Testez-le ici.

Martin Ender
la source
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.

Morgan Thrapp
la source
(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
Portes Zach
la source
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.

Neil
la source
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.

Maltysen
la source
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
Mama Fun Roll
la source