CJam, 44 42 40 바이트
qN+ee_{Xa/~\+XW=eu__el=!\'@-*m<Xa+}fXWf=
출력에는 후행 줄 바꿈이 포함됩니다.
여기에서 테스트하십시오.
설명
문자열을 통해 문자를 이동하는 대신 문자를 반복적으로 제거하고 그에 따라 문자열을 회전 한 다음 문자를 다시 삽입합니다. 이 작업에는 한 가지주의 사항이 있습니다. 문자열의 시작 부분과 문자열의 끝 부분을 구별 할 수 있어야합니다 (단순 회전 후에는 불가능). 그래서 우리는 끝에 줄 바꿈을 가드로 삽입합니다 (줄 바꿈 앞의 글자는 문자열의 끝, 시작 후 문자). 보너스는 줄 바꿈이 실제로 문자열의 끝에 있는 올바른 회전으로 최종 문자열을 자동으로 반환한다는 것 입니다 .
lN+ e# Read input and append a linefeed.
ee e# Enumerate the array, so input "bob" would become [[0 'b] [1 'o] [2 'b] [3 N]]
e# This is so that we can distinguish repeated occurrences of one letter.
_{ e# Duplicate. Then for each element X in the copy...
Xa/ e# Split the enumerated string around X.
~ e# Dump the two halves onto the stack.
\+ e# Concatenate them in reverse order. This is equivalent to rotating the current
e# character to the front and then removing it.
XW= e# Get the character from X.
eu e# Convert to upper case.
_ e# Duplicate.
_el=! e# Check that convert to lower case changes the character (to ensure we have a
e# letter).
\'@- e# Swap with the other upper-case copy and subtract '@, turning letters into 1 to
e# 26 (and everything else into junk).
* e# Multiply with whether it's a letter or not to turn said junk into 0 (that means
e# everything which is not a letter will be moved by 0 places).
m< e# Rotate the string to the left that many times.
Xa+ e# Append X to the rotated string.
}fX
Wf= e# Extract the character from each pair in the enumerated array.
이것이 올바른 위치에있는 이유를 보려면 hi*bye
예제 의 마지막 반복을 고려하십시오 . 를 처리 한 후 e
열거 된 문자열은 다음 위치에 있습니다.
[[4 'y] [6 N] [2 '*] [0 'h] [1 'i] [3 'b] [5 'e]]
먼저 줄 바꿈을 분할하고 부품을 역순으로 연결합니다.
[[2 '*] [0 'h] [1 'i] [3 'b] [5 'e] [4 'y]]
줄 바꿈은 이제이 문자열의 시작 또는 끝에 있습니다. 그러나 줄 바꿈은 단지 가드이기 때문에 마크 문자열의 끝이 수단이 문자가 올바른 순서로 실제로 그게. 이제 줄 바꿈은 문자가 아니므로 배열이 전혀 회전하지 않습니다. 따라서 줄 바꿈을 추가하면 줄 바꿈이 속한 곳으로 가고 모든 것이 우리가 찾는 순서대로됩니다.
[[2 '*] [0 'h] [1 'i] [3 'b] [5 'e] [4 'y] [6 N]]
더 긴 테스트 사례를 비교하려는 경우 몇 가지 추가 결과 :
Hello, World!
,W oeHlo!lrld
Programming Puzzles & Code Golf
ago fgliPomomnrr elP& uC dezzsG
The quick brown fox jumps over the lazy dog
t eg chbi ko qfTounyzrj omw epx ueoahs rlvd
abcdefghijklmnopqrstuvwxyz
aqbrcdsetfguhivjwklxmnyozp
zyxwvutsrqponmlkjihgfedcba
abcdefghijklmnopqrstuvwxyz
나는 그 마지막을 좋아합니다. :)