Thư, di chuyển! Pt. 2


14

Những chữ cái đầu tiên , hãy di chuyển! đã rất phổ biến, nhưng đã tham gia hạn chế. Điều này sẽ dễ dàng hơn để giải quyết, nhưng hy vọng liên quan đến một số thủ thuật trong việc chơi golf.

Bạn được cung cấp một chuỗi các chữ cái thường. Đối với mỗi chữ cái, với vị trí trong bảng chữ cái m , di chuyển nó để nó trở thành chữ cái thứ m từ cuối. Nếu giá trị của m dài hơn độ dài của chuỗi, di chuyển nó về phía trước. Chỉ xuất ra chuỗi biến đổi hoàn toàn.

Ví dụ:

"hươu cao cổ"

  • 'G' là chữ cái thứ 7 trong bảng chữ cái, nó đã là chữ cái thứ 7 từ phía sau, vì vậy hãy để lại nó.
  • 'i' là chữ cái thứ 9, vì 9 lớn hơn độ dài của từ, nó đi về phía trước, vì vậy chuỗi trở thành igraffe
  • 'r' là chữ cái thứ 18, giống như 'i' nó đi ra phía trước: rigaffe
  • 'a' là chữ cái đầu tiên, nó đi đến cuối cùng: rigffea
  • 'f' là chữ cái thứ 6, nó trở thành chữ cái thứ 6 từ phía sau: rfigfea
  • 'f' tiếp theo cũng là chữ cái thứ 6, vì vậy nó cũng đi đến chữ số 6 từ phía sau: rffigea
  • 'e' là chữ cái thứ 5, nó đi đến thứ 5 từ phía sau: rfefiga

"bông hoa"

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

"Trái dứa"

  • '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(đảm bảo bạn di chuyển e chưa được di chuyển! Ở đây không có vấn đề gì, nhưng bên dưới thì không.)

Cảm ơn @Neil vì đã cải thiện các trường hợp thử nghiệm với 3 bổ sung sau:

"pizza"

  • 'p' (16) => pizza
  • 'i' (9) => ipzza
  • 'z' (26) => zipza
  • 'z' (26) => zzipa(di chuyển z thứ hai!)
  • '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

"nhân vật"

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

Câu trả lời:


9

CJam, 41 38 byte

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

Kiểm tra nó ở đây.


Nâng cao vì đây là câu trả lời duy nhất khác hoạt động trên tất cả các trường hợp thử nghiệm của tôi.
Neil

Ngắn nhất để vượt qua tất cả các trường hợp thử nghiệm!
geokavel

4

Python 3, 78 byte.

Đã lưu 2 byte nhờ vào orlp.
Đã lưu 7 byte nhờ DSM.

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

Xây dựng từ như một danh sách sau đó tham gia nó.


(q-p,0)[p>q]dài hơn min(q-p,0).
orlp

Đó là, nhưng điều đó không làm điều tương tự. Điều đó luôn luôn trả về 0 hoặc âm.
Morgan Thrapp

Xin lỗi, ý tôi là vậy 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])

Ví dụ

Con trăn 2:

$ python2 test.py
"flower"
rweolf

Con trăn 3:

$ python3 test.py
flower
rweolf

3
k.removeloại bỏ trường hợp đầu tiên, vì vậy điều này sẽ thất bại cho một cái gì đó như 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())

Lưu ý rằng tôi hết sức cẩn thận không di chuyển cùng một nhân vật hai lần, nếu không pizzasẽ biến thành zipzakhi cần zzipa. Ngoài ra còn có một trường hợp cạnh xử lý không loại bỏ các ký tự sớm; characterscó thể srtrchaeachoặc srtrheccaanếu bạn làm sai nhưng nó nên như vậy srtrhcecaa. Một từ khó hiểu khác là abracadabrađầu ra rrabaaadcbasẽ không chính xác; rrbcdaaabaasẽ đúng

Chỉnh sửa: Cạo sạch hai byte bằng cách sử dụng chuỗi con tự động ép các đối số của nó vào phạm vi 0..length.

Chỉnh sửa: Tắt ba byte bằng cách thay đổi chuỗi con đầu tiên thành lớp nền theo đề xuất của user81665.


Tôi nghĩ rằng bạn có thể sử dụng substrthay vì substring.
dùng81655

slicelà tốt hơn (tôi nghĩ).
Mama Fun Roll

@ Anh ta không thể vì chuyển số âm thành slicephá vỡ nó.
dùng81655

oh quên về điều đó
Mama Fun Roll

Vâng, có một chút sai lầm với pizzatrường hợp thử nghiệm mà bạn đưa vào bài viết của tôi, nhưng tôi đã sửa nó.
geokavel

1

Bình thường, 18 17 byte

uXeS,Z-lzhx;HGHzk

Phòng thử nghiệm .

Lặp lại bằng cách sử dụng giảm trên chuỗi đầu vào, chèn vào một chuỗi, chuỗi trống cơ sở, ở vị trí chính xác.


1

, 23 ký tự / 40 byte

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

Try it here (Firefox only).

Giải trình

ᴉⓜΞăМƲ ïꝈ-ᶛą$,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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.