Briefe, beweg dich! Pt. 2

14

Die ersten Briefe - In Bewegung! war sehr beliebt, hatte aber begrenzte Teilnahme. Dieser wird einfacher zu lösen sein, aber hoffentlich einige Tricks beim Golfen beinhalten.

Sie erhalten eine Zeichenfolge, die nur Kleinbuchstaben enthält. Verschieben Sie jeden Buchstaben mit der Position im Alphabet m so , dass er zum m- ten Buchstaben am Ende wird. Wenn der Wert von m länger als die Länge der Zeichenfolge ist, verschieben Sie ihn ganz nach vorne. Geben Sie nur den vollständig transformierten String aus.

Beispiele:

"Giraffe"

  • 'g' ist der 7. Buchstabe im Alphabet, es ist bereits der 7. Buchstabe von hinten, also lass es.
  • 'i' ist der 9. Buchstabe, da 9 größer als die Länge des Wortes ist, geht es nach vorne, so dass die Zeichenfolge wird igraffe
  • 'r' ist der 18. Buchstabe, so wie 'i' nach vorne geht: rigaffe
  • 'a' ist der erste Buchstabe, er geht bis zum Ende: rigffea
  • 'f' ist der 6. Buchstabe, es wird der 6. von hinten: rfigfea
  • Das nächste 'f' ist auch der sechste Buchstabe, also geht es auch von hinten auf den sechsten: rffigea
  • 'e' ist der fünfte Buchstabe, von hinten geht es zum fünften: rfefiga

"Blume"

  • '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(Stellen Sie sicher, dass Sie das e verschieben , das noch nicht verschoben wurde. Hier spielt es keine Rolle, aber darunter.)

Vielen Dank an @Neil für die Verbesserung der Testfälle mit diesen 3 Ergänzungen:

"Pizza"

  • 'p' (16) => pizza
  • 'i' (9) => ipzza
  • 'z' (26) => zipza
  • 'z' (26) => zzipa(Verschieben des zweiten z!)
  • 'a' (1) => zzipa

"Abrakadabra"

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

"Zeichen"

  • '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
quelle

Antworten:

9

CJam, 41 38 Bytes

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

Teste es hier.

Martin Ender
quelle
Das Upvoting ist die einzige andere Antwort, die in allen meinen Testfällen funktioniert.
Neil
Kürzeste Zeit, um alle Testfälle zu bestehen!
Geokavel
4

Python 3, 78 Bytes.

2 Bytes dank orlp eingespart.
7 Bytes gespart dank DSM.

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

Erstellt das Wort als Liste und fügt es dann hinzu.

Morgan Thrapp
quelle
(q-p,0)[p>q]ist länger als min(q-p,0).
Orlp
Es ist so, aber das tut nicht dasselbe. Das ergibt immer 0 oder ein negatives Ergebnis.
Morgan Thrapp
Entschuldigung, ich meinte 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])

Beispiele

Python 2:

$ python2 test.py
"flower"
rweolf

Python 3:

$ python3 test.py
flower
rweolf
Zach Gates
quelle
3
k.removeEntfernt die erste Instanz, so dass dies für etwas wie fehlschlagen wird 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())

Beachte, dass ich sehr darauf achte, nicht den gleichen Charakter zweimal zu bewegen, sonst pizzaverwandelt zipzaes sich in, wann es sein sollte zzipa. Es gibt auch einen Randfall, in dem es darum geht, Zeichen nicht vorzeitig zu entfernen. characterswird vielleicht srtrchaeacoder srtrheccaawenn du es falsch machst sollte es aber sein srtrhcecaa. Ein anderes kniffliges Wort istabracadabra , für die der Ausgang rrabaaadcbafalsch sein würde; rrbcdaaabaawäre richtig.

Bearbeiten: Zwei Bytes mit einem Teilstring abgeschnitten, der seine Argumente automatisch auf den Bereich 0..Länge zwingt.

Bearbeiten: Drei Bytes wurden abgeschnitten, indem der erste Teilstring wie von user81665 vorgeschlagen in substr geändert wurde.

Neil
quelle
Ich denke, Sie könnten substranstelle von verwenden substring.
user81655
sliceist besser (denke ich).
Mama Fun Roll
@ ՊՓԼՃՐՊՃՈԲՍԼ Er kann es nicht, weil er negative Zahlen in sliceUmbrüche übergibt .
user81655
Oh, das hast du vergessen.
Mama Fun Roll
Ja, es gab einen kleinen Fehler mit dem pizzaTestfall, den Sie auf meinen Post gesetzt haben, aber ich habe ihn behoben.
Geokavel
1

Pyth, 18 17 Bytes

uXeS,Z-lzhx;HGHzk

Test Suite .

Iteriert mit Hilfe von "Reduzieren" über die Eingabezeichenfolge und fügt an der richtigen Position eine leere Zeichenfolge in eine Zeichenfolge ein.

Maltysen
quelle
1

𝔼𝕊𝕄𝕚𝕟 23 Zeichen / 40 Byte

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

Try it here (Firefox only).

Erläuterung

ᴉⓜΞăМƲ ïꝈ-ᶛą$,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
quelle