도전:
소셜 네트워크에는 다음과 같은 바보 같은 퍼즐이 있습니다.
8 + 2 = 16106
5 + 4 = 2091
9 + 6 = ?
함수 나 연산자 구현 개의 양의 정수 번호를 부여 할 때, 그 x와 y같은 즉 x > y > 0, int로서 정답을 산출 정수 응답의 자릿수의 숫자이다 x * y의 숫자 다음 x + y의 숫자 하였다 x - y. 매우 간단합니다.
규칙 :
- 표준 허점은 허용되지 않습니다.
- 이것은 코드 골프 이므로 바이트 단위의 가장 짧은 코드가 승리합니다.
- 입력 데이터 검증이 필요 하지 않습니다. 이 프로그램은 유효하지 않은 입력이 주어지면 충돌하거나 쓰레기를 반환 할 수 있습니다.
- 숫자 함수 및 연산자 (정수 및 부동 소수점, 수학 라이브러리 함수 및 숫자를 받아들이고 리턴하는 기타 함수 포함)를 사용할 수 있습니다.
- 해당되는 경우 숫자의 자릿수를 반환하는 함수를 사용할 수 있습니다.
- 당신이있어 하지 문자열이나 코드의 연결의 어느 곳의 어떤 종류를 사용하는 것을 허용했다.
- 결과는 언어로 적용되거나 스택에 푸시되거나 푸시 될 수 있습니다. 결과는 문자열이 아닌 정수 여야합니다.
샘플 코드 :
다음 코드는이라는 이진 연산자를 만듭니다 X.
X ← {(⍺-⍵) + ((⍺ + ⍵) × 10 * 1 + ⌊10⍟⍺-⍵) + ⍺ × ⍵ × 10 * (2 + ⌊10⍟⍺ + ⍵) + ⌊10⍟⍺- ⍵}
설명:
APL에서는 오른쪽에서 왼쪽으로 평가합니다.
⍺ and ⍵각각 왼쪽과 오른쪽 피연산자⌊10⍟⍺-⍵읽는다 :floor of log10(⍺-⍵). 먼저 감산을 수행 한 다음 로그를 기록한 다음 바닥을 수행합니다. 오른쪽에서 왼쪽으로. log10은 자릿수를 계산하기 위해 수행됩니다⍺-⍵(나중에 1을 합산해야 함).⍺×⍵×10*(...)읽는다 :10 to the (...)th power, multiplied by ⍵, multiplied by ⍺따라서
⍺×⍵×10*(2+⌊10⍟⍺+⍵)+⌊10⍟⍺-⍵합계의 자릿수와 차이의 합계로 왼쪽으로 이동 한 곱입니다. 10의 거듭 제곱을 곱하면 정수가 왼쪽으로 이동합니다.((⍺+⍵)×10*1+⌊10⍟⍺-⍵)차이의 자릿수만큼 왼쪽으로 이동 한 합계입니다.(⍺-⍵)차이점입니다. 여기에는 변속이 필요하지 않습니다.X←{...}APL에서 연산자를 정의하는 방법입니다.
예 :
8 X 2
16106
5 X 4
2091
9 X 6
54153
GNU DC :
다음 코드는 매크로라는 이름을 만듭니다 a.
[sysx10lxly-dseZdsclxly+dsd+Z1+^lxly**10lc^ld*+le+]sa
설명:
sx및sy스택에서 팝 요소 및 레지스터에 저장x하고y, 각각.lx및ly레지스터에서 요소를로드x하고y, 각각 스택으로 푸시.d스택의 마지막 요소를 복제합니다.^두 숫자의 거듭 제곱을 계산합니다.Z숫자를 팝하고 자릿수를 반환합니다. 이것은dc로그 함수가 없기 때문에 수행됩니다 .[...]sa레지스터에 매크로를 저장합니다a.la그것을로드합니다.x스택 맨 위에서 매크로를 실행합니다.
예 :
8 2 laxn
16106
5 4 laxn
2091
9 6 laxn
54153