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

Jawaban:


9

CJam, 41 38 byte

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

Uji di sini.


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.


(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

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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.