100 바이트 미만으로 가장 느리게 성장하는 함수 만들기


23

당신의 임무는 100 바이트를 넘지 않는 가장 느린 성장 함수를 만드는 것입니다.

프로그램은 음이 아닌 정수를 입력으로 사용하고 음이 아닌 정수를 출력합니다. 프로그램 P를 불러 보자.

다음 두 가지 기준을 충족해야합니다.

  • 소스 코드는 100 바이트 이하 여야합니다.
  • 모든 K에 대해, N이 존재하여, 모든 n> = N에 대해, P (n)> K이다. 즉, lim (n-> ∞) P (n) = ∞ . (이것이 "성장"한다는 의미입니다.)

"점수"는 프로그램 기본 기능의 성장률입니다.

보다 구체적으로, 프로그램 n은 모든 n> = N, P (n) <= Q (n)에 대해 N이 있고 P (n)에 대해 적어도 하나의 n> = N이 있으면 Q보다 느리게 성장한다 ) <Q (n). 어느 프로그램도 다른 프로그램보다 낫다면 묶여 있습니다. 본질적으로 어떤 프로그램이 더 느린지는 lim (n-> ∞) P (n) -Q (n) 의 값을 기반으로합니다 .

가장 느린 성장 함수는 이전 단락의 정의에 따라 다른 함수보다 느리게 증가하는 함수로 정의됩니다.

이것은 이므로 가장 느린 성장 프로그램이 승리합니다!

노트:

  • 채점을 돕기 위해 프로그램이 계산하는 기능을 답에 넣으십시오.
  • 또한 사람들에게 얼마나 느리게 갈 수 있는지에 대한 아이디어를 제공하기 위해 일부 (이론적) 입력 및 출력을 넣으십시오.


3
효과적인 전략은 빠르게 성장하는 함수를 작성하고 그 역을 취하는 것입니다. 즉 최소한 필요한 값을 생성하는 가장 작은 입력을 찾는 것입니다. 아마도 이것은 속임수입니까?
xnor

Markdown은 그 <뒤에 문자가 HTML 태그의 시작 이라고 생각하기 때문에 "보다 구체적으로"단락의 3 분의 1이 누락되었습니다 . 질문을 게시하기 전에 미리보기하십시오 : P
ETHproductions

1
우리는 어떤 큰 기본 공리를 가정 할 수 있습니까?
피터 테일러

1
타임머신이 답변을 테스트 할 수 있습니까?
Magic Octopus Urn

답변:


13

하스켈, 98 바이트, 점수 = f ε 0 -1 ( n )

_#[]=0
k#(0:a)=k#a
k#(a:b)=1+(k#(([1..k]>>fst(span(>=a)b)++[a-1])++b))
f n=[k|k<-[0..],k#[k]>n]!!0

작동 원리

이것은 Beklemishev의 웜 게임 과 관련된 매우 빠르게 성장하는 기능의 역수를 계산합니다 . 그것의 성장 속도는 f ε 0 과 비교할 수 있으며, 여기서 f α빠르게 성장하는 계층 구조 이고 ε 0 은 첫 번째 엡실론 수 입니다.

다른 답변과 비교하기 위해

  • 지수화는 f 2에 필적한다 ;
  • 반복 지수 ( tetration 또는 ↑↑ )는 f 3 과 비슷합니다 .
  • ↑↑ ⋯ ↑↑m의 화살표에 필적 F의 m + 1 ;
  • 아커 만 함수는 에 필적 F ω ;
  • 아커 만 함수의 반복은 반복 (같은 구조물 그레이엄 수는 ) 여전히 지배되는 F ω + 1 ;
  • ε 0 은 모든 타워 ω ω ω ω 의 한계입니다 .

나는 여기에 더 나은 설명을 좋아한다.
PyRulez 2016 년

Googology Wiki의 빠르게 성장하는 계층 구조에 대한 링크를 입력 할 수 있습니다
MilkyWay90

18

Brachylog , 100 바이트

llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll

온라인으로 사용해보십시오!

이것은 아마도 다른 멋진 답변의 속도가 느려지는 곳은 아니지만 아무도이 간단하고 아름다운 접근법을 시도하지 않았다는 것을 믿을 수 없었습니다.

간단히, 우리는 입력 숫자의 길이를 계산 한 다음이 결과의 길이를 계산 한 다음이 다른 길이를 계산합니다 결과 총 100 번 계산합니다.

이것은 100 base-10 로그와 함께 log (log (log ... log (x))만큼 빠르게 증가합니다.

숫자를 문자열로 입력하면 시도 할 수있는 입력에서 매우 빠르게 실행되지만 1보다 큰 결과를 기대하지는 않습니다. : D


8
순수한 광기를 위해 +1 : o 재미있는 사실 : 젤리를 모두 쓰면 젤리에서도 효과가 있습니다. : P
HyperNeutrino 2016 년

5
2를 출력하는 첫 번째 숫자는 10 ↑↑ 99입니다.
밀 마법사

11

JavaScript (ES6), 역 아크 커 만 함수 *, 97 바이트

내가 제대로했다면

A=(m,n)=>m?A(m-1,n?A(m,n-1):1):n+1
a=(m,n=m,i=1)=>{while(A(i,m/n|0)<=Math.log2(n))i++;return i-1}

기능 AAckermann 기능 입니다. 함수 a역 Ackermann 함수 입니다. 내가 올바르게 구현하면 Wikipedia는 같을 5때까지 충돌하지 않는다고 말합니다 . 나는 주변을 얻는다m2^2^2^2^16StackOverflow1000 .

용법:

console.log(a(1000))

설명 :

애커 만 기능

A=(m,n)=>                           Function A with parameters m and n
         m?                   :n+1  If m == 0, return n + 1; else,
           A(m-1,n?        :1)       If n == 0, return A(m-1,1); else,
                   A(m,n-1)          return A(m-1,A(m,n-1))

역 애커 만 함수

a=(m,n=m,i=1)=>{                                                Function a with parameter m, with n preinitialized to m and i preinitialized to 1
                while(A(i,m/n|0)<=Math.log2(n))                 While the result of A(i, floor(m/n)) is less than log₂ n,
                                               i++;             Increment i
                                                   return i-1}  Return i-1

2
그래도 스택 오버플로가 좋지 않습니까?
NoOneIsHere6

m = 2 ^^ 7이 잘못 될 때까지 5를 누르지 않는다는 진술. m = 2 ^ 7-3까지 5를 누르지 않지만 2 ^ 7-1에서는 5 입니다 . 나는 2 ^ 7에 비해 -3이 매우 작다 는 것을 알고 있지만 5A5 = 2 ^ 7-3 <2 ^^ 7. (^^는 유혹을 나타냅니다)
user75200

8

순수한 악 : 평가

a=lambda x,y:(y<0)*x or eval("a("*9**9**9+"x**.1"+",y-1)"*9**9**9)
print a(input(),9**9**9**9**9)//1

평가 내부의 문장은 길이가 7 * 10 10 10 10 10 인 문자열을 만듭니다. 10 8.57람다 함수에 대한 더 많은 호출로 구성되며각각은 0이될 때까지 계속해서비슷한길이의 문자열을 구성합니다y이것은 아래의 Eschew 방법과 동일한 복잡성을 가지고 있지만 if-and-or-control 논리에 의존하기보다는 거대한 문자열을 함께 뭉칩니다 (그리고 결과는 더 많은 스택을 얻습니다 ... 아마도?).

y파이썬없이 오류를 발생시키지 않고 제공하고 계산할 수 있는 가장 큰 값은 2입니다.

길이가 7,625,597,484,987 인 문자열은 너무 큽니다 : OverflowError: cannot fit 'long' into an index-sized integer.

나는 멈춰야한다.

Eschew Math.log: (문제의) 10 번째 근점으로 이동하여 점수 : y = 1과 효과적으로 구분할 수없는 기능.

수학 라이브러리를 가져 오면 바이트 수가 제한됩니다. 그것을 없애고 log(x)함수를 대략 동등한 것으로 대체하십시오 : x**.1그리고 거의 같은 수의 문자가 필요하지만 가져 오기는 필요하지 않습니다. 두 함수 모두 입력과 ​​관련하여 부분 선형 출력을 갖지만 x 0.1훨씬 느리게 증가 합니다 . 그러나 우리는 많은 것을 신경 쓰지 않으며, 비슷한 수의 문자를 소비하면서 (예 : x**.9동일한 문자 수이지만 더 빨리 자라므로) 많은 숫자에 대해 동일한 기본 성장 패턴을 갖는 것만 걱정합니다. 정확히 같은 성장을 보이는 가치입니다).

이제 16 자로 처리하십시오. Ackermann Sequence 속성을 갖도록 lambda 함수를 확장하는 것은 어떻습니까? 많은 수의 답변 이이 솔루션에 영감을주었습니다.

a=lambda x,y,z:(z<0)*x or y and a(x**.1,z**z,z-1)or a(x**.1,y-1,z)
print a(input(),9,9**9**9**99)//1

z**z부분 은 제정신 입력에 가까운 곳 에서이 기능을 실행하지 못하게 합니다. y그리고 z사용할 수있는 가장 큰 값은 9와 3 이며, 가장 큰 부동 소수점 파이썬 지원 (1.0 : 값은 1.0) 숫자가 6.77538853089e-05보다 크면 재귀 수준이 증가하면이 함수의 출력이 1에 가깝게 이동하는 반면 1보다 크게 유지되는 반면, 이전 함수는 0보다 큰 값을 유지하면서 0에 가깝게 이동하여이 함수에 대한 중간 정도의 재귀도 발생합니다 부동 소수점 숫자가 모든 유효 비트를잃을 정도로 많은 연산이 발생합니다.

재귀 값이 0과 2가되도록 원래 람다 호출을 재구성하는 중 ...

>>>1.7976931348623157e+308
1.0000000071

"1에서 오프셋"대신 "0에서 오프셋"을 비교하면이 함수는 7.1e-9 . 이는 확실히보다 작습니다 6.7e-05.

실제 프로그램의 기본 재귀 (z 값)는 10 10 10 10 1.97 수준이며, y 자체가 소모되는 즉시 10 10 10 10 10 1.97 (초기 값 9로 충분 함)으로 재설정됩니다. 발생하는 총 재귀 수를 올바르게 계산하는 방법조차 알지 못합니다. 수학적 지식의 끝에 도달했습니다. 마찬가지로 나는 중 하나를 이동하면 몰라**n 초기 입력에서 보조 입력으로 지수z**z 재귀 수가 향상 수 없습니다 (반전).

더 많은 재귀로 더 느리게 갈 수 있습니다.

import math
a=lambda x,y:(y<0)*x or a(a(a(math.log(x+1),y-1),y-1),y-1)
print a(input(),9**9**9e9)//1
  • n//1 -2 바이트 이상 절약 int(n)
  • import math,math. 1 바이트 이상을 절약 할 수from math import*
  • a(...) 총 8 바이트 저장 m(m,...)
  • (y>0)*x 바이트를 저장y>0and x
  • 9**9**99바이트 수를 4만큼 늘리고 이전 깊이 (또는 구골 플렉스 근처의 깊이 : 10 10 94 )의 대략적인 2.8 * 10^x위치 만큼 재귀 깊이를 증가시킵니다 .x
  • 9**9**9e9바이트 수를 5만큼 늘리고 재귀 깊이를 ... 미친 양만큼 증가시킵니다. 재귀 깊이는 이제 10 10 10 9.93 이며, 참고로 구골 플렉스는 10 10 10 2입니다. 입니다.
  • 람다 선언 추가 단계가 재귀 증가 : m(m(...))a(a(a(...))) 비용 7 바이트

새로운 출력 값 (9 재귀 깊이에서) :

>>>1.7976931348623157e+308
6.77538853089e-05

재귀 깊이가이 결과가 문자 그대로인 지점으로 폭발했습니다. 동일한 입력 값을 사용하는 이전 결과와 비교할 때를 제외하고는 의미 없는 .

  • 원래는 log25 번
  • 첫 번째 개선은 81 번이라고합니다
    • 실제 프로그램은 1e99를 부를 것이다 2 또는 10에 대한 10 2.3
  • 이 버전은 729 번 호출합니다
    • 실제 프로그램은 (9 부를 것이다 9 99 ) 3 또는 약간 미만 10 10 95 번).

람다 개시, 점수 : ???

나는 당신이 람다를 좋아한다고 들었습니다.

from math import*
a=lambda m,x,y:y<0and x or m(m,m(m,log(x+1),y-1),y-1)
print int(a(a,input(),1e99))

심지어 이것을 실행할 수 없으며 단지 99 층의 재귀로 오버플로를 쌓습니다 .

이전 방법 (아래)은 다음을 반환합니다 (정수로 변환 생략).

>>>1.7976931348623157e+308
0.0909072713593

새로운 방법은 (완전한 구골 이 아닌) 9 층의 침략 만 사용하여 반환됩니다 .

>>>1.7976931348623157e+308
0.00196323936205

나는 이것이 Ackerman 시퀀스와 비슷한 복잡성으로 작용한다고 생각합니다.

또한 ETHproduction 덕분에 3 바이트 절약 공간을 절약 할 수 있었으므로 제거 할 수 없었습니다.

이전 답변 :

함수 log (i + 1)의 정수 잘림은 람다 람다를 사용하여 20 25 회 (Python) 반복 되었습니다.

PyRulez의 답변은 두 번째 람다를 도입하고 쌓아서 압축 할 수 있습니다.

from math import *
x=lambda i:log(i+1)
y=lambda i:x(x(x(x(x(i)))))
print int(y(y(y(y(y(input()))))))

99 100 자 사용

이렇게하면 원래 12보다 20 25 의 반복이 생성됩니다 . 또한 추가 스택 을 허용 하는 int()대신 사용하여 2자를 저장 합니다. 람다 뒤의 공백을 제거 할 수 있다면 (현재 확인할 수 없습니다) 5 를 추가 할 수 있습니다. 가능한!floor()x()y()

from math정규화 된 이름 (예 :)을 사용하여 가져 오기 를 건너 뛸 수있는 방법이 있다면 x=lambda i: math.log(i+1))더 많은 문자를 저장하고x() 하지만 파이썬이 그런 것들을 지원하는지 알 수 없습니다 (의심하지 않습니다). 끝난!

이것은 본질적으로 XCKD의 블로그 게시물에서 많은 수에 사용되는 것과 동일한 트릭 이지만 람다 선언의 오버 헤드는 세 번째 스택을 배제합니다.

from math import *
x=lambda i:log(i+1)
y=lambda i:x(x(x(i)))
z=lambda i:y(y(y(i)))
print int(z(z(z(input()))))

이것은 계산 된 스택 높이가 2 람다를 초과하는 3 개의 람다에서 가능한 가장 작은 재귀입니다 (2 개의 호출로 람다를 줄이면 스택 높이가 2- 람다 버전의 것보다 18로 떨어짐). 불행히도 110자가 필요합니다.


참고로, 최고 프로그램에서 103 바이트를 계산합니다
ETHproductions

@ETHproductions 아 죄송합니다. 나는 아마도 int회심 없이 카운트를했고 여분의 여유가 있다고 생각했습니다.
Draco18s

내가 생각하는 당신이 후 공간을 제거 할 수 있습니다 import이후 공간을 y<0. 나는 많은 파이썬을 모르지만 확실하지 않습니다
ETHproductions

또한, 아마도 y<0and x or m(m,m(m,log(x+1),y-1),y-1)(가정이 다른 바이트를 저장 x결코 0경우 y<0)
ETHproductions

2
음 ... ( log(x)+ x값이 큰 경우)의 모든 양의 힘보다 느리게 성장하므로 xL' Hopital의 규칙을 사용하여 표시하기 어렵지 않습니다. 나는 당신의 현재 버전이 (...(((x**.1)**.1)**.1)** ...)많은 시간을 할 것이라고 확신합니다 . 그러나 그 힘은 단지 곱하기 때문에 x**(.1** (whole bunch)), 그것은 (아주 작은) 긍정적 인 힘입니다 x. 즉, 실제로 로그 함수의 단일 반복보다 빠르게 증가 x한다는 것을 의미합니다. ).
mathmandan

4

하스켈 , 100 바이트

f 0 a b=a^b
f c a b=foldr(f$c-1)a$[0..b]>>[a]
i=length.show
0#x=i x
y#x=i$(y-1)#x
g=(f(f 9 9 9)9 9#)

온라인으로 사용해보십시오!

이 솔루션은 빠르게 성장하는 기능의 역수를 취하지 않고이 경우에는 다소 느리게 성장하는 기능을 취하여 length.show여러 번 적용합니다.

먼저 함수를 정의합니다 f. fKnuth의 위쪽 화살표 표기법의 개자식 버전입니다. 우리의 기본 케이스를 정의 f 0 a b할 수 a^b또는 a의 전원을 b. 그런 다음의 인스턴스에 (f$c-1)적용 할 일반적인 사례를 정의합니다 . 우리가 construct와 같은 Knuth uparrow 표기법을 정의한다면 우리는이를 인스턴스에 적용 할 것이지만 실제로는 골퍼 이며 더 빠르게 성장할 수 있다는 장점이 있습니다.b+2abab+2

그런 다음 연산자를 정의합니다 #. 시간에 적용되도록 a#b정의됩니다 . 의 모든 응용 프로그램은 대략 log 10 과 같 으며, 이는 빠르게 성장하는 기능은 아닙니다.length.showb alength.show

그런 다음 정수를 여러 번 받아 정수에 g적용 length.show하는 함수 를 정의합니다 . 구체적으로 length.show입력에 적용됩니다 f(f 9 9 9)9 9. 이것이 얼마나 큰지 알아보기 전에 살펴 보자 f 9 9 9. f 9 9 9보다 9↑↑↑↑↑↑↑↑↑9 다량 차이로 (구 화살표). 나는 그것이 9↑↑↑↑↑↑↑↑↑9(9 화살표)와 9↑↑↑↑↑↑↑↑↑↑9(10 화살표) 사이에 있다고 생각합니다 . 이제 이것은 상상할 수 없을 정도로 많은 수이며, 존재하는 모든 컴퓨터에 저장하기에는 이진 표기법으로 훨씬 큽니다. 그런 다음 그것을 가져 와서 우리의 첫 번째 주장으로 우리 f의 가치가 사이의 화살표 보다 크다는 것을 의미합니다 . 이 숫자는 너무 커서 설명하지 않을 것입니다. 정의를 할 수 없을 것 같습니다.9↑↑↑↑↑↑...↑↑↑↑↑↑9f 9 9 9

각각 length.show은 정수의 로그베이스 10을 취하는 것과 거의 같습니다. 이것은 대부분의 숫자 f가 적용될 때 1을 반환한다는 것을 의미 합니다. 1 이외의 것을 반환하는 가장 작은 숫자는입니다 10↑↑(f(f 9 9 9)9 9).이 값은 2를 반환합니다. 잠시 생각해보십시오. 앞에서 정의한 숫자만큼 엄청나게 큰 숫자 인 2를 반환 하는 가장 작은 숫자는 여러 번 자신의 거듭 제곱보다 10입니다. Thats 1 뒤에 10↑(f(f 9 9 9)9 9)0이옵니다.

n가장 작은 입력 출력 의 일반적인 경우 주어진 n을 모두 출력해야합니다 (10↑(n-1))↑↑(f(f 9 9 9)9 9).

이 프로그램은 심지어 작은 n에 대해 많은 시간과 메모리가 필요합니다 (여러 우주에있는 것보다 더 많은 시간이 필요합니다). 이것을 테스트하려면 f(f 9 9 9)9 9훨씬 작은 숫자로 바꾸는 것이 좋습니다 . 1이 아닌 다른 출력을 얻습니다.


Meh, 나는 이런 종류의 질문에서 프로그램을 실행하는 데 시간이 얼마나 걸리거나 메모리가 얼마나 필요한지 신경 쓰지 않는다고 생각합니다.
단순히 아름다운 예술

3

체인 의 길이가 체인의 길이에서 1 회 빼기 등의 APL, Apply log(n + 1), e^9^9...^9시간 등 e^9^9...^9.

⌊((⍟1+⊢)⍣((*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣(*⍣⊢)))))))))))))))))))))9))⊢

이것을 실행할 수있는 방법이 있습니까?
Draco18s

7
@ Draco18s는 사실상 무한 메모리를 갖춘 양자 컴퓨터를 구입하고 알맞은 APL 배포판을 설치하고 노화 방지 혈청을 만들기 위해 기다리는 시간을 소비합니다. 왜냐하면 몇 세기 동안 단단히 앉아 있어야합니다.
Uriel

하하. 자 그리고 나서. : p
Draco18s

이것이 무한대에 다가 가고 있습니까?
PyRulez 2016 년

@PyRulez는 다른 솔루션과 동일하며 로그에 더 많은 반복이 있습니다. 그러나 더 많은 반복은 여전히 ​​똑같은 종결입니다. e^n^n...^n부품 에 대해 확신이 없었기 때문에 부품을 일정하게 만들었지 만 사실 일 수도 있습니다.
Uriel

3

MATL , 42 바이트

iXI:`2*.]X{oXH1H/16L+XKxI:`Yl.]K+XKXdXzXGx

온라인으로 사용해보십시오!

이 프로그램은 Euler–Mascheroni 상수를 사용한 고조파 계열을 기반으로합니다. MATL 언어의 @LuisMendo 설명서를 읽으면서 (대문자 포함) 중요하다는 것을 알았습니다. 느린 성장 함수 표현은 다음과 같습니다. 여기에 이미지 설명을 입력하십시오

여기서 εk ~ 1 / 2k

나는 TIO에 비해 너무 커서 최대 10000 회 반복을 테스트했으며 (매트랩에서는 10보다 작음) 점수가 10 미만이므로 매우 느립니다.

여기에 이미지 설명을 입력하십시오

설명 :

 iXI      % ask user input (number of iterations)

:`2*.]    % do...while loop, multiply by 2

X{        % convert numeric array into cell array

o         % convert to double precision array 

XH1H/     % copy to clipboard H and divide by 1: now we have an array of 1/2k

16L       % Euler–Mascheroni constant 

+         % addition (element-wise, singleton expansion)

XKxI:`    % save, clear the stack, do...while loop again

  Yl      % logarithm 

  .]      % break, ends the loop

K+XK      % paste from clipboard K, sum all

Xd        % trim: keep the diagonal of the matrix 

Xz        % remove all zeros

XG        % plot (yes it plots on-line too!)

x         % clear the stack
          % (implicit) display

경험적 증거 : (ln k ) + 1은 항상 ln k + γ + εk 위의 파란색입니다.

여기에 이미지 설명을 입력하십시오

(ln k ) + 1 의 프로그램 은

Matlab, 47 18 14 바이트

n=input('')
A=(1:n)
for k=1:n
A(k)=log(k)+1
end

참고로 흥미로운 것은 N = 100에 대한 경과 시간 내 노트북에 0.208693s 만 만 0.121945s 것을 d=rand(1,n);A=d*0;, 심지어 이하로 0.112147s A=zeros(1,n). 0이 공간 낭비라면 속도를 절약 할 수 있습니다! 그러나 나는 그 주제에서 벗어날 것입니다 (아마도 매우 느립니다).

편집 : 이 Matlab 표현을 간단하게 줄이는 데 도움 Stewie에게 감사드립니다 .

 @(n)log(1:n)+1

빠른 기능의 역수가 아니라 +1
PyRulez

1
재미있는 메모에 대한 흥미로운 SO- 포스트 . :)
Stewie Griffin

그건 그렇고, 맨 아래에 스크립트를 골라냅니다 (바이트 수를 포함했기 때문에). 마지막 MATLAB 스크립트는 단순히 : n=input('');A=log(1:n)+1또는 이름이없는 익명 함수 (14 바이트) @(n)log(1:n)+1입니다. MATLAB에 대해 잘 모르겠지만 A=log(1:input(''))+1Octave에서 작동합니다.
Stewie Griffin

감사합니다 @Stewie n=input('');A=log(1:n)+1작동 @(n)log(1:n)+1하지 않습니다 (실제로 Matlab에서 핸들이있는 유효한 기능이지만 입력이 요청되지 않습니다), A=log(1:input(''))+1작동하고 단축 될 수 있습니다log(1:input(''))+1
J Doe

익명의 기능으로 의미하는 것은 이것 입니다. 입력 을 명령 줄 대신 함수 인수 (메타 포스트) 로 지정하여 바이트를 저장하는 "일반적인"방법 입니다. 또한 다음을 f=수행 할 수 있기 때문에 계산할 필요가 없습니다. @(n)log(1:n)+1그다음에 ans(10)처음 10 개의 숫자를 얻습니다.
Stewie Griffin

2

파이썬 3 , 100 바이트

기능 로그 (i + 1)의 바닥은 99999999999999999999999999999999999 회 반복되었습니다.

지수를 사용하여 위의 숫자를 더 크게 만들 수 있습니다 ...

from math import *
s=input()
exec("s=log(s+1);"*99999999999999999999999999999999999)
print(floor(s))

온라인으로 사용해보십시오!


2
솔루션이 실제로 작동해야합니까? 오버플로 오류가 발생합니다.
ETHproductions

2
이와 같은 문제에서 @ETHproductions, 솔루션은 무한한 메모리와 CPU를 가진 머신에서 이론적으로 실행 가능해야한다는 것이 일반적으로 인정됩니다. 이것을 시도하려면 99999 ... 999를 999 정도로 줄이십시오
Sparr

3
왜 사용하지 9**9**9**...**9**9e9않습니까?
CalculatorFeline

2

함수 로그의 바닥 (i + 1)이 14 번 반복되었습니다 (Python)

import math
x=lambda i: math.log(i+1)
print int(x(x(x(x(x(x(x(x(x(x(x(x(x(x(input())))))))))))))))

나는 이것이 잘되는 것을 기대하지는 않지만 좋은 출발을 보았습니다.

예 :

  • e ^ n ^ n ^ n ^ n ^ n ^ n ^ n ^ n ^ n ^ n ^ n ^ n ^ n ^ n-> ~ n (대략 n)

int대신 floorx(
버전에

@BetaDecay 알았어.
PyRulez 2016 년

1
표현이 아니어야합니까 e^e^e^e...^n? 또한 왜 뒤에 공백이 :있습니까?
CalculatorFeline

@CalculatorFeline 이것은 코드 골프가 아니기 때문에 100 바이트 미만이어야합니다.
Cyoce

그래서? 다른 x()호출을 추가 할 수 있도록 바이트 저장에있어 나쁜 점은 무엇입니까 ?
CalculatorFeline

2

루비, 100 바이트, 점수 -1 = f ω ω + 1 (n 2 )

기본적으로 가장 큰 인쇄 가능 항목 에서 빌린 내 프로그램은 다음과 같습니다.

->k{n=0;n+=1 until(H=->z,a=[0]*z{b,*c=a;z.times{z+=b ?H[z,b==1?c:[b>1?b-1:z]*z+c]:z};z};H[n*n]>k);n}

온라인으로 사용해보십시오

기본적으로 빠르게 성장하는 계층 구조에서 f ω ω + 1 (n 2 ) 의 역을 계산합니다 . 처음 몇 값은

x[0] = 1
x[1] = 1
x[2] = 1
x[3] = 1
x[4] = 2

그리고 2아주 오랫동안 계속 출력 됩니다. 심지어 그레이엄의 수는 x[G] = 2어디에 있습니까 G?


그러나 f는 FGH 인 g (fωωCK3)는 어떻습니까?
user75200

@ user75200 fgh는 계산할 수없는 서수에 대해 잘 정의되어 있지 않습니다.
Simply Beautiful Art

FGH 기본 순서가 있으므로 계산할 수없는 서수에 대해 잘 정의되어 있습니다. 계산할 수 없습니다.
user75200

기본 사용자 순서는 매우 임의적입니다. 내가 ω9001CK를 정의 할 수 있습니다 [X] = X 길이 ω9001CK의 기본적인 순서 가지고 있다 유한 x의 계산 가능한,하지만 아주 가능성이없는 당신이 원하는 무엇을. "잘 정의 된"이라는 말은 모든 사람이 동의 할 수있는 계산할 수없는 서수에 대한 표준 기본 순서가 없다는 것을 의미했습니다.
Simply Beautiful Art

기본 시퀀스가 ​​고유하지 않은 것은 사실이지만, 계산 가능한 서수에 대한 기본 시퀀스는 길이가 ω 인 것으로 가정합니다.
Anders Kaseorg

0

Mathematica, 99 바이트

(± 1 바이트가 걸린다고 가정)

0±x_=1±(x-1);y_±0=y+1;x_±y_:=(y-1)±x±(x-1);(i=0;NestWhile[(++i;#±#±#±#±#±#±#±#)&,1,#<k&/.k->#];i)&

처음 3 개의 명령은 x±y평가 하도록 정의 합니다 Ackermann(y, x).

함수의 결과 f(#)=#±#±#±#±#±#±#±#는 값이 매개 변수 값에 도달하기 전에 1에 적용해야하는 횟수입니다 . 으로 f(#)=#±#±#±#±#±#±#±#(즉, f(#)=Ackermann[Ackermann[Ackermann[Ackermann[Ackermann[Ackermann[Ackermann[#, #], #], #], #], #], #], #]) 매우 빠른 성장, 함수는 매우 느리게 성장한다.


0

클로저, 91 바이트

(defn f (apply +(for[n(range %)](/(loop[r 1 v n](if(< v 1)r(recur(* r v)(Math/log v))))))))

sum 1/(n * log(n) * log(log(n)) * ...)내가 여기서 찾은를 계산합니다 . 그러나 함수는 101 바이트 길이로 끝났으므로 명시 적 반복 횟수를 삭제하고 대신 숫자가 1보다 큰 한 반복합니다. 다음의 입력에 대한 출력 예 10^i:

0 1
1 3.3851305685279143
2 3.9960532565317575
3 4.232195089969394
4 4.370995106860574
5 4.466762285601703
6 4.53872567524327
7 4.595525574477128
8 4.640390570825608

나는이 수정 된 시리즈가 여전히 분기되어 있다고 가정하지만 그것을 증명하는 방법을 알고 있습니다.

세 번째 계열은 실제로 부분 항이 10을 초과하기 전에 googolplex 수의 항을 필요로합니다.


0

자바 스크립트 (ES6), 94 바이트

(p=j=>i=>h=>g=>f=>x=>x<2?0:1+p(p(j))(j(i))(i(h))(h(g))(g(f))(f(x)))(_=x=>x)(_)(_)(_)(Math.log)

설명 :

Id을 의미 x => x다음이다.

먼저 살펴 보겠습니다 :

p = f => x => x < 2 ? 0 : 1 + p(p(f))(f(x))

p(Math.log)대략 같습니다 log*(x).

p(p(Math.log))대략적으로 같습니다 log**(x)( log*값이 최대 1이 될 때까지 취할 수있는 횟수 ).

p(p(p(Math.log)))대략 같습니다 log***(x).

역 Ackermann 함수 alpha(x)p값이 최대 1이 될 때까지 작성해야하는 최소 횟수와 거의 같습니다 .

우리가 다음을 사용하면 :

p = g => f => x => x < 2 ? 0 : 1 + p(p(g))(g(f))(f(x))

우리는 쓸 수 있습니다 alpha = p(Id)(Math.log).

그러나 그것은 지루한 일이므로 레벨 수를 늘리십시오.

p = h => g => f => x => x < 2 ? 0 : 1 + p(p(h))(h(g))(g(f))(f(x))

이것은 우리가하는 alpha(x)일을 제외하고 log**...**(x), 우리가 지금 하는 것을 제외하고 우리가 만든 것과 같습니다 alpha**...**(x).

왜 여기서 멈춰?

p = i => h => g => f => x => x < 2 ? 0 : 1 + p(p(i))(i(h))(h(g))(g(f))(f(x))

이전 기능 f(x)~alpha**...**(x)이 지금 이라면이 기능입니다 ~ f**...**(x). 우리는 최종 솔루션을 얻기 위해 한 단계 더 노력합니다.


" p(p(x => x - 2)) 는 대략 같습니다 log**(x)( log*값이 최대 1이 될 때까지 취할 수있는 횟수 )". 나는이 진술을 이해하지 못한다. p(x => x - 2)" 2값이 최대 1이 될 때까지 뺄 수있는 횟수"인 것 같습니다 . 즉, p (x => x-2)`는 "2로 나누기"함수 여야합니다. 따라서 p(p(x => x - 2))"값이 최대 1이 될 때까지 2로 나눌 수있는 횟수"여야합니다. log즉, log*또는 아닌 함수 여야합니다 log**. 아마도 이것은 명확해질 수 있습니까?
mathmandan 2016 년

나는 그 줄에 오타 같은 @mathmandan 외모, 그것은해야 p = f => x => x < 2 ? 0 : 1 + p(p(f))(f(x))하는 경우, p전달 p(f), 다른 라인에 같이하지 f.
es1024
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.