Surat, Bergeraklah! Pt. 2

14

Surat pertama , Bergeraklah! sangat populer, tetapi memiliki partisipasi terbatas. Yang ini akan lebih mudah untuk dipecahkan, tetapi semoga melibatkan beberapa trik dalam bermain golf.

Anda hanya diberi string huruf kecil saja. Untuk setiap huruf, dengan posisi pada alfabet m , pindahkan sehingga menjadi huruf ke- m dari akhir. Jika nilai m lebih panjang dari panjang string, pindahkan ke bagian paling depan. Hanya menghasilkan string yang sepenuhnya berubah.

Contoh:

"jerapah"

  • 'g' adalah huruf ke-7 dalam alfabet, itu sudah huruf ke-7 dari belakang, jadi tinggalkan saja.
  • 'i' adalah huruf ke-9, karena angka 9 lebih besar dari panjang kata, ia berada di depan, sehingga string menjadi igraffe
  • 'r' adalah huruf ke-18, seperti 'i' di bagian depan: rigaffe
  • 'a' adalah huruf pertama, sampai akhir: rigffea
  • 'f' adalah huruf ke-6, menjadi huruf ke-6 dari belakang: rfigfea
  • huruf 'f' berikutnya juga merupakan huruf ke-6, jadi huruf ke-6 dari belakang: rffigea
  • 'e' adalah huruf ke-5, dan huruf ke-5 dari belakang: rfefiga

"bunga"

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

"nanas"

  • '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(pastikan Anda memindahkan e yang belum pernah dipindahkan! Ini tidak masalah, tetapi di bawahnya tidak.)

Terima kasih kepada @Neil untuk meningkatkan kasus uji dengan 3 tambahan ini:

"Pizza"

  • 'p' (16) => pizza
  • 'i' (9) => ipzza
  • 'z' (26) => zipza
  • 'z' (26) => zzipa(memindahkan z kedua!)
  • 'a' (1) => zzipa

"omong kosong"

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

"karakter"

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

Jawaban:

9

CJam, 41 38 byte

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

Uji di sini.

Martin Ender
sumber
Putus karena itu satu-satunya jawaban lain yang berfungsi pada semua kasus pengujian saya.
Neil
Terpendek untuk melewati semua kasus uji!
geokavel
4

Python 3, 78 byte.

Disimpan 2 byte berkat orlp.
Disimpan 7 byte berkat DSM.

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

Buat kata sebagai daftar lalu gabungkan.

Morgan Thrapp
sumber
(q-p,0)[p>q]lebih panjang dari min(q-p,0).
orlp
Memang, tapi itu tidak melakukan hal yang sama. Itu akan selalu menghasilkan 0 atau negatif.
Morgan Thrapp
Maaf, maksud saya max(q-p,0).
orlp
3

Python 2, 86 byte

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 byte

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

Contohnya

Python 2:

$ python2 test.py
"flower"
rweolf

Python 3:

$ python3 test.py
flower
rweolf
Zach Gates
sumber
3
k.removemenghapus instance pertama, jadi ini akan gagal untuk sesuatu seperti baa.
Sp3000
2

Javascript ES6, 136 134 131 byte

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

Perhatikan bahwa saya sangat berhati-hati untuk tidak memindahkan karakter yang sama dua kali, jika tidak pizzaberubah menjadi zipzaseperti seharusnya zzipa. Ada juga kasus tepi yang berurusan dengan tidak menghapus karakter sebelum waktunya; charactersmenjadi mungkin srtrchaeacatau srtrheccaajika Anda melakukannya dengan salah tetapi seharusnya srtrhcecaa. Kata lain yang sulit adalah abracadabrayang hasilnya rrabaaadcbasalah; rrbcdaaabaaakan benar.

Sunting: Memotong dua byte dengan menggunakan substring yang secara otomatis memaksa argumennya ke kisaran 0..length.

Sunting: Memangkas tiga byte dengan mengubah substring pertama ke substring seperti yang disarankan oleh user81665.

Neil
sumber
Saya pikir Anda bisa menggunakan substrbukan substring.
user81655
slicelebih baik (saya pikir).
Mama Fun Roll
@ ՊՓԼՃՐՊՃՈԲՍԼ Dia tidak bisa karena mengoper angka negatif ke slicedalamnya.
user81655
oh lupa tentang itu.
Mama Fun Roll
Ya, ada sedikit kesalahan dengan pizzatest case yang Anda pasang di posting saya, tapi saya memperbaikinya.
geokavel
1

Pyth, 18 17 byte

uXeS,Z-lzhx;HGHzk

Test Suite .

Iterasi menggunakan pengurangan di atas string input, memasukkan ke dalam string, string kosong kasus dasar, pada posisi yang benar.

Maltysen
sumber
1

𝔼𝕊𝕄𝕚𝕟, 23 karakter / 40 byte

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

Try it here (Firefox only).

Penjelasan

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