Некоторые из вас могут быть знакомы с BigNum Bakeoff , который закончился довольно интересно. Цель может быть более или менее резюмирована как написание программы на C, выход которой будет самым большим, при некоторых ограничениях и теоретических условиях, например, на компьютере, который может запустить программу.
В том же духе я ставлю похожую задачу, открытую для всех языков. Условия:
Максимум 512 байт .
Окончательный результат должен быть напечатан в STDOUT. Это ваш счет. Если напечатано несколько целых чисел, они будут объединены.
Вывод должен быть целым числом. (Примечание: бесконечность не является целым числом .)
Нет встроенных констант больше 10, но цифры / цифры в порядке (например, константа Авогадро (как встроенная константа) недопустима, а 10000 - нет.)
Программа должна завершиться, когда предоставлено достаточно ресурсов для запуска.
Печатная продукция должна быть детерминированной, если для ее запуска достаточно ресурсов.
Вам предоставляется достаточно большое целое число или bigints для запуска вашей программы. Например, если ваша программа требует применения базовых операций к числам, меньшим 10 000 000 , вы можете предположить, что компьютер, на котором это работает, может обрабатывать числа, по крайней мере, до 10 000 000 . (Примечание. Ваша программа также может быть запущена на компьютере, который обрабатывает числа до 10 000 000 , поэтому простое обращение к максимальному целому числу, которое может обработать компьютер, не приведет к детерминированным результатам.)
Вы получили достаточную вычислительную мощность, чтобы ваша программа могла завершиться менее чем за 5 секунд. (Так что не беспокойтесь, если ваша программа работает на вашем компьютере в течение часа и не скоро завершит работу.)
Никаких внешних ресурсов, поэтому не думайте об импорте этой функции Аккермана, если она не встроена.
Все магические предметы временно заимствуются у щедрого божества.
Очень большой с неизвестным пределом
- Стивен Х , Пиф f 3 + B³F + ω² (256 26 )
где B³F - ординал Церкви-Клины с фундаментальной последовательностью
B³F[n] = B³F(n), the Busy Beaver BrainF*** variant
B³F[x] = x, ω ≤ x < B³F
Leaderboard:
Просто Красивое Искусство , Рубин f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
Стивен Х , Пиф f ψ (Ω Ω ) + ω² + 183 (256 27! )
Leaky Nun , Python 3 f ε 0 (9 9 9 )
фейфо , питон 3 f ω ω 6 (f ω ω 5 (9e999))
Стивен Х , Питон 3 f ω ω + ω² (9 9 9 99 )
Просто прекрасное искусство , Рубин х ω + 35 (9 - 99 )
то есть , Python 2 , f 3 (f 3 (141))
Некоторые примечания:
Если мы не сможем подтвердить ваш счет, мы не сможем поставить его в таблицу лидеров. Так что вы можете ожидать объяснения вашей программы.
Аналогичным образом, если вы не понимаете, насколько велико ваше число, объясните свою программу, и мы постараемся решить ее.
Если вы используете программу с типом номера Loader , я помещу вас в отдельную категорию, которая называется «Чрезвычайно большой с неизвестным пределом» , поскольку номер Loader не имеет нетривиальной верхней границы в терминах быстро растущей иерархии для ' стандартные фундаментальные последовательности.
Числа будут ранжироваться через быстро растущую иерархию .
Для тех, кто хотел бы узнать, как использовать быстро растущую иерархию для аппроксимации действительно больших чисел, я размещаю сервер Discord только для этого. Также есть чат: Ordinality .
Похожие проблемы:
Самый большой номер для печати
Гольф число больше, чем TREE (3)
Самая короткая завершающая программа, выходной размер которой превышает число Грэма
Для тех, кто хочет увидеть несколько простых программ, которые выводят быстро растущую иерархию для небольших значений, вот они:
Рубин: быстрорастущая иерархия
#f_0:
f=->n{n+=1}
#f_1:
f=->n{n.times{n+=1};n}
#f_2:
f=->n{n.times{n.times{n+=1}};n}
#f_3:
f=->n{n.times{n.times{n.times{n+=1}}};n}
#f_ω:
f=->n{eval("n.times{"*n+"n+=1"+"}"*n);n}
#f_(ω+1):
f=->n{n.times{eval("n.times{"*n+"n+=1"+"}"*n)};n}
#f_(ω+2):
f=->n{n.times{n.times{eval("n.times{"*n+"n+=1"+"}"*n)}};n}
#f_(ω+3):
f=->n{n.times{n.times{n.times{eval("n.times{"*n+"n+=1"+"}"*n)}}};n}
#f_(ω∙2) = f_(ω+ω):
f=->n{eval("n.times{"*n+"eval(\"n.times{\"*n+\"n+=1\"+\"}\"*n)"+"}"*n);n}
и т.п.
Чтобы перейти от f_x
к f_(x+1)
, мы добавляем один цикл n.times{...}
.
В противном случае мы диагонализируем все предыдущие
f_ω(1) = f_1(1)
f_ω(2) = f_2(2)
f_ω(3) = f_3(3)
f_(ω+ω)(1) = f_(ω+1)(1)
f_(ω+ω)(2) = f_(ω+2)(2)
f_(ω+ω)(3) = f_(ω+3)(3)
и т.п.
источник
Ответы:
Рубин, f ψ 0 (X (Ω M + X (Ω M + 1 Ω M + 1 ) )) + 29 (9 9 9 )
где М - первый «ординал» Мало, X - функция чи (коллапсирующая функция Мало), а ψ - ординальная коллапсирующая функция.
Попробуйте онлайн!
Разбивка кода:
Math Breakdown:
f
уменьшаетa
на основеn,b,q
.Основная идея состоит в том, чтобы иметь чрезвычайно вложенное
a
и многократно уменьшать его, пока оно не уменьшится доa=0
. Для простоты, пустьНа данный момент давайте беспокоиться только о
n
.Для любого целого числа
k
мы получаемf[k,n]=k-1
, поэтому мы можем видеть, чтоТогда мы имеем для любого
d
,f[[0,d],n]=n
так мы можем видеть , чтоТогда мы имеем для любого
c,d,e
,f[[c,0,e],n]=f[[c,d,0],n]=c
. Например,Тогда мы имеем для любого
c,d,e
так , чтобы он не упал в предыдущем случае,f[[c,d,e],n]=[[c,d,f[e,n]],f[d,n],e]
. Это где это начинает усложняться. Несколько примеров:Это быстро нарастает оттуда. Некоторые интересные места:
В конечном счете, введение большего количества аргументов
f
функции, а также большего количества случаев для массива позволяет нам превзойти большинство именованных вычислимых обозначений. Некоторые особенно известные:источник
Пиф, f ψ (Ω Ω ) + ω 2 +183 (~ 256 27! )
Требуется любой непустой ввод, но его значение не используется.
Пояснение (для новой и действительно разумно оцениваемой версии):
Мне очень трудно вычислить размер этого, в основном потому,
что уже поздно, и я не очень хорошо знаком с быстро растущей иерархией или с тем, как бы я даже пытался выяснить, сколько раз Q проходит черезХотя теперь я знаю больше об ординалах, я все еще не знаю, как вычислить значение порядкового числа, представленного рекурсивным определением в моей программе. Я бы присоединился к серверу Discord, но это под псевдонимом, я бы не хотел связываться с моим настоящим именем.y()
мясорубка.К сожалению, поскольку я относительно мало знаю об этих быстрорастущих иерархиях, я, вероятно, уже проиграл ответу Ruby. Мне сложно сказать.Возможно, я победил ответ Ruby, но я не уверен на 100%.¯ \ _ (ツ) _ / ¯источник
27^^^27^^27^^4
илиf<sub>4</sub>(27^^27^^4)) ≈ f<sub>4</sub>(f<sub>3</sub>(f<sub>3</sub>(19)))
.y
рекурсировать работатьy(Q-1)
вместо того, чтобы просто работатьQ
. Как это влияет на счет?y(Q) = L(y(Q-1))
?Пиф, f 3 + σ -1 + ω 2 (256 26 )
Там , где σ т [п] Занято бобра функция Σ порядка
m
называется наn
: сг т [п] = Σ м (п). Порядок-1
состоит в том, чтобы обозначить, что Занятый Бобер здесь не вызывается на истинной Машине Тьюринга, а скорее является приближением с конечной упаковочной лентойQ
элементов. Это позволяет решить проблему остановки для этих программ.TL; DR состоит в том, что это создает все возможные программы BrainF ** k длины Q, запускает их в среде, где максимальное значение целого числа равно Q, а длина ленты равна Q, и компилирует все состояния из этих операций вместе в добавить (это
3+
) к Q, повторяя вышеупомянутое в масштабе f ω 2 .У меня еще есть половина персонажей для работы, если я хочу сделать что-то большее, но пока мы не выясним, где это, я просто оставлю все как есть.
источник
питон, f 3 (f 3 (141)), 512 байт
Это не совсем правильный ответ, но я все равно хотел опубликовать его. Краткое краткое изложение:
Во всяком случае, я не знаю, является ли этот ответ технически законным, но было весело писать. Не стесняйтесь редактировать любые ошибки, которые вы найдете в коде.
источник
for j in range(f(x)): for j in range(f(x)): x = f(x)
если бы вложили. Присоединяйтесь к нам в чате, чтобы обсудить почему!Рубин, вероятно, ~ f ω + 35 (9 9 99 )
Попробуйте онлайн!
Примерное математическое объяснение:
Ниже примерно соответствует программе выше, но упрощен, чтобы его было легче понять.
G(0,k) = k
наша основная функция.Чтобы оценить
G(n,k)
, мы беремk
и пишем это какG(n-1,1) + ... + G(n-2,1) + ... + G(0,1)
.Затем поменяйте все
G(x,1)
наG(x,2)
и вычтите1
из всего результата.Перепишите его в приведенной выше форме, используя
G(x,2)
, гдеx<n
, и оставьте остаток в конце. Повторите, изменивG(x,2)
наG(x,3)
и т. Д.Когда результат достигнут
-1
, верните базу (то,b
что будет вG(x,b)
.)Примеры:
G (1,1):
G (1,2):
G (1,3):
G (2,5):
Делая математику, я обнаружил, что
И помимо этого это имеет тенденцию становиться немного волосатым.
В общем, мы имеем
источник
Python 3, f ω ω + ω * ω (9 9 9 99 )
Я скоро получу объяснение.
источник
Python 3 , ~ f ε 0 (9 9 9 )
Попробуйте онлайн!
источник
Python 3, 323 байта, g 9e9 (9)
Попробуйте онлайн!
объяснение
Python 3 является действительно рекурсивным языком, это означает, что функция может не только вызывать саму функцию, но и другие функции могут принимать функции ввода или вывода. Моя функция основана на использовании функций, чтобы улучшить себя.
f = лямбда x, a: [a (x), e (x) ((x, a)) [1]]
Определение
Определение объяснено
a(x)=9^x
a является базовой функцией, я выбрал эту функцию, потому что x> 0 => a (x)> x`, что позволяет избежать фиксированных точек.b(x,f)=a(x), f^x
b - общая улучшающая функция, она принимает любую функцию и выводит ее лучшую версию. б можно даже применить к себе:b(x,b)[1]=b^x
b(x,b^x)[1]=b^(x*x)
но чтобы полностью использовать возможности
b
улучшения,b
вам нужно взять вывод b и использовать его как новый b, вот что делает c0:c0(…,f)=f(…,f)
c0(x,b^x)=b^x(x,b^x)[1]>b^(9↑↑x)
более общая функция c (n) принимает последний аргумент n (начиная с 0), поэтому
c(1)(…,f,a)=f(…,f,a)
иc(2)(…,f,a,b)=f(…,f,a,b)
.*l
означает, что l является массивом иl[~n]
принимает последний аргумент nd(x,b,c,*l)=a(x), c0(x,b), b(x,c0), b(x,f) for f in l
d использует c0 для обновления b и b для обновления всех других функций ввода (которых может быть любое количество из-за списка)d(x,b,c,d)>9^x,b^x,c^x,d^x
иd²(x,b,c,d)>a²(x), b^(9↑↑x), c^(9↑↑x), d^(9↑↑x)
но d становится еще лучше, если вы объедините это с c:
c0²(x,b,c0,d)=d^x(9^x,b^x,c0^x,d^x)=…
c0(x,b,c0,d,c1)=c1(x,b,c0,d,c1)=d(x,b,c0,d,c1)=9^x,b^x,c0^x,d^x,c1^x
c0²(x,b,c0,d,c1)=c0(9^x,b^x,c0^x,d^x,c1^x)=c1^x(9^x,b^x,c0^x,d^x,c1^x)=…
чем больше c (x) вы добавите в конце, тем мощнее оно станет. Первый c0 всегда остается d:
c0(x,b,c0,d,c4,c3,c2,c1)=c1(…)=c2(…)=c3(…)=c4(…)=d(x,b,c0,d,cX,cX-1,…,c3,c2,c1)=…
но второй оставляет итерированные версии:
Когда
d^x
, наконец, рассчитываетсяc4
, потребуется гораздо более итеративная версияd
в следующий раз. Когдаc4^x
окончательно вычисляетсяc3
, потребуется гораздо более итеративная версияc4
...Это создает действительно мощную версию итерации, потому что
d
:b
использованиеc0
c0
использованиеb
b
сами улучшения. Это означает, что d становится более мощным, когда он повторяется больше.Создание этой длинной цепочки c - это то, что
e(x)=c0^x(x,b,c0,d,c(a(x)),c(a(x)-1),c(a(x)-2),…,c(3),c(2),c(1))[1]
делает.Он использует
c0^x
для обхода, чтоc0
бы просто датьd
.В
[1]
означает , что она будет в конечном итоге вернуть второй выходd^…
. Такb^…
.В этот момент я не мог придумать ничего общего с e (x), чтобы значительно увеличить его выход, кроме увеличения ввода.
Поэтому
f(x,a)=a(x),e(a(x))(x,a)[1](x)
используетb^…
сгенерированный bye(x)
для вывода лучшей базовой функции и использует эту базовую функцию для вызоваe(x)
с большим вводом.g(x)=e(x)(x,f)[1](x,a)[1](x)
использует финалe(x)
для вложенияf
и производит действительно мощную функцию.Fgh приближение
Мне понадобится помощь, чтобы приблизить это число с любым видом ФГГ.
Старая версия : f ω ω 6 (f ω ω 5 (9e999)), попробуйте онлайн! История изменений объяснения
источник
f_1(x) = x+x
но в долгосрочной перспективе это не имеет большого значения.x*x
.a2(f_n)~=f_{n+1}
Рубин, F ε 0 2 (5), 271 байт
Попробуйте онлайн!
Это основано на карте m (n) .
Объяснение:
m[0][f0][k] = f0[f0[...f0[k]...]]
сk
итерациямиf0
.m[1][f0][f1][k] = f0[f0[...f0[f1]...]][k]
сk
итерациямиf0
.m[2][f0][f1][f2][k] = f0[f0[...f0[f1]...]][f2][k]
сk
итерациямиf0
.В целом,
m[n]
принимаютn+2
аргументы, перебирает первый аргумент,f0
,k
раз на второй аргумент, а затем применяет полученную функцию на третий аргумент (если она существует), затем применяет полученную функцию на четвертый аргумент (если она существует), и т.п.Примеры
m[0][n↦n+1][3] = (((3+1)+1)+1 = 6
В целом
m[0][n↦n+1] = n↦2n
.m[0][m[0][n↦n+1]][3] = m[0][n↦2n][3] = 2(2(2(3))) = 24
В целом
m[0][m[0][n↦n+1]] = n↦n*2^n
.В общем,
m[1][m[0]][n↦n+1] = f_ω
в быстрорастущей иерархии.и окончательный результат является
источник