Ваша цель - вывести (на стандартный вывод) максимально возможное число, используя всего десять символов кода.
- Вы можете использовать любые функции вашего языка, кроме встроенных функций возведения в степень.
- Точно так же вы не можете использовать научную запись для ввода числа. (Таким образом, нет
9e+99
.)
- Точно так же вы не можете использовать научную запись для ввода числа. (Таким образом, нет
- Программа должна распечатать номер без какого-либо ввода от пользователя. Точно так же нет чтения из других файлов или из Интернета, и так далее.
- Ваша программа должна рассчитать одно число и распечатать его. Вы не можете напечатать строку, и вы не можете напечатать одну и ту же цифру тысячи раз.
- Вы можете исключить из ограничения в 10 символов любой код, необходимый для печати чего-либо. Например, в Python 2, который использует
print x
синтаксис, вы можете использовать до 16 символов для вашей программы. - Программа должна на самом деле преуспеть в выводе. Если запуск на самом быстром компьютере в мире занимает больше часа, он недействителен.
- Вывод может быть в любом формате (чтобы вы могли печатать
999
,5e+100
и т. Д.) - Бесконечность - это абстрактное понятие , а не число. Так что это неверный вывод.
code-challenge
number
busy-beaver
Ypnypn
источник
источник
If it takes longer than an hour to run on any computer in the world, it's invalid.
не является объективным. Я мог бы (теоретически) изготовить компьютер, для смены которого требуется час,* 2^x
?Ответы:
Wolfram Language
ack (9!, 9!) =
Вывод в обозначении стрелки.
источник
ack(99!,9)
намного, намного больше.Perl,> 1,96835797883262e + 18
Не может быть самым большим ответом ... сегодня! Но подождите достаточно тысячелетий и так будет!
Редактировать:
Чтобы ответить на некоторые комментарии, под «достаточным количеством тысячелетий» я на самом деле имею в виду n 100 лет.
Справедливости ради следует отметить, что если смерть вселенной из-за заморозков и жары закончит существование вселенной (по оценкам, произойдет ~ 10 100 лет), то «окончательное» значение будет ~ 10 214 , что, безусловно, намного меньше, чем некоторые из другие ответы (хотя, «случайные квантовые флуктуации или квантовое туннелирование могут произвести другой Большой Взрыв через 10 10 56 лет»). Если мы выберем более оптимистичный подход (например, циклическую или мультивселенную модель), тогда время будет бесконечно, и когда-нибудь в какой-то вселенной, в какой-то высокобитовой архитектуре, ответ будет превосходить некоторые другие.
С другой стороны, как указывалось,
time
действительно ограничено размером целое / длинное, поэтому в действительности что-то вроде~0
всегда будет производить большее число, чемtime
(то есть максимальное,time
поддерживаемое архитектурой).Это был не самый серьезный ответ, но, надеюсь, вам, ребята, понравилось!
источник
time
обернетесь вокруг и не вернете небольшое число в какой-то момент? Зависит от того, 32-битный или 64-битный Perl, я думаю,Вольфрам ≅ 2.003529930 × 10 19728
Да, это язык! Он управляет бэк-эндом популярного сайта Wolfram Alpha. Это единственный язык, который я нашел, где функция Аккермана встроена и сокращена до 6 символов.
В восьми символах:
Или 00 2,003529930 × 10 19728
ack(4,3)
иack(5,2)
т. д. намного больше, но слишком велико.ack(4,2)
это, вероятно, самое большое число Аккермана, которое может быть полностью рассчитано менее чем за час.Большие числа отображаются в символической форме, например:
Правила говорят, что любой выходной формат разрешен, так что это может быть допустимым. Это больше, чем 10 10 19727 , что больше, чем любая другая запись здесь, за исключением повторного факториала.
Тем не мение,
больше, чем повторный факториал. Самое большое число, которое я могу получить из десяти символов:
Это безумно огромно, Вселенная недостаточно велика, чтобы представлять значительную часть своих цифр, даже если вы брали повторные записи числа.
источник
ack(4,2)+1
решения.ack(4,2)
неверный ввод. Входные данные W | A на естественном языке даже не считаются языком программирования. Он не завершен по Тьюрингу, и вы не можете написать даже базовые программы, такие как алгоритм Евклида. По этой причине я не думаю, что это правильный ответ, так же как и запрос Google.Оболочка Python2, 3,010,301 цифр
Вычисление длины: Python добавит «L» к этим длинным числам, поэтому он сообщает на 1 символ больше, чем результат содержит цифры.
Первые и последние 20 цифр:
источник
9 * 2**9999999
, так что можно утверждать, что он использует возведение в степень.***built-in*** exponentiation functions
не допускаются, так что это может не соответствовать правилам. +1floor(log10(9 * 2**9999999))+1
CJam, 2 × 10 268 435 457
Это вычисляет b , определенный следующим образом:
0 = 10
a n = a n - 1 2
b = 20 × 28
Фон
Это следует той же идее, что и ответ Клавдия , но не основано на нем. У меня была похожая идея, которую я опубликовал всего через несколько минут после того, как он опубликовал свою , но я отказался от нее, поскольку она не подошла близко к сроку.
Тем не менее, предложение aditsu перейти на Java 8 и моя идея об использовании степеней 10 позволили CJam вычислять числа вне досягаемости GolfScript, что, по-видимому, связано с некоторыми ошибками / ограничениями Ruby's Bignum.
Как это устроено
CJam, ≈ 8,1 × 10 1,826,751
Занимает меньше пяти минут на моей машине, так что еще есть возможности для улучшения.
Это вычисляет 20 , определенное следующим образом:
0 = 20
a n = (n × a n - 1 ) 2
Как это устроено
источник
Python 3, 9 * 2 ^ (7 * 2 ^ 33)> 10 ^ 18 100 795 813
9 * 2 ^ (2 ^ 35)> 10 ^ 10 343 311 894Изменить: мой новый ответ:
Старый ответ для потомков:
Десять символов точно.
Я печатаю число в шестнадцатеричном виде, и
Поэтому мой настоящий код:
Доказательство того, что он работает в указанное время и генерирует число указанного размера:
Мой номер> 10 ^ (15032385538 * log (16))> 10 ^ 18100795813
-Меньше шестнадцатеричные цифры , чем выше туалет распечатки из - за начальными
0x9
.Python 3 необходим, потому что в python 2
7<<33
он будет длинным и<<
не будет длинным в качестве входных данных.Я не могу использовать 9 << (1 << 36) вместо этого, потому что:
Таким образом, это самое большое количество возможных форм для
a<<(b<<cd)
печати на моем компьютере.По всей вероятности, самая быстрая машина в мире имеет больше памяти, чем я, поэтому мой альтернативный ответ:
9 * 2 ^ (9 * 2 ^ 99)> 10 ^ (1.7172038461 * 10 ^ 30)
Однако, мой текущий ответ - самый большой, который кто-либо представил, таким образом, это, вероятно, достаточно хорошо. Кроме того, все это предполагает допущение сдвига битов. Похоже, из других ответов использую его.
источник
Любой язык с достаточно короткими именами констант, ок.
Я бы опубликовал это как ответ PHP, но, к сожалению,
M_PI
слишком долго! Но PHP дает 8.0839634798317E + 17 для этого. В основном, это злоупотребляет отсутствием абсолютной точности в PI: pисточник
(/ 99(sin pi))
(14 символов). Ошибка в TI-83:99/sin(π
(8 символов) вызывает деление на ноль. Работает в LibreOffice Calc :=99/SIN(PI(
(10 символов, не считая=
) вычисляет 808423047055000000. LibreOffice автоматически вставляет последние два))
в=99/SIN(PI())
.99/sin(π
пять байтов или восемь? Я знаю, что TI-BASIC хранит несколько команд как отдельные байты; этоsin(
один из них?Haskell
Без всяких хитростей:
Возможно, ничего не вычисляя:
Приспосабливая ответ Ниета :
источник
floor(infinity)
такое конечное число? Какого черта Хаскелл?isInfinite $ 1 / 0 -- True
. Насколько я могу судить, IEEE 754 определяет1 / 0
бесконечность.1 / 0 == Infinity
.Powershell - 1.12947668480335E + 42
Умножает на 99 Пебибайт на 9 000 000 000 Пебибайт.
источник
J (
((((((((9)!)!)!)!)!)!)!)!
)Да, это много.
10^(10^(10^(10^(10^(10^(10^(10^6.269498812196425)))))))
быть не очень точным.источник
!!9x
ничего не выводил на экран. Я искренне сомневаюсь , что!!!!!!!!9x
будет когда - либо быть вычислен.!!9x
наконец, распечатано на экране. Я впечатлен тем, что он на самом деле вычислил значение, но он все еще полностью не соответствует пуле 5.K / Kona :
8,977649e2611,774896e308!170
создает вектор чисел от 0 до 1691.6+
добавляет один к каждому элементу вектора и преобразует в реалы (диапазон от 1,6 до 170,6)*/
умножает каждый элемент массива вместеЕсли бы Kona поддерживал четкую четкость, я мог бы сделать
*/9.+!999
и обойти 1e2584. К сожалению, это не так, и я ограничен двойной точностью.старый метод
!99
создает вектор чисел от 0 до 989+
добавляет 9 к каждому элементу вектора (теперь в диапазоне от 9 до 107)9.*
умножает каждый элемент на 9,0 (неявно преобразуя в реалы, т.е. с 81,0 до 963,0)*/
умножает каждый элемент вектора вместеисточник
HTML, 9999999999
.. Успешно справился.
источник
9^9999
отпечатки9^9999
. Просто говорю :)PHP_INT_MAX
, 11Python - Варьируется, до 13916486568675240 (пока)
Не совсем серьезно, но я подумал, что это будет забавно.
Из всех вещей, которые я пробовал,
len
наиболее последовательно получал большие идентификаторы.Получил 13916486568675240 (17 цифр) на моем компьютере и 13842722750490216 (также 17 цифр) на этом сайте . Я полагаю, что это может дать вам 0, но оно также может повыситься.
источник
calculate
.*99
часть требует расчета.id(id)
илиid(0j)
, вы можете умножить на999
vars
последовательно дает самое высокое значение (но 4 символов) , а затемsum
. Используйтеprint(sorted([(id(x),x)for x in[id,len,max,min,str,int,ord,chr,sum,map,abs,all,any,bin,bool,eval,oct,vars,iter,list,set,repr,round,zip,type,pow,dict,dir,hex]])[::-1])
для проверки.Golfscript, 1e + 33,554,432
Вычисления
10 ^ (2 ^ 25)
без использования показателей выполняются за 96 секунд:Он может вычислять до
9 ^ (2 ^ 9999)
, если только дать достаточно времени, но при увеличении внутреннего показателя на единицу он занимает в три раза больше времени, поэтому предел в один час будет достигнут довольно скоро.Пояснение :
Используя предыдущую версию с той же идеей:
Разбивая это:
Стек в начале каждого блока состоит из одного номера, текущего номера. Это начинается как
8
. Затем:Таким образом, стек, шаг за шагом, выглядит так:
... и т. д. Написано в математической записи, прогрессия:
источник
wc
. Я отредактирую, чтобы было понятнееwc -c
чтобы сделать вывод более четким10{.*}25
доставляет 33 554 434 цифры и заканчивается за 90 секунд на моей машине. Я не знаю почему, но10{.*}26*
ничего не печатает.wxMaxima ~ 3x10 49 948 (или 10 8 565 705 514 )
Выход
Не уверен, что он вполне соответствует спецификациям (особенно формату вывода), но я могу поразить еще больше:
Выход
Это примерно 10 8 565 705 514, что значительно больше, чем у большинства популярных ответов, и было вычислено примерно за 2 секунды.
bfloat
Функция дает произвольную точность .источник
Хаскелл, 4950
Ой человек, это не много! 10 знаков начинаются после знака доллара.
источник
print
? Кроме того,9/0.000001
больше, чемsum[1..99]
.Mathematica, 2.174188391646043 * 10 ^ 20686623745
Десять символов точно.
источник
Оболочка Python,
649539999890001Бьет Хаскелл, не очень серьезный ответ.
источник
calculate
на ответ.9**9**9**9
правильный, так как это арифметический оператор (не встроенная функция).Wolfram Alpha (сайт считается языком)?
выходы
спасибо Кори за подсказку, что места работают так же, как и паренсы.
источник
((99!)!)! > 4
никогда не вернется.Befunge-93 (1,853,020,188,851,841)
Рад, что никто не сделал Befunge (это моя ниша), но, черт возьми, я не могу найти какой-нибудь хитрый прием, чтобы увеличить число.
Так что это 9 ^ 16.
В основном умножает значение в верхней части стека на себя. Итак, значение на вершине стека идет:
а также
Выводит окончательное значение. Мне было бы интересно узнать, есть ли у кого-нибудь лучшие идеи.
источник
Я бы предпочел опубликовать это как комментарий выше, но, видимо, я не могу, так как я нуб.
Python:
9<<(2<<29)
Я бы пошел с большим битовым сдвигом, но Python, похоже, хочет, чтобы правый операнд сдвига был недлинным целым числом. Я думаю, что это приближается к теоретическому максимуму:
9<<(7<<27)
Единственная проблема с ними заключается в том, что они могут не соответствовать правилу 5.
источник
Matlab (1.7977e + 308)
Matlab хранит значение наибольшего (двойной точности) числа с плавающей точкой в переменной с именем
realmax
. Вызов его в командном окне (или в командной строке) печатает его значение:источник
realmax+1
. Я попробовал это для шутки и удивления, он возвращает точно такой же номер, как у вас (потом я засмеялся, когда понял ...eps(realmax)=1.99584030953472e+292
).Питон, ок. 1.26e1388
дает:
источник
По крайней мере, Python 3.5.0 (64-разрядный), более 10 ^ 242944768872896860
В идеальном мире это было бы
9<<(1<<63)-1
, но для этого недостаточно байтов. Это число настолько велико, что для его хранения требуется почти 1 EiB памяти, что немного больше, чем у меня на компьютере. К счастью, вам нужно всего лишь около 0,2% мирового хранилища для обмена. За двоичным значением1001
следуют 8070450532247928832 нуля.Если Python выйдет для 128-битных машин, максимум будет
9<<(9<<99)
, что требует менее 1 МБ памяти. Это хорошо, потому что у вас будет достаточно адресуемого пространства для хранения интерпретатора Python и операционной системы.источник
Cubix , 9.670457478596419e + 147 (не конкурирует)
Не конкурирует, потому что Cubix новее этой задачи. Вы можете проверить это онлайн здесь , но обратите внимание, что на самом деле он не печатает номер; вам придется приостановить программу после
*
запуска двух последних , чтобы увидеть значение в стеке.Как это устроено
Cubix - это двумерный esolang, где код оборачивается вокруг куба. Этот код в точности эквивалентен следующей сети кубов, где
.
нет операции:Затем выполняется код, указатель инструкции (IP) начинается в верхнем левом углу самой левой грани и направлен вправо.
"
включает строковый режим, в котором все встречающиеся символы до следующего"
помещают свои кодовые символы в стек. IP полностью оборачивает код, помещая три/
s (47), два*
s (42) и два.
s (46) в стек, прежде чем снова выйти из строкового режима.Вот где это становится интересным. Первое зеркало
/
отражает IP, поэтому оно обращено вверх; затем он вращается вокруг куба, ударяя эти символы:Три
*
с умножают два верхних элемента в стеке. Теперь, в отличие от большинства основанных на стеке языков, где арифметические операторы выводят свои аргументы, Cubix оставляет предыдущие значения в стеке. Так что это означает, что это рассчитывает46*46 = 2116, 46*2116 = 97336, 2116*97336 = 205962976
.Когда IP
/
снова достигает , он поворачивается направо. Затем он попадает в следующее зеркало и следует по этому пути:Две звездочки умножают два верхних элемента еще раз. Затем зеркало снова направляет IP-адрес, а третье зеркало повторяет процесс еще раз:
Наконец, IP покидает раздел зеркала, направляясь на восток. Две финальные звездочки умножаются еще два раза, оставляя результат 9,670457478596419e + 147 в стеке. Это может быть напечатано с помощью
O
, но нет простого способа сделать это, так как практически каждое место на кубе уже используется.источник
Скала, 2 63 -1
Бедная, бедная Скала. Требуется не менее 8 символов, чтобы получить
BigInt
значение, которое не оставляет достаточно места, чтобы его увеличить.Но с помощью всего 7 символов (подсчитанного) кода мы можем вывести максимально возможный положительный результат
Long
:источник
Brainf ** k 256 - 2147483647
Если вы игнорируете тот факт, что большинство компиляторов и интерпретаторов выводят данные как эквивалентные ascii (будьте осторожны, это то, чем они являются;)) , это вернет максимальное значение типа данных интерпретатора / компилятора.
В некоторых системах это всего 256, хотя в некоторых (например, у меня) это максимальное значение 32-разрядного целого числа, то есть 2 147 483 647.
Редактировать:
Напечатает то же самое в гораздо меньшем количестве символов
источник
-1
на интерпретаторах, которые используют подписанные значения для лентыPerl, не конкурирующий
Я использую это для того, чтобы выделить немного знания Perl.
Perl не может конкурировать на этом, потому что у него нет встроенных bignums (конечно, вы можете загрузить библиотеку bignum).
Но то, что все знают, не совсем верно. Одна основная функция может обрабатывать большие числа.
pack
Форматw
фактически может преобразовать любой размер натурального числа между основанием10
и основанием128
. Основное целое число 128, однако, представлено в виде строковых байтов. Битовая строкаxxxxxxxyyyyyyyzzzzzzz
становится байтами:1xxxxxxx 1yyyyyyy 0zzzzzzz
(каждый байт начинается с 1, кроме последнего). И вы можете преобразовать такую строку в базу 10 с распаковкой. Таким образом, вы можете написать код, как:который дает:
Вы можете заменить
4**4
их большими значениями, пока не почувствуете, что это занимает слишком много времени или занимает слишком много памяти.К сожалению, это слишком долго для предела этой задачи, и вы можете утверждать, что результат base 10 преобразуется в строку, прежде чем он становится результатом, поэтому выражение на самом деле не производит число. Но внутренне perl действительно делает необходимую арифметику для преобразования входных данных в базу 10, что я всегда считал довольно аккуратным.
источник
TI-36 (не 84, 36), 10 байтов, ок. 9.999985426E99
Старые калькуляторы также могут быть запрограммированы;)
69!58.4376
Это очень близко к максимальному диапазону, который может отображать калькулятор TI:
-1E100<x<1E100
источник
Perl 6 , 456 574 цифры
Нет TIO, потому что это занимает 2 минуты, чтобы бежать.
источник