Некоторые из вас могут быть знакомы с 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)
и т.п.