2015-02-03 4 views
4

비교적 간단한 동사를 사용하여 숫자의 자릿수를 회전 시켰습니다 (Euler # 35 프로젝트에서 요구하는 방식). 197에서 시작하면 197 971 719를 얻을 수 있습니다. 즉 첫 번째 숫자는 우리가 시작한 곳으로 돌아올 때까지 마지막으로 만들어집니다.좀 더 간결한 방법으로 숫자의 자릿수를 회전시킬 수 있습니다.

여기 내 동사는 "[email protected](|.~"1 0 [email protected]#)@":"0입니다. (사실, 광산은 한 걸음 더 나아가 자각을 없애기 위해 ~.을 추가하지만, 필요하지는 않습니다.) J에서 이것을하는 좀 더 간결한 방법이 있습니까?

답변

3

이되지 짧다하지만 난 방법으로 좀 더 간결 찾을 : 정수 변환에서

v =: 1&|.^:(<@#)&.": 
v 1234 
1234 2341 3412 4123 
v 197 
197 971 719 

그것은 ^: (전원)를 사용하여 1 편이 1&|. 대신 변수 변화와 &. (아래)의 문자열 및 뒤로.

+0

나는 '& .'을 잊어 버린다. 매우 유용합니다. 물론 당신은 도생을 알 필요가 있지만, 많은 경우에 그것은 명백합니다. –

+0

이 답변은 내가 생각했던 것보다 더 관용적 인 J입니다. –

1

약간 다른 접근법은 형식이 지정된 숫자를 n + 1 자릿수의 n 행을 갖는 행렬로 만드는 것입니다. 여기서 n은 자릿수입니다. 그런 다음 마지막 열을 버립니다.

v=. }:"[email protected]($~(,>:)@#)&.": 
    v 1234 
1234 2341 3412 4123 
    v 197 
197 971 719 

이 양식에서는 알아 내기가 쉽지 않은 2 개의 후크를 사용합니다. (,>:)은 하나를 더하고 인수에 덧붙입니다. ($~(,>:)@#)은 형식화 된 숫자를 가져 와서 n, n + 1 행렬로 만듭니다. (회전)

관련 문제