APL, 36 34 39 36 33 29 27
*+/x={(∇⍣(⊃x>¯1↑⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
1Keith 인 0경우 출력
GolfScript가 다시 공격합니다 !!
편집하다
+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
⊢/빼기 1 ( ) 대신 오른쪽 축소 ( )를 사용하여 ¯1↑1자를 직접 저장하고 1을 Disclose ( ⊃) 에서 간접적으로 저장
설명
⍎¨⍕x←⎕평가 된 입력 (숫자로 취급)을 가져 와서에 할당합니다 x. 문자 배열 (다른 언어에서는 "문자열")로 변환하고 각 문자 (숫자)를 반복하여 숫자로 변환합니다. 따라서 이것은 숫자의 숫자 배열입니다.
{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}주요 "루프"함수입니다. 배열 에서
+/⍵↑⍨-⍴⍕x마지막 ⍴⍕x숫자 ( x)를 가져와 합산합니다.
⍵,배열의 끝에 연결합니다.
(x>⊢/⍵)배열의 마지막 숫자 ( +/⍵↑⍨-⍴⍕x아직 연결되지 않은)가 새 배열 보다 작고 여러 번이 함수를 x반환 1하거나 0
∇⍣실행하는지 확인하십시오. 따라서 마지막 숫자가보다 작 으면 x이 함수가 반복됩니다. 그렇지 않으면 새 배열을 반환
함수를 실행 한 후, 배열에는 숫자 중 2 개 이상 x(예 : 14생성 1 4 5 9 14 23, 13생성 1 3 4 7 11 18 29) 이 발생 하는 지점까지의 합이 포함 됩니다.
마지막으로 각 숫자가 같은지 확인 x하고 결과 이진의 합을 출력합니다 정렬.
편집하다
1=+/x={(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}⍎¨⍕x←⎕
0입력이 한 자리이면 출력을 만들기 위해 2 문자를 추가했습니다 :-(
또 다른 편집
+/x=¯1↓{(∇⍣(x>⊢/⍵))1↓⍵,+/⍵}⍎¨⍕x←⎕
설명
함수는 이제 1↓마지막 ⍴⍕x( ↑⍨-⍴⍕x) 을 취하는 대신 배열에서 첫 번째 숫자 ( )를 삭제합니다 .
그러나이 방법은 1=한 자리 숫자를 처리하기에 적합하지 않습니다. 따라서 이제는 동등성을 확인하기 전에 배열에서 마지막 숫자를 삭제하고 x1 문자를 추가합니다.
당신은 그것을 추측 : 편집
+/x=1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
x이전 마지막 항목 대신 새로 추가 된 항목과 비교 하므로 동등성을 확인하기 전에 첫 번째 (마지막 대신) 항목을 삭제하는 x것으로 충분하며 빼기 기호가 저장됩니다. 다른 형태의 Power 연산자 ( ⍣) 를 사용하여 다른 3 개를 저장합니다
그리고 25 문자 gs 답변이 나타납니다 (Orz)
마지막 편집
x∊1↓{1↓⍵,+/⍵}⍣{x≤+/⍵}⍎¨⍕x←⎕
내가 그것을 놓쳤다는 것을 믿을 수 없다.
더 이상 골프를 칠 수 없습니다.