첫 번째 편지, 움직여! 매우 인기가 있었지만 참여가 제한되었습니다. 이 문제는 해결하기 쉬울 것이지만, 골프에는 몇 가지 트릭이 포함되기를 바랍니다.
소문자 문자열 만 제공됩니다. 알파벳 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
답변
답변
파이썬 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))
단어를 목록으로 작성하고 조인합니다.
답변
파이썬 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
답변
자바 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 바이트를 줄였습니다.
답변
답변
?????, 23 자 / 40 바이트
ᴉⓜΞăМƲ ïꝈ-ᶛą$,0),0,$;Ξ⨝
설명
ᴉⓜΞăМƲ ïꝈ-ᶛą$,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