오늘, 우리는 가장 효율적인 이진 함수를 계산할 것입니다. 보다 구체적으로, 함수를 상수 입력 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))
후자는 왼쪽이 더 작습니다.