Listy, ruszaj się! Pt. 2)

14

Pierwsze litery, ruszaj się!był bardzo popularny, ale miał ograniczony udział. Ten będzie łatwiejszy do rozwiązania, ale mam nadzieję, że w grę w golfa wejdą pewne sztuczki.

Otrzymujesz ciąg tylko małych liter. Dla każdej litery, z pozycją w alfabecie m , przesuń ją, aby stała się m- tą literą od końca. Jeśli wartość m jest większa niż długość sznurka, przenieś ją na sam przód. Wyprowadza tylko w pełni przekształcony ciąg.

Przykłady:

"żyrafa"

  • „g” jest siódmą literą alfabetu, jest już siódmą literą z tyłu, więc zostaw ją.
  • „i” to dziewiąta litera, ponieważ 9 jest większa niż długość słowa, idzie na przód, więc ciąg staje się igraffe
  • „r” jest 18. literą, podobnie jak „i”: rigaffe
  • „a” to pierwsza litera, która dochodzi do samego końca: rigffea
  • „f” jest szóstą literą, staje się szóstą z tyłu: rfigfea
  • następne „f” jest także szóstą literą, więc z tyłu również przechodzi na szóstą literę: rffigea
  • „e” to piąte litery, a od piątej dochodzi do piątego: rfefiga

"kwiat"

  • „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(upewnij się, że przesuwasz e , który nie został jeszcze przeniesiony! Tutaj to nie ma znaczenia, ale poniżej.)

Dzięki @Neil za ulepszenie przypadków testowych dzięki 3 dodatkom:

"Pizza"

  • „p” (16) => pizza
  • „i” (9) => ipzza
  • „z” (26) => zipza
  • „z” (26) => zzipa(przenoszenie drugiego 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

"postacie"

  • „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
źródło

Odpowiedzi:

9

CJam, 41 38 bajtów

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

Sprawdź to tutaj.

Martin Ender
źródło
Upvoting, ponieważ jest to jedyna inna odpowiedź, która działa na wszystkich moich testowych przypadkach.
Neil
Najkrótszy, aby przejść wszystkie przypadki testowe!
geokavel
4

Python 3, 78 bajtów.

Zaoszczędzono 2 bajty dzięki orlp.
Zaoszczędź 7 bajtów dzięki DSM.

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

Tworzy słowo jako listę, a następnie dołącza do niego.

Morgan Thrapp
źródło
(q-p,0)[p>q]jest dłuższy niż min(q-p,0).
orlp
Tak, ale to nie robi tego samego. To zawsze zwróci 0 lub minus.
Morgan Thrapp,
Przepraszam, miałem na myśli max(q-p,0).
orlp
3

Python 2, 86 bajtów

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 bajtów

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

Przykłady

Python 2:

$ python2 test.py
"flower"
rweolf

Python 3:

$ python3 test.py
flower
rweolf
Zach Gates
źródło
3
k.removeusuwa pierwszą instancję, więc to się nie powiedzie baa.
Sp3000,
2

JavaScript ES6, 136 134 131 bajtów

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

Należy pamiętać, że należy bardzo uważać, aby nie poruszyć ten sam charakter dwukrotnie, inaczej pizzazamienia się zipzakiedy powinno być zzipa. Istnieje również przypadek skrajny dotyczący nieusuwania znaków przedwcześnie; charactersstaje się może srtrchaeaclub srtrheccaajeśli zrobisz to źle, ale tak powinno być srtrhcecaa. Innym trudnym słowem jest niepoprawne abracadabrawyjście rrabaaadcba;rrbcdaaabaabyłoby poprawne.

Edycja: Ogolono dwa bajty za pomocą podłańcucha, który automatycznie zmusza argumenty do zakresu 0.. długości.

Edycja: Ogolono trzy bajty, zmieniając pierwszy podłańcuch na podrzędny, zgodnie z sugestią użytkownika 81665.

Neil
źródło
Myślę, że możesz użyć substrzamiast substring.
user81655
slicejest lepszy (myślę).
Mama Fun Roll
@ ՊՓԼՃՐՊՃՈԲՍԼ Nie może, ponieważ przekazywanie liczb ujemnych na slicełamie to.
user81655
och, zapomniałem o tym.
Mama Fun Roll
Tak, był mały błąd w pizzaprzypadku testowym, który umieściłeś na moim poście, ale go naprawiłem.
geokavel
1

Pyth, 18 17 bajtów

uXeS,Z-lzhx;HGHzk

Pakiet testowy .

Iteruje przy użyciu redukcji nad łańcuchem wejściowym, wstawiając do łańcucha, pusty ciąg znaków skrzynki podstawowej, we właściwej pozycji.

Maltysen
źródło
1

𝔼𝕊𝕄𝕚𝕟, 23 znaki / 40 bajtów

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

Try it here (Firefox only).

Wyjaśnienie

ᴉⓜΞăМƲ ïꝈ-ᶛą$,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
źródło