편지, 움직여! Pt. 2


14

첫 번째 편지, 움직여! 매우 인기가 있었지만 참여가 제한되었습니다. 이 문제는 해결하기 쉬울 것이지만, 골프에는 몇 가지 트릭이 포함되기를 바랍니다.

소문자 문자열 만 제공됩니다. 알파벳 m의 위치에있는 각 문자에 대해 끝에서 m 번째 문자 가되도록 이동하십시오 . m 값이 문자열 길이보다 길면 맨 앞으로 이동하십시오. 완전히 변환 된 문자열 만 출력합니다.

예 :

"기린"

  • 'g'는 알파벳에서 7 번째 문자이며, 이미 뒤에서 7 번째 문자이므로 그대로 두십시오.
  • 'i'는 9 번째 글자입니다. 9가 단어의 길이보다 크기 때문에 앞쪽으로 이동하므로 문자열이됩니다. igraffe
  • 'r'은 'i'와 같이 18 번째 문자입니다. rigaffe
  • 'a'는 첫 번째 문자이며 끝까지갑니다. rigffea
  • 'f'는 6 번째 문자이며 뒤에서 6 번째 문자가됩니다. rfigfea
  • 다음 'f'도 6 번째 문자이므로 뒤에서 6 번째로갑니다. rffigea
  • 'e'는 5 번째 글자이며 뒤에서 5 번째 글자입니다. rfefiga

"꽃"

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

"파인애플"

  • '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( 이미 이동하지 않은 e 를 이동했는지 확인하십시오 ! 여기는 중요하지 않지만 아래는 중요합니다.)

다음 3 가지 추가 기능으로 테스트 사례를 개선 한 @Neil에게 감사드립니다.

"피자"

  • 'p'(16) => pizza
  • 'i'(9) => ipzza
  • 'z'(26) => zipza
  • 'z'(26) => zzipa(두 번째 z 이동!)
  • 'a'(1) => zzipa

"헛소리"

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

"문자"

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

답변:



4

파이썬 3, 78 바이트.

orlp 덕분에 2 바이트를 절약했습니다.
DSM 덕분에 7 바이트가 절약되었습니다.

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

단어를 목록으로 작성하고 조인합니다.


(q-p,0)[p>q]보다 깁니다 min(q-p,0).
orlp

그러나 그것은 똑같은 일을하지 않습니다. 항상 0 또는 음수를 반환합니다.
Morgan Thrapp

죄송합니다 max(q-p,0).
orlp

3

파이썬 2, 86 바이트

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

파이썬 3, 88 바이트

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

파이썬 2 :

$ python2 test.py
"flower"
rweolf

파이썬 3 :

$ python3 test.py
flower
rweolf

3
k.remove첫 번째 인스턴스를 제거하므로 다음과 같은 경우 실패합니다 baa.
Sp3000

2

자바 ES6, 136 (134) 131 바이트

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

내가 그렇지 않으면 두 번 같은 문자를 움직이지 않도록 상당한주의를 기울 것을 참고 pizza로 바뀝니다 zipza그것이 있어야 할 때 zzipa. 문자를 조기에 제거하지 않는 경우도 있습니다. characters어쩌면 잘못 srtrchaeac되거나 srtrheccaa잘못되어도되어야합니다 srtrhcecaa. 또 다른 까다로운 단어는 abracadabra출력 rrabaaadcba이 올바르지 않은 것입니다. rrbcdaaabaa맞을 것입니다.

편집 : 인수를 자동으로 0..length 범위로 강제하는 하위 문자열을 사용하여 2 바이트를 면도했습니다.

편집 : user81665가 제안한대로 첫 번째 하위 문자열을 substr로 변경하여 3 바이트를 줄였습니다.


substr대신 사용할 수 있다고 생각합니다 substring.
user81655

slice더 좋습니다 (제 생각에는).
Mama Fun Roll

@ ՊՓԼՃՐՊՃՈԲՍԼ 음수를 넘기면 실패 할 수 없습니다 slice.
user81655

오 잊었 어
Mama Fun Roll

예, pizza내 게시물에 넣은 테스트 사례에 약간의 실수가 있었지만 해결했습니다.
geokavel

1

Pyth, 18 17 바이트

uXeS,Z-lzhx;HGHzk

테스트 스위트 .

입력 문자열에 대해 축소를 사용하여 올바른 위치에서 기본 케이스 빈 문자열에 문자열을 삽입합니다.


1

𝔼𝕊𝕄𝕚𝕟, 23 자 / 40 바이트

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

Try it here (Firefox only).

설명

ᴉⓜΞăМƲ ïꝈ-ᶛą$,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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.