오늘, 우리는 가장 효율적인 이진 함수를 계산할 것입니다. 보다 구체적으로, 함수를 상수 입력 0 또는 자체 출력에 적용하여 식을 만들 때 가능한 가장 짧은 식으로 모든 양의 정수를 나타낼 수있는 함수를 계산하여 작은 정수에 우선 순위를 둡니다.
이 기능은 다음과 같이 구성됩니다.
1부터 시작하여 위쪽으로 올라가는 각 정수에 대해 아직 출력을 할당하지 않은 가장 짧은 표현식을 선택하고 해당 정수를 해당 표현식의 출력으로 만듭니다. 표현식 길이의 타이는 더 작은 왼쪽 인수로, 그 다음 작은 오른쪽 인수로 끊어집니다. 작동 방식은 다음과 같습니다.
처음에는 1이 할당되지 않았습니다. 할당되지 않은 가장 짧은 표현은입니다
f(0, 0). 그래서 1로 설정하겠습니다.이제 2가 할당되지 않았습니다. 할당되지 않은 가장 짧은 표현식은
f(f(0, 0), 0)=f(1, 0)및f(0, f(0, 0))=f(0, 1)입니다. 동점은 더 작은 좌익으로 나뉘어진다f(0, 1) = 2.나머지 최단 할당 식이다
f(f(0, 0), 0)=f(1, 0)그래서f(1, 0) = 3.이제 우리는 2
f초와 30초만 있는 표현이 없으므로 각각 하나씩 더 추가해야합니다. 왼쪽 인수, 오른쪽 인수로 관계를 끊기f(0, 2) = 4때문에f(0, f(0, f(0, 0))) = f(0, f(0, 1)) = f(0, 2).계속해서, 우리가
f(0, 3) = 5,f(1, 1) = 6,f(2, 0) = 7,f(3, 0) = 8,f(0, 4) = 9, ...
다음은 처음 몇 가지 값에 대해 작성한 표입니다.
0 1 2 3 4 5 6 7 8
/---------------------------
0| 1 2 4 5 9 10 11 12 13
1| 3 6 14 15 37 38 39 40 41
2| 7 16 42 43
3| 8 17 44 45
4| 18 46
5| 19 47
6| 20 48
7| 21 49
8| 22 50
그것을 보는 또 다른 방법은 각 출력의 크기에 입력 크기의 합에 1을 더한 크기와 같습니다. 테이블은 출력 크기의 증가 순서대로 채워지며 왼쪽 입력과 오른쪽 입력을 최소화하여 연결이 끊어집니다.
입력으로 두 개의 음이 아닌 정수가 주어지면이 함수의 값을 계산하고 출력하십시오. 이것은 코드 골프입니다. 가장 짧은 솔루션 (바이트)이 이깁니다. 표준 허점 은 금지되어 있습니다.
((0, (0, (0, 0))), 0)은 사전 순으로보다 작지만 (((0, 0), 0), (0, 0))후자는 왼쪽이 더 작습니다.