Ваша цель - написать программу, которая печатает число. Чем больше число, тем больше очков вы получите. Но будь осторожен! Длина кода ограничена и сильно взвешена в функции оценки. Ваш напечатанный номер будет разделен на куб числа байтов, которые вы использовали для вашего решения .
Итак, допустим, вы напечатали, 10000000
и ваш код длиной в 100
байты. Ваш окончательный счет будет 10000000 / 100^3 = 10
.
Есть и другие правила, которым нужно следовать, чтобы усложнить задачу.
- Вы не можете использовать цифры в своем коде (0123456789);
- Вы можете использовать математические / физические / и т.д. константы, но только если они меньше 10. (например, Вы можете использовать Pi ~ = 3.14, но вы не можете использовать постоянную Авогадро = 6e23)
- Рекурсия разрешена, но сгенерированное число должно быть конечным (поэтому бесконечное не принимается как решение. Ваша программа должна корректно завершаться, предполагая неограниченное время и память, и генерировать запрошенный вывод);
- Вы не можете использовать операции
*
(умножение),/
(деление),^
(власть) или любой другой способ указать их (например2 div 2
, не допускается); - Ваша программа может выводить более одного числа, если вам это нужно . Только самый высокий будет засчитан для выигрыша;
- Тем не менее, вы можете объединять строки: это означает, что любая последовательность соседних цифр будет рассматриваться как одно число;
- Ваш код будет запущен как есть. Это означает, что конечный пользователь не может редактировать какую-либо строку кода и не может вводить число или что-либо еще;
- Максимальная длина кода составляет 100 байтов.
Leaderboard
- Стивен Х. , Пайт ≈ f φ (1,0,0) +7 (256 26 ) / 1000000 [1]
- Просто Красивое Искусство , Рубин ≈ f φ 121 (ω) (126) [1]
- Питер Тейлор , GolfScript ≈ f ε 0 + ω + 1 (17) / 1000 [1]
- res , GolfScript ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0) (f ε 0 (f ε 0 (f ε 0 (126)))))))))) [1]
- Просто Красивое Искусство , Рубин ≈ f ω ω2 +1 (1983)
- eaglgenes101 , Юлия ≈ f ω3 (127)
- col6y , Python 3, ≈ (127 → 126 → ... → 2 → 1) / 99 3 [1] [3]
- Toeofdoom , Haskell, ≈ 20 (1) / 99 3 [1]
- Fraxtil , dc, ≈ 15 ¹⁶⁶⁶⁶⁶⁵ ¹⁶⁶⁶⁶⁶⁵ 15/100 3 [3]
- Пурпурный , Python, ≈ ack (126 126) / 100 3 ≈ 10 ↑ 124 129
- Кендалл Фрей , ECMAScript 6, ≈ 10 3 ↑ 4 3 /100 3 [1]
- Илмари Karonen , GolfScript, ≈ 10 ↑ 3 10 377 /18 3 [1]
- BlackCap , Haskell, ≈ 10 ↑↑ 65503/100 3
- рекурсивный , Python, ≈ 2↑↑ 11/95 3 ≈ 10 ↑↑ 8,63297 [1] [3]
- нм , Haskell, ≈ 2↑↑ 7/100 3 ≈ 10 ↑↑ 4,63297 [1]
- Дэвид рыскания , C ≈ 10 10 4 × 10 22 /83 3 ≈ 10 ↑↑ 4,11821 [2]
- Primo , Perl ≈ 10 (+12750684161!) 5 × 2 27 /100 3 ≈ 10 ↑↑ 4,11369
- Искусство , C ≈ 10 10 2 × 10 6 /98 3 ≈ 10 ↑↑ 3,80587
- Роберт Сёрли , x86, ≈ 10 2 2 19 +32 / 100 3 ≈ 10 ↑↑ 3.71585
- Тобия , АПЗ, ≈ 10 10 353 /100 3 ≈ 10 ↑↑ 3,40616
- Даррен Стоун , C, ≈ 10 10 97.61735 / 98 3 ≈ 10 ↑↑ 3.29875
- ecksemmess , C ≈ 10 2 320 на / 100 3 ≈ 10 ↑↑ 3,29749
- Адам Спейт , vb.net, ≈ 10 5000 × (2 64 ) 4 /100 3 ≈ 10 ↑↑ 3,28039
- Джошуа , удар, ≈ 10 10 15 /86 3 ≈ 10 ↑↑ 3,07282
Сноски
- Если бы каждый электрон во вселенной был кубитом, и каждая его суперпозиция могла бы с пользой использоваться для хранения информации (что, если вам на самом деле не нужно знать, что хранится, теоретически возможно), эта программа требует больше памяти, чем могла бы возможно, существуют, и поэтому не могут быть запущены - сейчас или в любой мыслимой точке в будущем. Если автор намеревался напечатать значение, большее, чем ≈ 3 ↑↑ 3,28 одновременно, это условие применяется.
- Эта программа требует больше памяти, чем существует в настоящее время, но не настолько, чтобы теоретически ее нельзя было хранить на скудном количестве кубитов, и поэтому однажды может появиться компьютер, который может запустить эту программу.
- Все доступные в настоящее время интерпретаторы выдают ошибку времени выполнения, иначе программа не будет выполнена так, как задумал автор.
- Запуск этой программы нанесет непоправимый ущерб вашей системе.
Edit @primo : я обновил часть табло, используя, надеюсь, более удобную для сравнения запись с десятичными знаками для обозначения логарифмического расстояния до следующей более высокой степени. Например, 10 ↑↑ 2,5 = 10 10 √10 . Я также изменил некоторые оценки, если считаю, что анализ пользователя неверен, не стесняйтесь оспаривать любой из них.
Объяснение этой записи:
Если 0 ≤ b < 1
тогда .a↑↑b = ab
Если b ≥ 1
тогда .a↑↑b = aa↑↑(b-1)
Если b < 0
тогда .a↑↑b = loga(a↑↑(b+1))
12e10
(12 * 10 ^ 10) как12*10^10
?500b
, это неверно? То есть можем ли мы игнорировать все нечисловые элементы, которые печатает программа? И если да, то будет ли что-то подобное50r7
считаться507
?Ответы:
GolfScript; оценка не менее f ε_0 + ω + 1 (17) / 1000
После разрешения «ы предложения использовать Lifetime червячного ответа на этот вопрос, я две программы , которые значительно улучшают его вывод решения Говарда.
Они имеют общий префикс по модулю имени функции:
вычисляет,
g(g(1)) = g(5)
гдеg(x) = worm_lifetime(x, [x])
растет примерно как f ε 0 (то есть примечания - это «функция в быстрорастущей иерархии, которая растет примерно с той же скоростью, что и функция Гудштейна»).Немного легче (!) Анализировать
.{foo}*
картыx
дляfoo^x x
.таким образом дает
g^(g(5)) ( g(5) )
; остальные 8 уровней итерации аналогичны цепочке стрелок. Чтобы выразить в простых терминах: еслиh_0 = g
иh_{i+1} (x) = h_i^x (x)
тогда мы рассчитаемh_10 (g(5))
.Я думаю, что эта вторая программа почти наверняка намного лучше. На этот раз метка, назначенная функции,
g
является новой строкой (sic).На этот раз я лучше использую
^
в качестве другой функции.берет
x
на стек и оставляетx
после себя строку, содержащуюx
копии,.{
за которойg
следуютx
копии}*
; Затем он оценивает строку. Так как у меня было лучшее место для записи запасных персонажей, мы начинаем сj_0 = g
; еслиj_{i+1} (x) = j_i^x (x)
тогда первая оценка^
вычисленийj_{g(5)} (g(5))
(которая, я уверен, уже превосходит предыдущую программу). Затем я выполняю еще^
16 раз; так что еслиk_0 = g(5)
иk_{i+1} = j_{k_i} (k_i)
тогда он рассчитываетk_17
. Я благодарен (опять же) за то, чтобы оценить, чтоk_i
>> f ε_0 + ω + 1 (i).источник
.{foo}*
картыx
дляfoo^x (x)
. Если мы возьмем,h_0 (x) = g^4 (x)
аh_{i+1} (x) = h_i^x (x)
затем значение рассчитываетсяh_9 (g(3))
. Вашf(x) = g^(4x) (x) = h_0^x (x) = h_1 (x)
.*
работает. Можно с уверенностью сказать, что h_0 (x) = g ^ 4 (x) >> f_eps_0 (x); следовательно, отношение h_ {i + 1} (x) = h_i ^ x (x) эффективно определяет «ускоренную» быстрорастущую иерархию, такую что h_i (x) >> f_ (eps_0 + i) (x). Т.е. вычисленное число h_9 (g (3)), безусловно, намного больше, чем f_ (eps_0 + 9) (g (3)). Что касается g (3), я думаю, что могу показать, что он больше, чем g_4, четвертое число в последовательности g_i, используемое для определения числа Грэма (то есть g_64).j_i ~ f_{eps_0 + i}
; это делаетk_i ~ f_{eps_0 + i omega + i^2}
?k_i ~ f_{ε_0 + ω}^i (k_0)
. Вот причина: k_ {i + 1} = j_ {k_i} (k_i) = j_ω (k_i) ~ f_ {ε_0 + ω} (k_i) ~ f_ {ε_0 + ω} ^ 2 (k_ {i-1}) ... ~ f_ {ε_0 + ω} ^ {i + 1} (k_0), поэтому k_i ~ f_ {ε_0 + ω} ^ i (k_0). Тогда получается очень консервативная нижняя граница k_i, полностью в терминах быстрорастущей иерархииk_i >> f_{ε_0 + ω}^i (i) = f_{ε_0 + ω + 1} (i)
.Windows 2000 - Windows 8 (3907172 / 23³ = 321)
ПРИМЕЧАНИЕ: НЕ НАЧИНАЙТЕ ЭТОГО!
Сохраните следующее в командный файл и запустите его от имени администратора.
Выводится при запуске на диске 4 ТБ с первым напечатанным номером, выделенным жирным шрифтом.
источник
Your printed number will be divided for the number of bytes you used for your solution^3.
GolfScript, оценка: путь слишком много
Хорошо, насколько большое число мы можем напечатать в нескольких символах GolfScript?
Давайте начнем со следующего кода ( спасибо, Бен! ), Который печатает
126
:Далее, давайте повторим это 126 раз, дав нам число, равное примерно 1,26126 × 10 377 :
(Это повторение строк, а не умножение, поэтому в соответствии с правилами все должно быть в порядке.)
Теперь давайте повторим это 378-значное число чуть более 10 377 раз:
Вы никогда не увидите, чтобы эта программа завершилась, поскольку она пытается вычислить число с примерно 10 380 ≈ 2 1140 цифрами. Ни один когда-либо созданный компьютер не мог хранить такое большое число, и при этом не мог бы быть построен такой компьютер, используя известную физику; число атомов в наблюдаемой Вселенной оценивается приблизительно 10 80 , так что даже если бы мы могли каким - то образом использовать всю материю во Вселенной , чтобы сохранить это огромное количество, мы бы до сих пор как - то втиснуть около 10 +380 / 10 80 = 10 300 цифр в каждый атом!
Но давайте предположим, что у нас есть собственный Божий интерпретатор GolfScript, способный выполнять такие вычисления, и что мы все еще не удовлетворены. ОК, давайте сделаем это снова!
Выходные данные этой программы, если бы она могла завершиться, имели бы около 10 10 383 цифр и, следовательно, равнялись бы примерно 10 10 10 383 .
Но ждать! Эта программа становится несколько повторяющейся ... почему бы нам не превратить ее в цикл?
Здесь тело цикла получает работать около 10 377 раз, что дает нам теоретический выход , состоящему из примерно 10 10⋰ 10 377 цифр или около того , где башни итерированных полномочий от 10 составляет около 10 377 длиной шага. (На самом деле, это грубая недооценка, так как я пренебрегаю тем фактом, что число, которое повторяется, также увеличивается каждый раз, но, условно говоря, это незначительная проблема.)
Но мы еще не закончили. Давайте добавим еще один цикл!
Чтобы даже правильно записать приближение таких чисел, необходимы эзотерические математические обозначения. Например, в нотации со стрелкой вверх по Кнуту число (теоретически), выводимое вышеприведенной программой, должно составлять примерно 10 ↑ 3 10 377 , давать или брать несколько (или 10 377 ) степеней из десяти, предполагая, что я правильно сделал математику.
Числа, подобные этому, выходят далеко за пределы просто «невероятно огромного» и попадают в область «немыслимого». Например, не только невозможно сосчитать или записать такие числа (мы перешли за эту точку уже в третьем примере выше), но они буквально не имеют никакого возможного использования или существования вне абстрактной математики. Мы можем доказать, из аксиом математики , что такие числа существуют, так же , как мы можем доказать , из спецификации GolfScript , что Программа выше будет их вычислять, если пределы реальности и доступного дискового пространства не вмешивались), но нет буквально ничего в физическая вселенная, которую мы могли бы использовать для подсчета или измерения в любом смысле.
Тем не менее, математики иногда используют еще большие числа . (Теоретически) вычислительные числа , что большое занимает немного больше работы - вместо того , чтобы просто гнезжусь более петли один за другим, мы должны использовать рекурсию для телескопа глубины вложенных циклов. Тем не менее, в принципе, должна быть возможность написать короткую программу на языке GolfScript (я бы ожидал, что ее размер меньше 100 байт), чтобы (теоретически) вычислить любое число, выражаемое, скажем, в цепочечной нотации Конвея ; детали оставлены в качестве упражнения. ;-)
источник
"...No computer ever built could store a number that big...
Поправьте меня, если я ошибаюсь, но я не думаю, что это применимо здесь. Разве это не просто многократно «хранить» и печатать 3 цифры за раз (?), Поэтому нет необходимости сохранять конечный результат.JavaScript 44 символа
Это может показаться немного обманчивым:
alert((Math.PI+''+Math.E).replace(/\./g,""))
Оценка = 31415926535897932718281828459045/44 ^ 3 ≈ 3.688007904758867e + 26 ≈ 10 ↑↑ 2.1536134004
источник
"."
вместо них замену/\./g
m=Math,p=m.PI,e=m.E,s="",alert((p*p*p+s+e*e*e).replace(/\./g,s))
вместо этого, ваш счет тогда 3100627668029981620085536923187664/63 ^ 3 = 1.240017943838551e + 28C, балл = 10 10 97,61735 / 98 3 ≈ 10 ↑↑ 2,29874984
Я ценю помощь в оценке. Любые идеи или исправления приветствуются. Вот мой метод:
n = конкатенация каждого числа от 1 до 2 64 -1, повторяется (2 64 -1) 4 раза . Во-первых, вот как я оцениваю (низко) совокупное число цифр от 1 до 2 64 -1 («подпоследовательность»): последнее число в последовательности подпоследовательности составляет 2 64 -1 =
18446744073709551615
с 20 цифрами. Таким образом, более 90% чисел в подпоследовательности (начинающихся с1
..9
) имеют 19 цифр. Давайте предположим, что оставшиеся 10% в среднем 10 цифр. Это будет гораздо больше, но это низкая оценка для легкой математики и без обмана. Эта подпоследовательность повторяется (2 64 -1) 4 раза, поэтому длинаиз n будет не менее (0,9 × (2 64 -1) × 19 + 0,1 × (2 64 -1) × 10) × (2 64 -1) 4 = 3,86613 × 10 97 цифр. В комментариях ниже @primo подтверждает, что длина n равна 4.1433x10 97 . Таким образом, само n будет 10 к этой степени, или 10 10 97,61735 .L = 98 символов кода
оценка = н / л 3 = 10 10 97,61735 / 98 3
Требование: Должен работать на 64-битном компьютере, где
sizeof(long) == 8
. Mac и Linux сделают это.источник
'z'
это постоянная величина122
. Правильно?printf("%d",n)
что сделает число намного больше. Кроме того, 64-битный компьютер не означает 64-битную длину, например, Windows использует модель LLP64, так что длина по-прежнему составляет 32 бита0..2^64-1
ровно 357823770363079921190. Повторное(2^64-1)^4
время составляет 4.1433x10 ^ 97. Возьмем 10 к этой мощности10^10^97.61735
≈ 10 ↑↑ 3.29875. Я думаю, что вы претендуете на степень десяти, которой у вас нет (обратите внимание, где это3.866×10^97
стало3.866^10^97
.2.0
вместо97
.10^10^10^2.00
=10^10^97.6
. Я буду отражать это в моем счете сейчас.Python 3 - 99 символов - (скорее всего) значительно больше числа Грэма
Я придумал более быстро растущую функцию, основанную на расширении функции Аккермана.
http://fora.xkcd.com/viewtopic.php?f=17&t=31598 вдохновил меня, но вам не нужно заглядывать туда, чтобы понять мой номер.
Вот модифицированная версия функции ackermann, которую я буду использовать в своем анализе:
Моя функция
A
в приведенном выше коде технически не совпадает, но на самом деле она сильнее, с помощью следующего оператора, заменяющего третью строку приведенного выше определения:(a должно быть не менее 1, поэтому оно должно быть сильнее)
Но для моих целей я буду предполагать, что он такой же, как и более простой, потому что анализ уже частично сделан для функции Аккермана и, следовательно, для этой функции, когда у нее есть два аргумента.
Моя функция гарантированно прекратит рекурсию, потому что она всегда либо удаляет аргумент, уменьшает первый аргумент, либо сохраняет тот же первый аргумент и уменьшает второй аргумент.
Анализ размера
Число Грэма, AFAIK, можно представить как
G(64)
:Где
↑^(n)
b - обозначение стрелки Кнута.Также:
Число , выраженное в программе выше
A(0,1,2,3,4,...,123,124,125)
.Так как
g^64(4)
это число Грэма, и предполагая мою математику правильно , то это меньше , чемA(1,64,100)
мое число значительно больше , чем число Грэма.Пожалуйста, укажите на любые ошибки в моей математике - хотя, если таковых нет, это должно быть наибольшее число, вычисленное до сих пор, чтобы ответить на этот вопрос.
источник
range(ord('~'))
? Не могли бы вы сделатьrange(125)
для меньшего количества байтов, что позволило бы вам сжать большее число, какrange(A(9,9,9))
?Perl - оценка ≈ 10 ↑↑ 4,1
Еще раз злоупотребляя движком регулярных выражений Perl, чтобы перебирать невообразимое количество комбинаций, на этот раз используя рекурсивный спуск.
Во внутренней части выражения мы имеем
.
возможность предотвратить бесконечную рекурсию и, таким образом, ограничить уровни рекурсии длиной строки.В итоге мы получим следующее:
... повторялось 671088640 раз, в общей сложности 12750684161 вложений - что довольно тщательно опускает мою предыдущую попытку 23 вложений. Примечательно, что Perl даже не подавляется этим (опять же, использование памяти остается стабильным на уровне около 1,3 ГБ), хотя пройдет еще некоторое время, прежде чем будет выпущено первое выражение для печати.
Из моего предыдущего анализа ниже, можно сделать вывод , что количество цифр вывода будет на порядок (!) 12750684161 671088640 , где ! К является левой Факториал от к (см A003422 ). Мы можем приблизить это как (k-1)! , что строго меньше, но на тот же порядок величины.
И если мы спросим wolframalpha :
... который почти не меняет мою оценку. Я думал наверняка, что это будет по крайней мере 10 ↑↑ 5 . Я думаю, что разница между 10 ↑↑ 4 и 10 ↑↑ 4.1 намного больше, чем вы думаете.
Perl - оценка ≈ 10 ↑↑ 4
Злоупотребление движком Perl Regex для создания комбинаторики для нас. Встроенный кодовый блок
(??{print})
вставит свой результат непосредственно в регулярное выражение. Так$_
как полностью состоит из2
s (а результатprint
всегда1
), он никогда не может совпадать и посылает perl, вращающийся через все возможные комбинации, которых довольно много.Константы, используемые
$^F
- максимальный дескриптор системного файла, как правило2
.$]
- номер версии perl, аналогичный5.016002
.$_
затем строка, содержащая цифру,2
повторенную 671088640 раз. Использование памяти постоянно около 1,3 ГБ, выход начинается немедленно.Анализ
Давайте определим P k (n) как число выполнений оператора print, где k - количество вложений, а n - длина строки плюс один (просто потому, что мне не хочется писать n + 1 везде).
(.*.*)*
P 2 (n) = [ 2, 8, 28, 96, 328, 1120, 3824, 13056, ... ]
((.*.*)*)*
P 3 (n) = [ 3, 18, 123, 900, 6693, 49926, 372615, 2781192, ... ]
(((.*.*)*)*)*
P 4 (n) = [ 4, 56, 1044, 20272, 394940, 7696008, 149970676, 2922453344, ... ]
((((.*.*)*)*)*)*
P 5 (n) = [ 5, 250, 16695, 1126580, 76039585, 5132387790, 346417023515, 23381856413800, ... ]
(((((.*.*)*)*)*)*)*
P 6 (n) = [ 6, 1452, 445698, 137050584, 42142941390, 12958920156996, ... ]
((((((.*.*)*)*)*)*)*)*
P 7 (n) = [ 7, 10094, 17634981, 30817120348, 53852913389555, ... ]
и т.д. В общем, формула может быть обобщена следующим образом:
где
То есть, левый Факториал от к , то есть сумма всех факториалов меньше , чем к (см A003422 ).
Я не смог определить замкнутые формы для D k и E k , но это не имеет большого значения, если мы заметим, что
а также
С 23 вложениями это дает нам приблизительную оценку:
Это должно быть почти точно, на самом деле.
Но чтобы поместить это в нотацию, которую немного проще визуализировать, мы можем приблизить основание внутреннего показателя степени:
а затем сам показатель:
а затем спросите вольфрамальфу :
что вы можете также просто позвонить 10 ↑↑ 4 и покончить с этим.
источник
Javascript, 10 ↑↑↑↑ 210
100 символов:
Основываясь на наблюдении, что максимальная итерация
f
- это оптимальный путь, я заменил 13 вызовов наf
3 уровня вызовов вложенных цикловf
,z
каждый раз (покаf
продолжает растиz
).Я оценил результат аналитически на листе бумаги - я напишу его, если кому-то интересно посмотреть.
Улучшенный счет: 10 ↑↑ 13
Javascript, точно в 100 символов, опять же:
Это улучшает мой первоначальный ответ тремя способами:
Определение
z
глобального контекста избавляет нас от необходимостиo.z
каждый раз печатать .Можно определить геттер для глобальной области видимости (окна) и типа
f
вместоo.f
.Больше итераций
f
стоит больше, чем начинать с большего числа, поэтому вместо(Math.E+'').replace('.','')
(= 2718281828459045, 27 символов) лучше использовать~~Math.E+''
(= 2, 11 символов) и использовать спасенные символы для вызоваf
много раз.Поскольку, как будет проанализировано ниже, каждая итерация выдает из числа порядка M большее число, порядка 10 M , этот код выдает после каждой итерации.
Оценка: ∼10 10 10 10 10 16 ≈ 10 ↑↑ 6.080669764
Javascript, ровно 100 символов:
Каждый
o.f
вызывает цикл while, всего 5 циклов. Только после первой итерации счет уже превысил 10 42381398144233621 . Во второй итерации Mathematica не смогла вычислить даже количество цифр в результате.Вот пошаговое руководство по коду:
В этом
Начните с 2718281828459045, удалив десятичную точку из
Math.E
.Итерация 1
Объединить убывающую последовательность чисел,
сформировать новый (гигантский) номер,
Сколько цифр в этом номере? Ну, это объединение
В Mathematica,
Другими словами, это 2.72⋅10 42381398144233625 .
Делая мой счет, только после первой итерации, 2.72⋅10 42381398144233619 .
Итерация 2
Но это только начало. Теперь повторите шаги, начиная с гигантского числа ! То есть объединить убывающую последовательность чисел,
Итак, каков мой новый счет, Mathematica?
Итерация 3
Повторение.
Итерация 4
Повторение.
Итерация 5
Повторение.
Аналитическая оценка
На первой итерации мы вычислили количество цифр в конкатенации убывающей последовательности, начиная с 2718281828459045, подсчитав количество цифр в
Эта сумма может быть представлена формулой,
где Z обозначает начальный номер ( например, 2718281828459045), а O Z обозначает его порядок величины ( например, 15, поскольку Z 15 10 15 ). Используя эквивалентности для конечных сумм , вышесказанное может быть явно выражено как
что, если мы возьмем 9 ≈ 10, еще больше уменьшится до
и, наконец, расширив термины и упорядочив их по убыванию, мы получим
Теперь, поскольку нас интересует только порядок величины результата, давайте заменим Z на «число в порядке величины O Z », то есть 10 O Z -
Наконец, 2-й и 3-й термины отменяются, и последние два условия могут быть отброшены (их размер тривиален), оставляя нас с
из которого выигрывает первый член.
Повторно,
f
принимает число в порядке величины М и производит число примерно в порядке величины М (10 М ).Первая итерация может быть легко проверена вручную. 2718281828459045 - это число порядка 15, поэтому
f
должно быть получено число порядка 15 (10 15 ) 16 10 16 . Действительно, произведенное число составляет 2,72⋅10 42381398144233625, то есть 10 42381398144233625 25 10 10 16 .Отмечая, что М не является значимым фактором в М (10 М ), порядок величины результата каждой итерации, следовательно, следует простой схеме тетратации:
LaTeX источники
источник
f
делает что-то вроде принятия числаz
в свои руки . Это что-то вроде↑↑↑
. Конечно, оценка не2↑↑↑2
извините ... больше похоже,2↑↑↑5+1
кажется. Согласитесь, я должен поставить это в таблицу лидеров?i=o.z;while(i--)...
вами, вы не выполняете время циклаo.z
, потому что цикл основан на целочисленной переменной иo.z
содержит строку, превышающую наибольшее представимое целое число, в зависимости от размера слова вашего интерпретатора. Предположим, что ваш интерпретатор не прекратит преобразовывать такую строку в int,i
будет начинать каждый раз с ее наибольшего представимого целочисленного значения, скажем, 2 ^ 63, а не с текущего значенияo.z
.APL, 10 ↑↑ 3.4
Вот моя пересмотренная попытка:
Программа на 100 символов / байт *, работающая на текущем оборудовании (использует незначительный объем памяти и обычные 32-битные переменные типа int), хотя ее выполнение займет очень много времени.
Вы можете запустить его на интерпретаторе APL, и он начнет печатать цифры. Если разрешено завершить, он напечатает число с 10 × 123456789 44 цифры.
Таким образом, оценка 10 10 × 123456789 44 /100 3 ≈ 10 10 353 ≈ 10 ↑↑ 3,406161
объяснение
⎕D
предопределенная константная строка, равная'0123456789'
n←⍎⎕D
определяет n как число, представленное этой строкой: 123456789 (который <2 31 и, следовательно, может использоваться как переменная управления циклом){⍞←⎕D}
выведет 10 цифр на стандартный вывод без перевода строки{⍞←⎕D}⍣n
будет делать это n раз (⍣
это «оператор питания»: это ни *, /, ни ^, потому что это не математическая операция, это своего рода цикл){⍞←n}⍣n⍣n
будет повторять предыдущую операцию n раз, поэтому печать 10 цифр n 2 раза{⍞←n}⍣n⍣n⍣n
будет делать это п 3 раза⍣n
в там, так что печатает п 44 раза струнные'0123456789'
.⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL может быть записан в своей собственной (устаревшей) однобайтовой кодировке, которая отображает символы APL в верхние 128-байтовые значения. Следовательно, для целей оценки программа из N символов, в которой используются только символы ASCII и символы APL, может рассматриваться как длина N байтов.
источник
100 cubed
(100 ^ 3) для меня.{⍞←⎕D}
в⍞←
котором экономит вам три байта , которые вы можете использовать , чтобы добавить еще один⍣n
и сделать⊢n←⍎⎕D
в⌽⍕n←⍎⎕D
течение 80-кратного увеличения. Если вы разрешите работать с,⎕PP←17
то используйте×⍨
вместо⌽⍕
которого почти удваивает количество напечатанных цифр.Haskell, оценка: (2 2 2 65536 -3) / 1000000 ≈ 2 ↑↑ 7 ≈ 10 ↑↑ 4.6329710779
Эта программа содержит ровно 100 байт чистого кода на Haskell. Он напечатает четвертое число Аккермана, в конечном итоге потребляя всю доступную энергию, материю и время Вселенной и за ее пределами в процессе (таким образом, слегка превышая мягкий предел в 5 секунд).
источник
o=length[]
!q
в конце получает вас дополнительно и экономит на этом байты.Python, 2 ↑↑ 11/830584 ≈ 10 ↑↑ 8.632971 (обозначение стрелки вверх)
Вероятно, ни на одном компьютере недостаточно памяти для успешного запуска, но на самом деле это не ошибка программы. При минимальных системных требованиях это работает.
Да, это делает сдвиг битов на булевых значениях.
True
получает принуждение1
в этом контексте. Python имеет произвольные длины целых чисел.источник
print True<<(True<<(True<<(True<<True<<True)))
делает, и это выводит строку 19 КБ.t=True
а затем используяt
после?$python -c 'print True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<True<<True)))))))))' Traceback (most recent call last): File "<string>", line 1, in <module> OverflowError: long int too large to convert to int
GolfScript 3.673e + 374
Я думаю, что
*
это разрешено, поскольку это указывает на повторение строк, а не умножение.Объяснение:
'~'(
оставит 126 (значение ASCII "~") в стеке. Затем скопируйте число, преобразуйте его в строку и повторите строку 126 раз. Это дает126126126126...
примерно1.26 e+377
. Решение состоит из 7 символов, поэтому разделите на7^3
, чтобы получить оценку примерно3.673e+374
источник
Рубин, вероятностно бесконечный, 54 символа
Значение x инициализируется значением 97. Затем мы повторяем следующую процедуру: Генерируем x случайных чисел от 0 до 1. Если они все одинаковые, завершаем работу и печатаем x. В противном случае удвойте x и повторите. Поскольку случайные числа Руби имеют 17 цифр точности, вероятность завершения на любом шаге равна 1 в (10e17) ^ x. Следовательно, вероятность завершения в течение n шагов является суммой для x = 1 - n из (1 / 10e17) ^ (2 ^ n), которая сходится к 1 / 10e34. Это означает, что для любого числа, независимо от его размера, крайне маловероятно, что эта программа выдаст меньшее число.
Теперь, конечно, философский вопрос состоит в том, можно ли когда-либо завершать программу, у которой есть шанс на завершение шага n менее 1 на 10 ^ 34 для любого n. Если мы предполагаем не только бесконечное время и мощность, но и то, что программе дается возможность работать с возрастающей скоростью со скоростью, превышающей скорость, с которой вероятность завершения уменьшается, я полагаю, что на самом деле мы можем сделать вероятность завершение по времени t произвольно близко к 1.
источник
GolfScript, ≈ f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0 (f ε 0) (f ε 0 (f ε 0 (f ε 0 (126))))))))))
Это бесстыдно адаптировано из другого ответа @Howard и включает в себя предложения @Peter Taylor.
Мое понимание GolfScript ограничено, но я считаю, что операторы
*
and^
выше не являются арифметическими операторами, запрещенными OP.(Я с удовольствием удалю это, если @Howard хочет представить свою собственную версию, которая в любом случае, несомненно, будет лучше этой.)
Эта программа вычисляет число , которое примерно е ε 0 (F ε 0 (F ε 0 (F ε 0 (F ε 0 (F ε 0 (F ε 0 (F ε 0 (F ε 0 (126)))))) ))) - девятикратная итерация f ε 0 - где f ε 0 - функция в быстрорастущей иерархии, которая растет примерно с той же скоростью, что и функция Гудштейна. ( е 0растет настолько быстро, что темпы роста n-k-функции Фридмана и k-кратных стрелок Конвея практически незначительны даже по сравнению с одним не повторным f ε 0. )
источник
'',:o;'oo',:t;
просто присваивает значения0
кo
и2
кt
; если это просто для обхода недостатка цифр, то его можно сильно сократить,:o)):t;
, за исключением того, чтоt
в первую очередь нет причин его удалять, потому что вы можете написатьexpr:t;{...}:f;[[[t]f]f]f
как[[[expr:t]{...}:f~]f]f
сохранение еще 3 символов.o
: я уверен, что[0 126]f
он будет больше, чем[126]f
вы, поэтому вы сохраняете символ и увеличиваете результат. Несмотря на то, что вы оставляете там пустую строку, которая, вероятно, ломает вещи: может быть, лучше начать[[,:o'~'=]
[
они не нужны, так как в стеке больше ничего нет.100 символов
Учитывая достаточно времени и память, это вычислит число около 15 ↑ ¹⁶⁶⁶⁶⁶⁵ 15. Я первоначально реализован гипероператором функции, но для этого требуется слишком много символов для этой проблемы, поэтому я снял
n = 2, b = 0
иn >= 3, b = 0
условие, превращаяn = 1, b = 0
состояние вn >= 1, b = 0
.Здесь используются только арифметические операторы: сложение и вычитание.
РЕДАКТИРОВАТЬ: как и обещано в комментариях, вот разбивка того, что делает этот код:
Как уже отмечалось, это отличается от функции гипероперации тем, что базовые сценарии для умножения и выше заменяются базовыми сценариями для сложения. Этот код ведет себя как будто
a*0 = a^0 = a↑0 = a↑↑0 ... = a
вместо математически правильногоa*0 = 0
иa^0 = a↑0 = a↑↑0 ... = 1
. В результате он вычисляет значения, которые немного выше, чем они должны быть, но это не имеет большого значения, так как мы стремимся к большим числам. :)РЕДАКТИРОВАТЬ: я только что заметил, что цифра случайно попала в код в макросе, который выполняет приращение для
n=0
. Я удалил его, заменив его на «F» (15), что имеет побочный эффект масштабирования каждой операции приращения на 15. Я не уверен, насколько это повлияет на конечный результат, но сейчас, вероятно, он намного больше.источник
Нет больше ограничений на время выполнения? Хорошо, тогда.
Нужно ли запускать программу на современных компьютерах?
Оба решения используют 64-битную компиляцию, так что
long
это 64-битное целое число.C: больше 10 (2 64 -1) 2 64 , что само по себе больше 10 10 355393490465494856447 ≈ 10 ↑↑ 4.11820744
88 символов.
Чтобы сделать эти формулы проще, я буду использовать
t = 2^64-1 = 18446744073709551615
.main
будет вызыватьf
с параметромt
, который будетt
время цикла , каждый раз печатая значениеt
, и вызываяf
с параметромt-1
.Всего цифра напечатала:
20 * t
.Каждый из этих вызовов
f
с параметромt-1
будет повторятьt
время, печатая значениеt
и вызывая f с параметромt-2
.Всего напечатанных цифр:
20 * (t + t*t)
Я попробовал эту программу, используя эквивалент 3-битных целых чисел (я установил
i = 8
и имел основной вызовf(7)
). Он ударил по заявлению о печати 6725600 раз. Это работает,7^8 + 7^7 + 7^6 + 7^5 + 7^4 + 7^3 + 7^2 + 7
поэтому, я считаю, что это окончательный счет для полной программы:Всего напечатанных цифр:
20 * (t + t*t + t^3 + ... + t^(t-1) + t^t + t^(2^64))
Я не уверен, как рассчитать (2 64 -1) 2 64 . Это суммирование меньше, чем (2 64 ) 2 64 , и мне нужна степень два, чтобы сделать этот расчет. Поэтому я вычислю (2 64 ) 2 64 -1 . Это меньше, чем реальный результат, но так как это степень двойки, я могу преобразовать ее в степень 10 для сравнения с другими результатами.
Кто-нибудь знает, как выполнить это суммирование или как преобразовать (2 64 -1) 2 64 в 10 n ?
Но помните, это количество напечатанных цифр. Значение целого числа 10 повышается до этой степени, поэтому 10 ^ 10 ^ 355393490465494856447
Эта программа будет иметь глубину стека 2 ^ 64. Это 2 ^ 72 байта памяти только для хранения счетчиков цикла. Это 4 миллиарда терабайт счетчиков циклов. Не говоря уже о других вещах, которые будут идти в стеке для 2 ^ 64 уровней рекурсии.
Редактировать: исправил пару опечаток и использовал более точное значение для log2 (10).
Редактировать 2: Подождите секунду, у меня есть цикл, за пределами которого printf. Давайте это исправим. Добавлена инициализация
i
.Правка 3: Черт возьми, я облажался с предыдущей правкой. Исправлена.
Этот будет работать на современных компьютерах, но не скоро закончится.
C: 10 ^ 10 ^ 136 ≈ 10 ↑↑ 3.329100567
98 персонажей.
Это будет печатать побитовое обратное нуля, 2 ^ 64-1, один раз для каждой итерации. 2 ^ 64-1 - это 20-значное число.
Количество цифр =
20 * (2^64-1)^7
= 145367744859121378054701952902648635982508761548130375074434951398727137800962275710279032227571027903270680672445638775618778303705182042800542187500Округление длины программы до 100 символов, счет = напечатанное число / 1 000 000
Счет = 10 ^ 1453677448591213780547019529026486359825087615481303750744349513987271378009622757102790327075802424638775618778303705182042800542187494
источник
%u
печатал 32-битные числа даже с 64-битной компиляцией, поэтому я простоll
выучился писать 32-битный компилятор.%llu
было быlong long
, и%lu
будет правильным дляlong
.%u
всегда 32-битная,%llu
всегда 64-битная, компилируемая как 32-битная или 64-битная. Однако решение здесь требует, чтобы онlong
был 64-битным, так что вы правы,%lu
достаточно.i
.R -
4941 символов кода, 4.03624169270483442 * 10 ^ 5928 ≈ 10 ↑↑ 2.576681348распечатает [воспроизведение здесь только начало]:
источник
cat
это странно функция в том , что первый аргумент...
. Таким образом, все до первого именованного аргумента отправляется...
(и будетcat
'ed), поэтомуsep
должно быть названо - в противном случае его можно сократить какcat(abs(.Random.seed),,"")
ECMAScript 6 - 10 ^ 3 ↑↑↑↑ 3/884736
(3 ↑↑↑↑ 3 - G (1), где G (64) - число Грэма)
Выход: 10 ^ 3 ↑↑↑↑ 3
подсказки:
Удалено для краткости.G
является функцией, где G (64) является числом Грэма. Ввод является целым числом. Вывод - унарная строка, написанная с 0.K
является функцией Кнута со стрелкой вверх a ↑ n b, где a неявно 3. Входные данные - это n, унарная строка, и b, унарная строка. Выход представляет собой одинарную строку.u
это "1".v
равно "0000" или G (0)e
это "000".источник
Maximum code length is 100 bytes;
В противном случае это почти непобедимоС
(С извинениями перед Дарреном Стоуном)
n = 2 ^ 64-значный номер (9 ...)
L = 100 символов кода
оценка ≈ 1e + 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936570 ≈ 10 ↑↑ 3.2974890744
[Score = n ^ 5 / l ^ 3 = (10 ^ (2 ^ 320) -1) / (100 ^ 3) = (10 ^ 2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576-1) / (10 ^ 6)]
Обратите внимание, что я заслуживаю того, чтобы меня безжалостно пороли за этот ответ, но не удержался. Я не рекомендую вести себя как я на stackexchange по очевидным причинам. :-П
РЕДАКТИРОВАТЬ: было бы еще сложнее противостоять искушению пойти с чем-то вроде
... но я предполагаю, что предполагаемое, но неуказанное правило состояло в том, что весь набор цифр, составляющих число, должен быть напечатан.
источник
)
, но ничего страшного, потому что сейчас у вас всего 96 символов.Новый Рубин: оценка ~ f ω ω2 +1 (126 2 2 126 )
где f α (n) - быстро растущая иерархия.
Попробуйте онлайн!
Это
*n
просто умножение строк и массивов, поэтому они должны быть в порядке.Ungolfed код:
где
b.-b<=>0
возвращает целое число, которое1
ближе к0
чемb
.Объяснение:
Он печатается
n
в начале каждого вызоваH
.H[[]]
двойникиn
(n
раз), то естьn = n<<n
.H[[0,a,b,c,...,z]]
звонкиH[[a,b,c,...,z]]
(n
раз).H[[k+1,a,b,c,...,z]]
звонкиH[[k]*n+[a,b,c,...,z]]
(n
раз), где[k]*n = [k,k,...,k]
.H[[-1,a,b,c,...,z]]
звонкиH[[n]*n+[a,b,c,...,z]]
(n
раз).H[[-(k+1),a,b,c,...,z]]
звонкиH[[-k]*n+[a,b,c,...,z]]
(n
раз).H[k] = H[[k]]
,Моя программа инициализируется
n = 126
, затем вызываетH[-n-1]
126 2 2 126 раз.Примеры:
H[[0]]
позвонит,H[[]]
который применяетсяn = n<<n
(n
раз).H[[0,0]]
позвонюH[[0]]
(n
раз).H[[1]]
позвонюH[[0]*n]
(n
раз).H[[-1]]
позвонюH[[n]*n]
(n
раз).H[[-1,-1]]
позвонюH[[n]*n+[-1]]
(n
раз).H[[-3]]
позвонюH[[-2]*n]
(n
раз).Попробуйте онлайн!
Смотрите редакции для других интересных вещей.
источник
Haskell - функция Аккермана, примененная к его результату 20 раз - 99 символов
Это лучшее решение для haskell, которое я могу придумать на основе функции ackermann - вы можете заметить некоторые сходства с решением nm, отсюда i = round $ log pi, а остальное совпадение: D
Она запускает функцию ackermann сама по себе 20 раз, начиная с одной, последовательность
Что касается оценки, википедия говорит:
a (m, n) = 2 ↑ m-2 (n + 3) - 3
Отсюда видно, что a3 (1) = a (61,61) = 2 59 64 + 3, что явно больше, чем g1 = 3 4 3, если только 3 в начале не намного важнее, чем я думаю. После этого каждый уровень выполняет следующее (отбрасывая незначительные константы в n ):
Если они приблизительно эквивалентны, то a 20 (1) ~ = g 18 . Последний член в a n , (a n-1 ) намного больше, чем 3, поэтому он потенциально выше, чем g 18 . Я посмотрю, смогу ли я выяснить, увеличит ли это хотя бы одну итерацию и доложит.
источник
length"a"
сохраняет пару байтов и позволяет вам другой.a
машинный код x86 - 100 байт (собран в виде файла MSDOS .com)
Примечание: может немного изменить правила
Эта программа выведет 2 (65536 * 8 + 32) девятки, которые поставят счет в (10 2 524320 -1) / 1000000
В качестве счетчика эта программа использует весь стек (64 кБ) плюс два 16-битных регистра
Собранный код:
Монтаж:
источник
С
Размер файла составляет 45 байт.
Программа является:
И полученное число больше 10 ^ (10 ^ (10 ^ 1.305451600608433)).
Файл, на который я перенаправил std out, в настоящее время превышает 16 Гб и продолжает расти.
Программа будет завершена в разумные сроки, если у меня будет лучший компьютер.
Мой счет не вычислим с плавающей запятой двойной точности.
источник
GNU Bash, 10 ^ 40964096² /
80 ^ 3 ≈ 10 ↑↑ 2.072820169C = 4096 в любой разумной системе. SHLVL - это небольшое положительное целое число (обычно 1 или 2 в зависимости от того, является ли / bin / sh bash или нет).
Только 64-битная UNIX:
Оценка: ~ 10 ^ (40964096409640964096 * 40964096409640964096) / 88 ^ 3
источник
bash -c 'bash -c "echo \$SHLVL"'
stat --printf
не работает Попробуйтеstat -c %s
С, 10 ^ 10 ^ 2485766 ≈ 10 ↑↑ 3.805871804
Мы создаем массив из 258048 целых чисел без знака. Это не может быть неподписанным longs, потому что это делает программу слишком длинной. Они не подписаны, потому что я не хочу использовать неопределенное поведение, этот код является правильным C (кроме отсутствия возврата из main ()) и будет компилироваться и запускаться на любой нормальной машине, хотя он будет работать долго , Этот размер является самым большим, который мы можем выразить юридически без использования символов, отличных от ascii.
Мы перебираем массив, начиная с последнего элемента. Мы печатаем цифры
2^32-1
, увеличиваем элемент и сбрасываем цикл, если элемент не обернут в 0. Таким образом, мы будем повторять(2^32 - 1)^254048 = 2^8257536
циклы, печатая 10 цифр каждый раз.Вот пример кода, который показывает принцип в более ограниченном диапазоне данных:
Результат равен примерно 10 ^ 10 ^ 2485766, разделенному на миллион, что по-прежнему примерно 10 ^ 10 ^ 2485766.
источник
Powershell (2,53e107976 / 72³ = 6,78e107970 ≈ 10 ↑↑ 1,701853371)
Это займет гораздо больше, чем 5 секунд, чтобы бежать.
Он извлекает и объединяет длину в байтах каждого файла на вашем текущем диске. Regex удаляет любые нецифровые символы.
источник
0
там.-ea(+'')
чтобы уменьшить размер (''
преобразованный в число0
, значение которого равно enumSilentlyContinue
). Вы можете использовать\D
для замены регулярное выражение, которое совпадает с[^\d]
. И вы можете просто использовать%{$_.Length}
вместоselect Length
которого избавляется от заголовков столбцов. И затем вы можете избавиться от «-split
и»-replace
, оставив вас на-join(gci \ -ea(+'')-r|%{$_.Length})
37 символов короче (я также изменил порядок параметров, потому что скобки нужны в любом случае из-за+''
).Python 3, оценка = подтверждение (126 126) / 100 ^ 3
Функция f - это функция ackermann, которой у меня достаточно места для вызова.
Изменить: ранее "иначе n + 1", который был в нарушение правил вызова - слава просто красивому искусству.
источник
f(m-g,g)
наf(m-g,m)
.f(m-g,i)
. Кроме того, в конце первой строки вы используете номер. Я полагаю, что вы хотели использоватьn+g
, после чего я укажу,n+n
будет больше.JavaScript 98 символов
генерирует 2.718e + 239622337 ≈ 10 ↑↑ 2.9232195202
Для оценки чуть более 2.718e + 239622331 ≈ 10 ↑↑ 2.9232195197
это самое большое, что я могу сделать без сбоя браузера.
(console.log (a) покажет вам полный вывод)
Не запускайте это:
выдаст 2,718 + e121333054704 ≈ 10 ↑↑ 3,0189898069 (он же 2,718 * 10 ^ (1,213 * 10 ^ 12) для сравнения с более длинным ответом:
более экстремальная версия, если она не сломала ваш браузер: (80 символов)
что бы создать число примерно того же размера, что и e * 10 ^ (10 ^ 19) ≈ 10 ↑↑ 3.106786869689
Изменить: обновленный код оригинальное решение только генерируется 2.718e + 464
источник
Python 3: 98 символов, ≈ 10 ↑↑ 256
Используя функцию с переменным аргументом:
По сути, E уменьшает первый аргумент, увеличивая остальные аргументы, за исключением того, что вместо ввода -1 в аргументах он отбрасывает аргумент. Поскольку каждый цикл либо уменьшает первый аргумент, либо уменьшает количество аргументов, это гарантированно завершится. Используется возрастающая функция int ("% d% d"% (k, k)), которая дает результат от k ** 2 + 2 * k до 10 * k ** 2 + k. Мой код использует символ * - но не для умножения. Он используется для работы с переменным числом аргументов, что, я думаю, должно следовать правилам, поскольку ясной целью правил было ограничение конкретных операций, а не самих символов.
Некоторые примеры того, как быстро увеличивается размер E:
Только первые два из них могут быть запущены на моем компьютере в разумные сроки.
Затем E вызывается
E(*range(ord('~')))
- что означает:Я не совсем уверен, насколько он велик (я пытался приблизиться к нему безрезультатно), но очевидно, что он ~ действительно ~ большой.
Например, около двенадцати циклов, результат примерно: (технически немного больше, чем)
Оценка результата:
Если аппроксимировать увеличение шаг за шагом
lambda k: 10 * k**2
, функция может быть описана какСоответствующее, что мы делаем здесь, - это построение башни из десяти сил, поэтому конечный счет может быть приблизительно равен 10 ↑↑ 256.
Лучшая (хотя и частичная) оценка результата:
Это использует то же самое
10 * k**2
как другая оценка.По предыдущей оценке это будет:
Который значительно меньше, чем фактическое значение, поскольку он использует
a**2
вместо2**a
10 и используетa*2
вместо2**a
для б.источник
C (оценка ≈ 10 ^ 20 000 000 000 ≈ 10 ↑↑ 3.005558275)
Несмотря на то,
rand()
что результат является детерминированным, потому что нет функции начального числа.источник
rand()
условия завершения делает ее недетерминированной. Кроме того, вызовrand()
в каждой итерации должен сделать ее очень медленной. Вместо этого используйте что-то вродеLONG_MAX
определенного вlimits.h
.non deterministic
обратно, потому что нет такого семени, как ты написал.~' '
тогоrand()
, чтобы печатать%u
? На два байта меньше исходного и более высокое значение.