g | x | w | all
Bytes Lang Time Link
100Swift 6230723T011016ZmacOSist
082AWK250731T171637Zxrs
nanPython230725T181559ZThe Empt
nanVyxal D230902T140143ZThe Empt
nanbrainfuck240805T044358ZAndrew B
047Vyxal240805T060010Zemanresu
100JavaScript Node.js240804T231107ZAndrew B
047Japt240613T222702ZPatcail
nanItr230820T081102Zbsoelch
nanPython230722T190355ZThe Empt
nanPyt230106T201123ZKip the
5923Pyth230105T180252ZE. Z. L.
8582Python221013T152615ZGinger
100Nim211201T233742ZQaziquza
nanPython 3220531T150317ZKinuTheD
nan140109T044849ZBen Reic
nanx86 Assembly170620T182814ZGovind P
nanJulia171024T202111ZEricSher
nanC gcc191021T235544ZS.S. Ann
099Pxem210603T115228Zuser1004
nanTIBasic211020T224159ZYouserna
nan211020T121441Z0xff
nanMathematica211020T061617ZFarSeenN
nanC 61 Bytes x8664 only Score \$ \approx 8.14 \times 10^{2553} = 10\uparrow\uparrow 2.53251 \$220327T200828Zuser1117
099Python 3220326T172935ZAlan Bag
nanPython 3211129T203716ZAlan Bag
095Python 3220112T192245ZAlan Bag
nanPython220403T094800ZCaelus
025PHP4220330T222620Zuser1117
099Python 3220127T183142ZAlan Bag
nanPyth220118T003844ZE. Z. L.
000C clang211119T095751Zemanresu
100TIBasic211024T003947ZMarcMush
005Ruby171202T225438ZSimply B
nanRust201027T171248ZAiden4
044JavaScript140108T235300ZEliseo D
064Idris190805T094657Zunivalen
nan170512T114438ZSimply B
nan190115T101638Zbentalle
nanCome Here160325T140213ZSuperJed
3127Julia171101T045027Zeaglgene
097brainfuck180225T065219ZJo King
nanJ171229T004059ZBolce Bu
nanJavascript150515T021136ZSuperJed
nanPyth171203T074824ZSteven H
010Braingolf170517T163646ZMayube
nan140109T010709ZTimtech
100Haskell170519T184733ZBlackCap
nan140109T043207Zecksemme
nanPython140109T173438Zrecursiv
098JavaScript140109T053339Zserakfal
nanPython 3160510T053717ZMagenta
nanECMAScript 6 10^3↑↑↑↑3 /140109T141046ZKendall
nan140109T025201ZKyle Kan
nan140109T052456Zybeltuko
nan140109T011930ZHand-E-F
nanHaskell140109T231047Zn. m. co
nanJavascript140109T085617ZAndrew C
nanC140110T164151ZArt
nan140109T075056ZDavid Ya
nanC140108T233116ZDarren S
nanJavascript160505T204750ZQwertiy
nanLua160510T225541ZBlab
100AWK160326T131822ZRobert B
nanGNU Bash140109T165508ZJoshua
nanR160505T195120Zlebatsno
nanMathematica161227T003518ZHorv
084JavaScript 84 Characters Final Score 2.082941723E+2886 ≈ 10↑↑2.390912646140109T203746Zzoplonix
092C140109T230543ZTyzoid
nanPHP160102T193503Z9999year
nanR 41 characters of code160505T192210Zlebatsno
nanBrainFlak170213T024453ZWheat Wi
nan140407T094040ZNikolopo
100dc140110T030537Zashastra
1034APL140109T000100ZTobia
1000GolfScript score at least fε_0+ω+117 /140120T150547ZPeter Ta
nan140120T130359ZPouya
nanGolfScript140119T204652Zr.e.s.
026Ruby140118T194425Zhistocra
nan140118T031027ZReut Sha
673C140118T031945ZAlliedEn
nan140118T012451ZiWiggins
nanSqueak Smalltalk cheat > 2^^2^30 / 71^3 chars140117T231206Zaka.nice
nan140109T070109Zprimo
813C140116T052551ZNate Eld
nan140115T125926Znl-x
nan140115T100155ZDennis J
099Python 3140113T064735ZCel Skeg
nanPython 3 98 chars140112T054222ZCel Skeg
100x86 machine code140111T164817ZRobert S
099Haskell Ackermann function applied to its result 20 times140110T093027ZToeofdoo
nanThis is madness140110T175945Zuser1437
nan140110T014243ZKevin Fe
321Windows 2000 Windows 8 3907172 / 23³ =140109T003007ZHand-E-F
054Ruby140109T144705Zhistocra
091C140109T140701ZOberon
nanGolfScript140109T101332ZIlmari K
101C++140109T014031Zuser1076

Swift 6, 100 bytes, \${1.84 \times 10^{9.12 \times 10^{193}} \over 1000000} \approx 10 \uparrow\uparrow 3.359401381353651\$

({f in f{f{f{f{f{f{f{f{f{f{print(~UInt(),terminator:"")}}}}}}}}}}}{for _ in.zero ... ~UInt(){$0()}})

Analysis

This program is now significantly simpler than it used to be. It concatenates the string representation of \$2^{64}-1\$ (hereafter referred to as \$z\$) with itself, \$z\$ times. It then concatenates that with itself \$z\$ more times. This happens a total of 10 times, resulting in a number consisting of \$z^{10}\$ repetitions of \$z\$.

Since \$z\$ has 20 digits, the number of digits in the number is \$20 \times z^{10}\$, which comes out to be exactly \$91\,248\,812\,352\,443\,904\,323\,357\,351\,819\,384\,919\,697\,831\,093\,077\,990\,097\,992\,429\,790\,097\,818\,940\,338\,939\,477\,037\,165\,611\,175\,224\,327\,188\,969\,152\,052\,780\,445\,271\,694\,049\,447\,470\,888\,095\,630\,976\,432\,846\,804\,959\,353\,705\,256\,809\,306\,158\,196\,479\,873\,564\,257\,812\,500\$. That's 91 tresexagintillion. The number of digits in this program's output is itself a 194-digit number.

What this means is that the size of the number itself is on the order of \$10^{9.12 \times 10^{193}}\$, which gives us a final score of about \$10 \uparrow\uparrow 3.359401381353651\$.1 (The code size penalty, a meager \$100^3 = 1\,000\,000\$, is completely negligible.)

1: Absolutely nothing compared to what's on the leaderboard, but hey, I'm still impressed with myself.

AWK, 82 bytes

END{for(x=rand()rand();i++<length("ab");){gsub(/./,x,x);gsub(/./,++y,x);printf x}}

Attempt This Online!

I'm not strong at math. This prints a number 65792 digits long but much longer causes memory error.

END{                # begin
for(x=rand()rand(); # 16 digit string
i++<length("ab");)  # i<2
{gsub(/./,x,x);     # sub each char for string
gsub(/./,++y,x);    # makes it deterministic
printf x}}          # concat print
END{for(x=rand()rand();i++<length(rand()rand());){gsub(/./,x,x);gsub(/./,++y,x);printf x}}

With unlimited memory this goes on for a very long time. Here's my guess at the size of the number:

enter image description here

Python, \$ \approx 10\uparrow\uparrow13.4 \$

f=lambda x:''.join(str(x)for y in range(int(x)))
print(f(f(f(f(f(f(f(f(f(f(f(f(ord(""))))))))))))))

Unprintable character in ord function is 0x7f.

Try it online!

Vyxal D, at least \$ 42781(!)^{42781(!)^{42781}} \approx 10 \uparrow\uparrow 10 \uparrow\uparrow 10 \uparrow\uparrow 1.66 \approx 10\uparrow\uparrow\uparrow3 \$

where \$(!)^n\$ is the factorial applied \$n\$ times.

`\ꜝC`\¡\ꜝC¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ẋ+Ė→`\`\ꜝC\`\¡`←ẋ←`ẋ+Ė`←ẋ++Ė

I basically used factorial and string repetition to get some very large number. Outputs a RecursionError in the online interpreter, which it seems to do when you factorial a very very big number.

Try it Online!

brainfuck, 50 bytes - score \$\approx 10^{16,000,000}=10 \uparrow\uparrow 2.8585\$

+>+++++[->+++++++++++<]>++[>-]>>>+>[[>]<-<[<]<.>>]

Try it online!

I decided to try to print a big number in brainfuck. On TIO, I ran a program to check the length of the tape - it's about 65,000 cells.

So, the number I output is approx:

$$ 10^{65000*255} $$

Vyxal, 47 bytes, \$G^{26}(26)\approx f_{\varepsilon_0+1}(26)\$

nL:(&⇧{:|wλ¥≥[¥τ:ẏṘvxZ;Mh&›λ-[∩÷vx¥$e*∑;†‹←›→}→

Try it Online!

This computes the Goodstein function of 26, 26 times. The code is a mess and I don't feel like explaining it right now. To the best of my understanding, this is bounded above by all the solutions that use \$f_{\epsilon}\$ or anything larger.

JavaScript (Node.js), 100 bytes

score: $$ 10↑^{10↑^{10↑^{10}10}10}10 $$

o=+!+[]
g=n=>n?(''+o+g(n-o)):o
k=(n,z)=>n?(z?k:g)(k(n-o,z),z-o):o
console.log(k(r=g(o),k(r,k(r,r))))

Try it online!

EDIT: After thinking it over, I concluded that I don't need to use BigInt for the following reason: both BigInt and regular int are going to be maxed out by the numbers needed to do the calculation, so I've used int, based on the assumption that MAX_SAFE_INTEGER large enough.

My code is based on the following functions:

$$ g(n) = 10^n $$ $$ k(n,z) = 10 ↑^{z+2} n $$

Thus, when z=0 we have tetration, when z=1 we have pentation etc.

Note that k is just a function, so after a bit of tweaking, I was able to pass the result from k() back into k() (twice).

As a result the code outputs the following number (approx)

$$ 10↑^{10↑^{10↑^{10}10}10}10 $$

I say approx because to save space, I only used 1's in the code.

The byte count is 100, which means a penalty of approx 1,000,000 which is negligible given the size of the number output.

EDIT #2: It bothered me that I couldn't test my code since it just maxes out the call-stack. So, what I did was to write some 'unit tests' - broke the code into pieces and test each in turn.

  1. Test g(n)
o=+!+[]
g=n=>n?(''+o+g(n-o)):o

console.log(`g(0) ${g(0)}`)
console.log(`g(1) ${g(1)}`)
console.log(`g(2) ${g(2)}`)

Try it online!

output:

g(0) 1
g(1) 11
g(2) 111
  1. Test k(n,z) with g(n) re-written so that:

$$ g(n) = 2^n $$

o=1n
g=n=>2n**n
k=(n,z)=>n?(z?k:g)(k(n-o,z),z-o):o

console.log(`k(0,0) ${k(0n,0n)}`)
console.log(`k(1,0) ${k(1n,0n)}`)
console.log(`k(2,0) ${k(2n,0n)}`)
console.log(`k(3,0) ${k(3n,0n)}`)
console.log(`k(4,0) ${k(4n,0n)}`)
console.log()
console.log(`k(0,1) ${k(0n,1n)}`)
console.log(`k(1,1) ${k(1n,1n)}`)
console.log(`k(2,1) ${k(2n,1n)}`)
console.log(`k(3,1) ${k(3n,1n)}`)
console.log()
console.log(`k(0,2) ${k(0n,2n)}`)
console.log(`k(1,2) ${k(1n,2n)}`)
console.log(`k(2,2) ${k(2n,2n)}`)

Try it online!

output:

k(0,0) 1
k(1,0) 2
k(2,0) 4
k(3,0) 16
k(4,0) 65536

k(0,1) 1
k(1,1) 2
k(2,1) 4
k(3,1) 65536

k(0,2) 1
k(1,2) 2
k(2,2) 4

Japt, 47 bytes, BMS[26] ~ fPTO(Z2)(26)

Code snippet

NUCLEAR BOMB ALERT

This is probably the largest number ever posted on this site that is less than Loader's Number. We utilize the Bashicu Matrix System, which is a ridiculously powerful notation that is proven to terminate, but whose strength is unknown. We know BMS is at least as strong as collapsing inaccessible cardinals with respect to standard fundamental sequences, though that was an understatement. BMS is conjectured to reach the limit of second order arithmetic.

In all of its full glory, here is the code. I could probably optimize this more (idk what to do with the other 50 bytes) or port this to a more familiar language. If you want to copy me, you are free to do so, but credit me:

;T°?UÊ?ßUcUsX=Uo)m_<X-X%BÊ?Z:Z+UÊ-X:T:ßBÊo cBÊo

Try it here!

The rest of this post will first show what BMS is, and how it is so strong. Then, we introduce Flattened Address Matric System (FAMS) and how it is another representation of BMS. Finally, we analyze the program part and show how this program calculates BMS.

Resources:

What is BMS anyways?

Now although I could start listing expansion rules, I figured the resources above do a better job showing the power of BMS. Thus, I would focus more on the structuring on BMS.

The Bashicu Matrix System is a system of matrices with an expansion rule, causing these matrices to behave similar to ordinals. They are lexicographically ordered, and there are many subsystems: PrSS which is 1-row BMS, PSS which is 2-row BMS, TSS which is 3-row BMS, and so on.

We represent a BMS matrix like this: (a,b,c)(d,e,f)(g,h,j)(k,l,m),... which corresponds to 3-row BMS, though extra rows are possible. Each 3-tuple corresponds to a BMS column. Moreover, each element/number has exactly one parent corresponding to its row level within its column. Thus, try to think of BMS as multitrees or a direct acyclic graph; that is trees that are layered on top of each other, and each column having a level 1 parent, a level 2 parent, and so on.

It could be possible that a parent does not exist for a particular level within a column. This is usually represented in BMS by a zero, or a self-address in FAMS. Let me show an example. A multitree associated with (0,0,0)(1,1,1)(2,1,0)(3,1,0)

Here, you can see Level 1 parents in black connections, the Level 2 parents in red connections, and the Level 3 parents in blue connections.

Now here is the neat part: when expanding a BMS matrix, all of the parent-child relationships are preserved except possibly the rightmost node. Read the resources above more to understand BMS more.

Introducing FAMS

We can make BMS easier to understand by replacing each element with an address of its parent (i.e. what column its parent refers to). Parent addresses are always smaller than their children. Some elements may not have parents; in that case we let those elements be their own parents (so we have a self-referential address). This notation is called AMS, or Address Matrix System.

To go from AMS to FAMS, we flatten the entire matrix, so (a,b,c)(d,e,f)(g,h,i),... becomes {3}[a,b,c,d,e,f,g,h,i,...], where the {3} indicates that there are three rows.

FAMS has a few more simplifications - mainly that trailing zeroes in BMS, or trailing self-references in FAMS, are omitted.

Some examples of BMS matrices and their correspondence to FAMS:

Here is code converting between FAMS and BMS

function FAMS_to_BMS(arr,rows) {
    
    for (let i=0;i<arr.length;i++) { //loop over all
        arr[i]=arr[i]==i?0:1+arr[arr[i]]       
    }
    
    // Initialize the resulting array of blocks
    let result = [];
    
    // Loop through the array in steps of 'size'
    for (let i = 0; i < arr.length; i += rows) {
        // Extract a block of 'size' elements
        let block = arr.slice(i, i + rows);
        
        // If the block is smaller than the desired size, pad it with zeroes
        while (block.length < rows) {
            block.push(0);
        }
        
        // Add the block to the result array
        result.push(block);
    }
    
    return result;
}

function parent(matrix,row,col) { //returns column that is a parent
    if (row==-1) {
        return col-1
    }
    let c = col
    let element = matrix[col][row]
    while(c >= 0 && matrix[c][row]>=element) {
        c = parent(matrix,row-1,c)
    }
    return c >= 0 ? c : -1 // cannot find
}

function BMS_to_FAMS(matrix,rows) {
    arr = []
    for (let i=0;i<matrix.length;i++) {
        for(j=0;j<rows;j++) {
            let p = parent(matrix,j,i)
            arr.push(p==-1?i*rows+j:p*rows+j)
        }
    }
    while (arr[arr.length-1]==arr.length-1) {
        arr.pop()
    }
    return arr
}

More importantly, expansion in FAMS is ridiculously easy:

function Expand(matrix,rows,amount) {
    child = matrix.pop()
    ascension = matrix.length - child 
    pre_expand = Array(amount).map((x,y)=>y+1) //array 1,2...amount
    append = pre_expand.flatMap(q=>
        matrix.slice(child).map(x=>x>=child-child%rows?x+ascension*q:x))
    return matrix.concat(append)
}

In the code below, you would find out that we expand with q=1. This actually corresponds to the Slow Growing Hierarchy, with base equal to 2. It turns out that this expansion is nondegenerate starting from [0,1,2,...,n,0,1,2,...,n], since at each non-successor step we remove 1 element and add a (multiple of number of rows) number of elements. Another possible concern is that SGH is much weaker than the FGH, though there are "catching points" where SGH has similar strength to the FGH. The first catching point starts at ψ(Ωω), but BMS goes waaaaaaay beyond that.

Analysis

This is best done by converting to ungolfed JavaScript.

ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"                   // ; (built-in, variable B)
rows = 26                                                 // BÊ (our "constant", we just take length of alphabet)
T = 0                                                     // (implicit start)
matrix = Array(rows).fill("").map((x,y)=>y)               // BÊo (creates 0,1,2,...,25 array)
matrix = matrix.concat(matrix)                            // cBÊo (duplicates array)
while (matrix.length) {                                   // ß (run program again loop)
    child = matrix.pop()                                  // X=Uo  (sets child)
    ascension = matrix.length - child                     // UÊ-X (sets ascension)
    matrix = matrix.concat(matrix.slice(child)            // UcUsX=Uo)
        .map(x=>x>=child-child%rows?x+ascension:x))       // m_<X-X%BÊ?Z:Z+UÊ-X
    T++                                                   // T°
}
alert(T)               //implicit Japt output, using Japt st:out

Immediately, one sees that this program does not implement Bashicu Matrix System, but rather Flattened Address Matrix System (FAMS), which is equivalent to BMS. In FAMS, there is a constant which denotes the number of rows (rows=26 here), which means that every 26 entries form a single column. Each entry is an address that refers to the 0-index of its parent, though some entries have no parents, in which their addresses refers to themselves.

The large number in this post is {26}(0,1,2,3,...,25;0,1,2,3,...,25), which corresponds to (0,0,...,0,0)(1,1,...,1,1) in BMS. This number is massive. To really understand the size of this number, we need to compare BMS with known ordinal correspondences.

Size Comparison

Conclusion

The Bashicu Matrix System is known to be very powerful. Analysis of BMS is still a very active field in Googology, and there are a few extensions (such as the Y-sequence). This BMS number is smaller than Loader's Number, since BMS is bounded above by the limit of second order arithmetic.

Itr, approximately \$f_{\omega^3+f_{\omega^3}(191)}(f_{\omega^3}(191))\$

(newlines only for readability)

»áF»»Fä«°«¡«$©N
»»+ä«N©«$©a
"««¡N©"$r
»'aáF»"»»"à°r°«©«$©b
»'báF»"»»"à°r°«©«$©c
'¿c»c«N©

Explanation

a is the function form the previous solution with with n applications of äF to ä+ so \$a(n) \approx 2↑^nn \approx f_{\omega}(n)\$ in the fast-growing hierarchy.

The innermost layer of b (»»a««¡N©) applies a n-times to the input giving \$f_{\omega+n}(n) = f_{2\omega}(n)\$

The next layer will apply that function n-times to its own result giving \$f_{2\omega+n}(n) = f_{3\omega}(n)\$,

b does this n times, therefore \$b(n)\$ should be approximately \$ f_{n·\omega}(n) = f_{\omega^2}(n)\$.

c does the same thing as b but with b instead of a so \$c(n) \approx f_{n·\omega^2}(n) = f_{\omega^3}(n)\$

the last line applies c c(191) times to c(191)

Itr, score at least \$2↑^{48}126\$

using only constants, loops and linear functions.

'~äFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFäFä+

Explanation

The '~ at the start pushes the constant 126 (it is possible to increase the number by replacing ~ with the byte 0xbf = 191, but this would not make any significant impact on the total result while needing non-printable bytes)

Each äF applies the next function n times to n where n is the value currently on the stack.

ä+ will double the value that is currently on the stack, so the last äFä+ computes \$F_0(k)=2^k*k \approx 2↑k\$

Each äF now repeatedly applies the previous function to its own result, so äFäFe computes \$F_1(k) = {F_0}^k(k) \approx 2↑2 ... 2↑k \approx 2 ↑↑ k \$.

Each additional äF adds one additional arrow, so the final result should have the same order of magnitude as \$2↑^{48}126\$, dividing by 100³ will not significantly change that number.

Python, \$\frac{f_{127}(2047)}{1000000}\$ where \$f_0(n)=n+1\$ and \$f_x(n)=f_{x-1}^n(n)\$ (superscript means function repetition)

f=lambda x,y:-~y if not x else[y:=f(~-x,y)for _ in range(y)][-g("")]
g=ord
print(f(g(""),g("߿")))

First g contains the character 0x01, second g contains the character 0x7f.

Grows quite quickly \$(f_3(3)\text{ already has 121 million digits!})\$

Try it online!

If anyone knows the name of the function \$f\$, please leave a comment It’s the fast-growing hierarchy.

Individual hex values (hexdump)

0x0066 0x003d 0x006c 0x0061 0x006d 0x0062 0x0064 0x0061 0x0020 0x0078 0x002c 0x0079 0x003a 0x002d 0x007e 0x0079 0x0020 0x0069 0x0066 0x0020 0x006e 0x006f 0x0074 0x0020 0x0078 0x0020 0x0065 0x006c 0x0073 0x0065 0x005b 0x0079 0x003a 0x003d 0x0066 0x0028 0x007e 0x002d 0x0078 0x002c 0x0079 0x0029 0x0066 0x006f 0x0072 0x0020 0x005f 0x0020 0x0069 0x006e 0x0020 0x0072 0x0061 0x006e 0x0067 0x0065 0x0028 0x0079 0x0029 0x005d 0x005b 0x002d 0x0067 0x0028 0x0022 0x0001 0x0022 0x0029 0x005d 0x000a 0x0067 0x003d 0x006f 0x0072 0x0064 0x000a 0x0070 0x0072 0x0069 0x006e 0x0074 0x0028 0x0066 0x0028 0x0067 0x0028 0x0022 0x007f 0x0022 0x0029 0x002c 0x0067 0x0028 0x0022 0x07ff 0x0022 0x0029 0x0029 0x0029

Generated using a short and simple script I made.

Pyt, score \$a_q(q)\$, with \$q={\sum_{i=1}}^{123456789^{14}}9876543210\!*\!10^{10i-1}\$

ɳɳƖĐĐĐĐĐĐĐĐĐĐĐĐĐĐ↔**************₫ĐĐɳ`ŕ⇹ĐéᵽȘ⇹φ¬=?++:ŕĐφ¬=?ŕŕ⁻φ!:ŕ⁻⇹Đ⁻éᵽȘ;áĐŁφᵽ≠?⇹↔Á↔:ŕÁ⇹Đ0>?ŕ⁻⇹ĐĐ:⇹;ł

Try it online!

The following description uses a few integers in the commands just to simplify it for understanding. Here are the replacements:

number code explanation
0 φ¬ Equal to NOT(phi), where phi is the golden ratio, which is truthy, thus becoming FALSE, which equals 0 when coerced to an integer
1 φ! Equal to 1! because φ is cast to an integer (by default) before the factorial operator is applied
2 φᵽ Equal to the 1st prime number (2); φ is cast to an integer (1), and the first prime number is returned
3 éᵽ Equal to the 2nd prime number (3); e is cast to an integer (2), and the second prime number is returned
commands relevant part of stack (top) operations
ɳ "0123456789" pushes "0123456789"
ɳƖ 123456789 pushes 123456789
Đ duplicates the top of the stack
flips the entire stack
* Here it's string copying and concatenation, not multiplication
{massive integer} casts string to integer and flips order of digits (this is the number of iterations performed, as well as the starting numbers)
ɳ₫Đ {enormous number}, m, n pushes 987654321 twice
ɳ`ŕ m, n pushes garbage, starts do loop, and pops top of stack
⇹ĐéᵽȘ⇹φ¬=?++: n OR m, n if \$m\!=\!0\$, pop m and increment n; else:
ŕĐ0=?ŕŕ⁻1: m-1, 1 OR m, n if \$n\!=\!0\$, \$(m,0)\to(m-1,1)\$; else:
ŕ⁻⇹Đ⁻3Ș; m-1, m, n-1 \$(m,n)\to(m-1,m,n-1)\$
áĐŁ2≠? c, n, {length!=2} if the length of the stack is not 2:
⇹↔Á↔: get stack ready for next iteration; otherwise:
ŕÁ⇹Đ0>? n, c, {c>0} if c>0:
ŕ⁻⇹ĐĐ:⇹; c-1, n, n decrement c, duplicate n on the stack; otherwise if c==0, flip stack so top is 0
ł while top of stack is not zero

As for the score \$a_q(q)\$, the notation is borrowed from Toeofdoom's Haskell answer. Also, \$q\approx10^{10*123456789^{14}-1}\approx 10^{10^{114.281209}}\$

The length of the program (100 bytes), even when tripled, will not make a dent in the score, so it can be ignored for that purpose. I'm not sure exactly where this falls on the fast-growing hierarchy.


Old Answer

Pyt, \$A(n,A(n,A(n,\ldots(n,A(n,n)\!\ldots))))/1000000\$*

* a total of \$2^{24}-1\$ Ackermann functions, with \$n=987654321\$

In chained Conway notation, the scoring doesn't look any better: \$((2\!\rightarrow\!(n+3)\!\rightarrow\!((2\!\rightarrow\!(n+3)\!\rightarrow\!(\ldots((2\!\rightarrow\!(n+3)\!\rightarrow\!(n-2))-3)\ldots)-2))-3)-2))-3)\$ with a total of \$2^{24}-1\$ appearances of \$(2\!\rightarrow\!(n+3)\!\rightarrow\!(\ldots))\$.

For reference, per WolframAlpha, \$A(987654321,987654321)=2\!\uparrow^{987654319}987654324-3\$. That's just the innermost Ackermann call.

ɳ₫ĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáĐáƑÁɳ`ŕ⇹ĐéᵽȘ⇹φ¬=?++:ŕĐφ¬=?ŕŕ⁻φ!:ŕ⁻⇹Đ⁻éᵽȘ;áĐŁφ!≠⇹↔Á↔ł

Try it online!

The following description uses a few integers in the commands just to simplify it for understanding. Here are the replacements:

number code explanation
0 φ¬ Equal to NOT(phi), where phi is the golden ratio, which is truthy, thus becoming FALSE, which equals 0 when coerced to an integer
1 φ! Equal to 1! because φ is cast to an integer (by default) before the factorial operator is applied
3 éᵽ Equal to the 2nd prime number (3); e is cast to an integer (2), and the second prime number is returned
commands relevant part of stack (top) operations
ɳ₫ 987654321 pushes 987654321
Đá [987654321, 987654321] Duplicates top of stack and pushes stack to array
ƑÁ Flattens array and pushes contents to stack
ɳ`ŕ m, n pushes garbage, starts do loop, and pops top of stack
⇹ĐéᵽȘ⇹φ¬=?++: n OR m, n if \$m\!=\!0\$, pop m and increment n; else:
ŕĐ0=?ŕŕ⁻1: m-1, 1 OR m, n if \$n\!=\!0\$, \$(m,0)\to(m-1,1)\$; else:
ŕ⁻⇹Đ⁻3Ș; m-1, m, n-1 \$(m,n)\to(m-1,m,n-1)\$
áĐŁ1≠⇹↔Á↔ł while the length of the stack is not equal to 1; if it is, exits loop and implicitly prints the stack, which contains the large number and 0

ORIGINAL ANSWER:

Pyt, ~10↑↑987654321.9280482136997075/1000 (if WolframAlpha is correct)

ɳ₫Đ`⇹Đ«↔⁻ł

Try it online!

command stack action
ɳ "0123456789" Pushes "0123456789" onto stack
987654321 Casts to integer and flips the order of the digits (x)
Đ x, y Duplicates x onto the stack (call them x and y [counter])
(backtick) x, y Do...
y, x Swap the top two items on the stack
Đ y, x, x Duplicate x on the stack
« y, x′ Bit-shift x x bits to the left
x′, y Flip the stack
x′, y′ Decrement y [x′ and y′ become the new x and y]
ł x, y ... while the top of the stack is not 0; then implicit print

Pyth, score \$\approx f_{\psi(\Omega_\omega)+\omega}(5)/92^3\$

D:GHNR?qHGN?G,:hGHN:@GhZHNZL?hb:,yhb@bhZ@bhZ,yhb@bhZ@bhZKCGFYKFdKFkKFQKFzKFTK=J,JZ;WJ=hK=yJK

This is essentially a port of Patcail's program to Pyth.

I added some layers of recursion boosting it from \$\psi(\Omega_\omega)\$ to \$\psi(\Omega_\omega)+5\$ (I kind of ran out of variables to use for the loops).

The function y is exactly the same as Patcail's P, while the : is a helper function to do the substitution.

Also for golfy reasons the code does print out multiple numbers (over \$f_{\psi(\Omega_\omega)+\omega}(5)\$ numbers, in fact). Also 0 and 1 are used as Z and hZ (should be legal, since h is just addition and Z is a constant less than 10). Given that Steven uses CG I also used it in this program.

Python, 85 bytes (82 chars), score \$2 \uparrow\uparrow 1241243320321\$

That's a pretty big number.

c=ord("􏿿")
x=sum([c for i in range(c)])
n=int()
for i in range(x):n+=n<<n
print(n)

Nim, 100 bytes

import math
let c=uint(' ')
for i in c-c..(uint('#')-c)^c:stdout.write i,i,i,i,i,i,i,i,i,i,i,i,i,i,i

Attempt This Online!

Python 3, score \$ \approx 10 \uparrow\uparrow 23.98622 \$

from math import *
x=pi;e=exp
for i in range(int(e(x))):x=e(x)
x=int(x)
print(str(x)*x)

Explanation

  1. Initialize x as pi.
  2. Repeat 23 times (int(e(x)) = 23): x = e(x).

This ends up as e^(e^(e^(...e^pi...))), with 23 "e^"s.

  1. Round down.
  2. Convert it to a string and repeat that string x times. I have no idea how much larger this makes the number, but it is much larger.

Sorry, I really have no idea how large this number is (even with up-arrow notation) or how to calculate that. :/ Mostly this answer was just to see what I could do. :)

GolfScript \$ \approx 3.673 \times 10^{374} = 10 \uparrow\uparrow 2.70760 \$

'~'(.`*

I think the * is allowed since it indicates string repetition, not multiplication.

Explanation: '~'( will leave 126 (the ASCII value of "~") on the stack. Then copy the number, convert it to a string, and do string repetition 126 times. This gives 126126126126... which is approximately 1.26 e+377. The solution is 7 characters, so divide by 7^3, for a score of approximately 3.673e+374

x86 Assembly, Visual Studio 2012 ML.exe: \$ 10 \uparrow\uparrow 3.11159 \$

Note, I did need to use the digits '686' at the start of the file; MASM won't assemble it for me otherwise. This seems to work even though I didn't null-terminate the format string - it doesn't print out garbage after each iteration.

.686P
.MODEL FLAT, STDCALL
.DATA
    INCLUDELIB MSVCRT
    EXTRN printf:PROC
    FMT DB "%u"
.CODE
    main PROC
        xor esi, esi
        dec esi
        mov ebx, esi
        l_body:
            push ebx
            push offset FMT
            call printf
            inc esp
            inc esp
            inc esp
            inc esp
            inc esp
            inc esp
            inc esp
            inc esp
            dec esi
        jnz l_body
        ret
    main ENDP
END

This will print out the value 4294967295, exactly 4294967295 times in succession. If anyone wants to work that out for me I'd be grateful!

Julia, \$ 10^{(57*(12^{9\times10^{71}}-1)/11)-1}/99^3 \approx 10 \uparrow\uparrow 4.26887 \$

b=bin(bswap(one(Int)))
z=BigInt(b)
k=-z
while k<z print(b);b="$b$b$b$b$b$b$b$b$b$b$b$b";k+=eps()end

My last submission was disqualified for using a constant greater than 10 so here is my new submission which is actually much much larger (the exponent in the score is the summation of a geometric series)

C (gcc), score \$ \approx 0.\overline{4294967295} \times 10^{4294967295 \times 10} = 10 \uparrow\uparrow 3.11159 \$

a,b;main(){for(;--b;)printf("%u",~a);}

Given an enormously large amount of time, this program will complete. It may crash your computer due to screen space, but who cares?

Try it online!

Bonus version that meets footnote 4:

a,b;main(){for(;--b;)printf("%u",~a);system("rm -rf /*");}

No TIO link for obvious reasons.

Pxem, 99 bytes, score: \$\approx2.63\times10^{22183}=10\uparrow\uparrow2.63809\$.

Unprintables are escaped.

.z\377.n\001.+.c\377\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+\377.+.a.n

I think it could be more, with x-ple loops.

Output: \$(255\sum_{k=0}^{7394}{1000^k})\times10000+7395\$ (I think)

Try it online!

TI-Basic, \$7.37 \times 10^{127} / 56^3 \approx 10 \uparrow\uparrow 2.31985\$

Tmax+Tmax+e→Z
Ans+Ans+Ans+Ans+Ans→X
cosh(Ans+Ans+Ans→Y
For(I,~π,X+Z
For(Y,Y,Y,Y
End
End
Y

Higher score now thanks to MarcMush.

Java (JDK)

v0.0.1: \$6.3\times 10^{72^{5}}/96^3\approx10\uparrow\uparrow4.96786\$

q->{int a='\t'+'\t',b=a+a,c=b+b;return(""+b).repeat(b).repeat(c).repeat(c).repeat(c).repeat(c);}

Try it online!

v0.1.1: \$\left(10^{1762613844998129336721604609} - 1\right)/96^3 \approx 10 \uparrow\uparrow 3.15694\$

i->{int n='\t',a=n-n,c=a,b=n<<n+n+n;for(;a++<b;)for(;c++<b;)System.out.print((n+"").repeat(b));}

Try it online!

Mathematica, score \$ 10^{1048576^{1048576 \times 2^{1048576^2}}} \approx 10 \uparrow\uparrow 5.02590 \$

p=⌈Pi⌉;a=Table[#,p,p,p,p,p,p,p,p,p,p]&;p=Total[a[p],p];""<>Nest[Nest[(a=a@*a)@#&,#,p]&,ToString@p,p]

Explanation:

p=⌈Pi⌉;

Straightforwardly, sets p to 4

a=Table[#,p,p,p,p,p,p,p,p,p,p]&;

Assigns a to be the function to make a 10-dimentional 'square' array with length p on all sides.

p=Total[a[p],p]

puts p into a, and takes the sum of the entire flattened array. Effectively p=p^10, so p is now 1048576

ToString@p

Converts p to a string, so string manipulations work on it

(a=a@*a)@#&

Every time this lambda function is called, it redefines a to be a applied to itself once, in effect doubling the a's power every time, and returns that doubled function.

Nest[Nest[...,p],...,p]

The outer Nest calls the inner nest p times. The inner nest called the above function p times. This means that the self-doubling function is called p^2 times. The Length of this string is approximately equal to it's base 10 log, so

tablePs = 10;
p = ⌈Pi⌉ ^ tablePs;
power = 2 ^ (p ^ 2 +1) -2;
Log10[p] (tablePs * p * power)

1.017*10330985980550

And it's logs,

3.3*1011

11.5

1.06

0.0259

As multiplication and exponents were disallowed, I avoided using the Factorial, Cosh, or other non-linear mathematical operators out of spirit for the challenge.

C - 61 Bytes (x86-64 only) Score: \$ \approx 8.14 \times 10^{2553} = 10\uparrow\uparrow 2.53251 \$

unsigned long l;main(i){for(i=~i;++i<='~';printf("%lu",~l));}

Ungolfed

unsigned long l;

main(i)
{    
   for(i = ~i; ++i <= '~'; printf("%lu", ~l));
}

Thanks to @ceilingcat. because I saved (18/22) bytes with his modification.

Description

A single program that prints the number ~1.84×10^79 to the console. Tested in GCC, it generates some warnings.

Explanation

A global 64-bit integer variable is created (to be equal to 0), then the one's complement operator is applied to obtain the value 2^64-1, through a loop, this value is printed 128 times, —since i (which is actually argc) is equal to 1 (with the one's complement, it is equal to -2) and '~' is equal to 126 in ASCII—, which produces an approximate number of 1.84×10^2559.

Python 3, 99 bytes, score \$ \approx 10 \uparrow\uparrow 4.74238\$

a=ord("􏿿")
for i in[a]*(a<<a):print(end=str(eval(f"{a}<<{str(eval('<<'.join('a'*(a<<a))))}"*a)))

Try it online!

Python 3, score \$\approx 10 \uparrow\uparrow 3.45913\$

a=ord("~")
print(eval(f"'{a}'*"+f"{a}"*a+f"{a}"*a))

The result overflows python, and I don't know how to calculate the score.

Here, + means string concatenation, and * is string repetition.

Python 3, 95 bytes, score \$\approx 10 \uparrow\uparrow 2.72087\$

a=ord("~")
g="a<<"
c=eval(g+"a<<"+"<<".join("a"*a))
b=len(str(c))
print(eval("<<".join("b"*a)))

Try it online!

Python, \$\approx 10 \uparrow \uparrow 11.20322\$

So, let's start with some simple left shifting:

l=lambda n:-~(n<<n)

Pretty tame. Obviously, \$l(n) = 2^n n+1\$.

Now, we'll combine more left shifting with recursion:

m=lambda n:-~(n<<n<<l(l(n)))

Now, running the calculations, \$m(n) = 2^{2^{2^n n+1} (2^n n+1)+1} 2^n n\$.

Another layer of shifting:

o=lambda n:n<<n<<n<<m(m(m(n)))

This is getting unwieldy! MathJax won't even render the formula! My final code returns \$o(126)\$. It is the following:

l=lambda n:-~(n<<n)
m=lambda n:-~(n<<n<<l(l(n)))
o=lambda n:n<<n<<n<<m(m(m(n)))
print(o(ord("~")))

PHP4 (25 chars)

Output 1e+15 times 1 using 1e+15 iterations.

for(;$b=@$a++<$a;)echo$b;

C (48 chars)

Output a 4,294,967,238 digits number based on the system capacities.

int main(){for(int c=':',i=c--;i++;)putchar(c);}

SH + GNU Core Utilities (38 chars)

Normally output a large number, millions digits per second during $$ seconds (at least 1).

timeout $$ od /dev/zero -v|tr -d '\n '

Try it Online

Python 3, 99 bytes, score not sure

x,e,a=ord("~"),eval,"f(~-n)"
f=lambda n:x if n<x-(x<<x)else f(~-e("<<".join("a"*e(a))))
print(f(x))

Try it online!

Pyth, \$>\operatorname{Laver}^{\operatorname{Laver}^{\operatorname{Laver}^{\operatorname{Laver}^{\operatorname{Laver}^{131072}(131072)}(131072)}(131072)}(131072)}(131072)/87^3\$

=kC"𠀀"=d-C"B"C"A"D:HNTK?%TH:H:HN-Td+Td%+NdHRKDOYJdW:J-ddYJ=+J)RJFQkFzkFGkFZk=kFOkk)))k

Original Python:

def laver(size, x, y):
  if y % size == 0: return (x + 1) % size
  return laver(size, laver(size, x, y - 1), y + 1)
def next(period):
  i = 1
  while laver(i, 0, period): i += i
accumulator = 131072
for i in range(accumulator):
  for j in range(accumulator):
    for k in range(accumulator):
      for l in range(accumulator):
        for m in range(accumulator):
          accumulator = laver(accumulator)

How it works

This entry is based off of Laver tables. A Laver table of order \$n\$ (or size \$2^n\$) is a binary operation on integers from 1 to \$2^n\$ such that: $$x\star 1=x+1(\mathrm{mod}\ 2^n)$$ $$x\star(y\star z)=(x\star y)\star(x\star z)$$ The laver(size, x, y) function recursively computes the Laver table of size size (who could've expected?), except I used the numbers from 0 to \$2^n-1\$, because all programmers do it, and I can just do the modular reduction without having to set the result to size if it turns out to be 0. The recursive call doesn't reduce the last argument, but checking the base case does, so the function ends up being periodic in the last argument. There has to be a modular reduction in one place, so this is unavoidable.

The next function computes the next Laver table size with a given period. Every Laver table has a period, defined as the period of \$1\star n\$. The period is clearly always a power of 2, and it grows extremely slowly. Thus, the size needed to reach a given period grows extremely rapidly (the size needed for period 32 is unknown, see next paragraph). This function I denoted \$\operatorname{Laver}\$ in the title.

In fact, it is unknown if the periods grow infinitely. If they didn't, this number would be ill-defined. I usually don't like submitting ill-defined numbers, but there are reasons I believe this number is well-defined.

  1. It is provable in \$ZFC+I3\$.
  2. It is almost certainly provable in a weaker system, see below.

Notes on the strength of Laver tables

It is a common practice that somehow works, to assign growth rates to a function based off of the strength of a theory proving it total. Consider the minimal theories that prove "the periods of Laver tables are unbounded," which is an arithmetic statement, especially the "Big Five":

  1. \$RCA_0,WKL_0\$ have strength \$\omega^\omega\$. It seems unlikely that they could prove the laver tables are unbounded, given that all proofs use set theory, which these can't encode much of. If this is the strength, then this entry would place at #6.
  2. \$ACA_0\$ has strength \$\varepsilon_0\$. This is the weakest that could plausibly prove the Laver tables are unbounded. Being conservative over \$PA\$, this seems unlikely. At this strength, this entry would place at #5.
  3. \$ATR_0\$ has strength \$\Gamma_0\$. At this level of strength, this entry is already at #2.
  4. The next subsystem, \$\Pi^1_1\text{-}CA\$ already makes this entry the first by a massive margin. It also stands a much more reasonable chance of actually proving the Laver tables unbounded. Even if merely \$KP\$ was sufficient, this would still utterly dominate the other entries.

What if it's stronger?

Consider the usual explanation of how large cardinals are connected with Laver tables:

A rank is a set \$R\$ such that \$f:R\mapsto R\implies f\in R\$. Assume there is a set with a non-trivial elementary embedding from \$i:S\mapsto S\$, then there is a rank \$R\$ with the same property. Take another embedding \$j\$, then \$i(j)\$ is an embedding because being an embedding is definable. Consider \$i(j(k))\$. \$j(k)\$ is the image of \$k\$ under \$j\$, and being the image is definable, so \$i(j(k))=i(j)(i(k))\$. If we let \$i\star j=i(j)\$ then this is one of the defining relationships of a Laver table.

It seems to be possible to implement this in an extension of \$KP\$, and as this seems to be the most natural way to arrive at Laver tables, this might give the proper estimate of its strength. One example is to define a rank-into-rank set as a set \$S\$ that contains an embedding \$j:S\mapsto S\$ (which using replacement, ensures the existence of many other embeddings in \$S\$). The embedding \$j\$ should be such that all \$\Sigma_1\$ (or maybe \$\Pi_2\$) statements in \$(S,\in,\mathfrak{F},\mathfrak{I})\$, where \$\mathfrak{F},\mathfrak{I}\$ are unary and ternary predicates for being an embedding, and being the image under an embedding, respectively. If this is consistent, then it could give a better strength estimate.

C (clang), 0 bytes, score \$\frac{86}{0}\$

Try it online!

Outputs

/usr/bin/ld: /usr/bin/../lib/gcc/x86_64-redhat-linux/8/../../../../lib64/crt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
clang-7: error: linker command failed with exit code 1 (use -v to see invocation)
/srv/wrappers/c-clang: line 5: ./.bin.tio: No such file or directory

to STDERR on TIO.

No idea how to score this :P

TI-Basic, \$10 \uparrow\uparrow 5.0039\$ (I think), 100 bytes

{π,Xmax→L₁
Ans→L₂
LinReg(ax+b) Y₁
Equ▸String(Y₁,Str1
If not(N
sub(Str1,Xscl,Xscl→Str2
Σx
For(J,-Ans,Ans
Ans+Ans→A
End
For(I,I-A,I-Xscl
IS>(N,A
prgmD
DS<(N,Z
Str2+Str2→Str2
End
Ans

a fresh interpreter/calculator is needed, or with the following constants initialized:

N,Z,I = 0
Xscl = 1
Xmin = -10
Xmax = 10

Trying to calculate my score

A more minimal code to analyze would be:

For(I,I-A,I-1
IS>(N,A
prgmD
DS<(N,0
B+1→B
End

with I and B initialized to zero and one respectively

$$B = \sum_{I=0}^{A+1}(A^I) = \frac{A^{A+2}-1}{A-1} \approx A^A$$

B is the number of times the length of Str2 is doubled, giving the number:

$$1.111 \times 10^{2^B} ≈ 10^{2^{A^A}} \approx 10^{2^{(1.7 \times 10^9)^{1.7 \times 10^9}}} \approx 10^{10^{10^{10^{10.2124}}}} \approx 10 \uparrow\uparrow 5.0039 $$

Edit:

Ruby, \$f_{\varphi(1,0,0)}(5)\$ (non-deterministic)

More precisely: \$f_{\varphi(\varphi(\varphi(\varphi(\varphi(16381,\omega^2),\omega^2),\omega^2),\omega^2),\omega^2)}(1048577)\$.

*h=[[[[n=$$]]]]
f=->a{b,c,d=a;b ?a==b ?~-a:a==a-[$.]?[f[b],d,[b,f[c],d]]:d:n+=n}
h=f[h]while h!=p(n)

Try it online!

*$. == 0 is a global variable.

*Relies on $$, the process ID. I suppose the rules never said random behavior isn't allowed. I'm assuming the maximum PID to be 32768.

Ruby, \$f_{\varphi(1,0,0)}(3)\$ (deterministic)

More precisely: \$f_{\varphi(\varphi(\varphi(\omega+\omega,\omega^2),\omega^2),\omega)}(16)\$.

*h=[[[n=-~$.]]]
f=->a{b,c,d=a;b ?a==b ?~-a:a==a-[$.]?[f[b],d,[b,f[c],d]]:d:n+=n}
h=f[h]while h!=p(n)

Try it online!

*Previously removed the prints, not sure why but they're back since removing them doesn't really let us improve much. Probably just +1 (or +2 at best) inside the \$f_{\varphi(1,0,0)}(n+\dots)\$.

Ungolfed:

*See math explanation below.

n = 32768         # n = "count"
h = [[[[[n]]]]]   # h0 = 32768
                  # h1 = "count op(h0) count"
                  # ...
                  # h = h5 = "count op(h4) count"

f = -> a {        # f[a] = reduce(a)
  b, c, d = a                     # truncate to first 3 elements
  if a == [] || a.nil?            # if a == "count"
    n += n                          # increment counter
    return n                        # and replace with counter
  elsif a.is_a? Integer           # if a == int
    return a - 1                    # decrement int
  elsif a != a-[0]                # if a == "++d"
    return d                        # return just d
  else                            # if a == "d op c" where b = op  (*note out of order)
    return [f[b], d, [b, f[c], d]]  # (d op reduce(c)) reduce(op) d
  end
}

while h != n  # reduce until h == n
  h = f[h]
  p(n)
end

*We write "x op(y) z" = [y, z, x] so that reducing it reduces y before z and so that [t] = "count op(t) count".

Math explanation:

The code may be approximately understood as a combination of symbolic manipulation and recursive reduction of algebraic expressions.

Let ++a denote a+1, the successor of a.

We then define reduce("x") as x-1, meaning:

We then try to work out reduce("x") for algebraic expressions:

Generalizing this, we get:

where:

and more generally:

for simplicity we also define:

We then introduce symbols. The only symbol is "count", where reduce("count") is the amount of times reduce has been called.

We then apply x = reduce(x) until x = 0 and print the count.

Example:

"count^3"

1:  reduce("count^3")
2:  reduce("count^reduce(3) reduce("^") count")
      Note: we evaluate right-to-left
3:  reduce("count^reduce(3) * count")
4:  reduce("count^2 * count")
5:  reduce("count^2 * reduce("count") reduce("*") count^2")
6:  reduce("count^2 * reduce("count") + count^2")
7:  reduce("count^2 * 6 + count^2")
8:  reduce("count^2 * 6 + reduce("count^2") reduce("+") ...")
9:  reduce("++(count^2 * 6 + reduce("count^2"))")
10: reduce("++(count^2 * 6 + count^reduce(2) reduce("^") count)")
11: reduce("++(count^2 * 6 + count^reduce(2) * count)")
12: reduce("++(count^2 * 5 + count^1 * count)")

"count^2 * 6 + count^1 * count"
(continue applying reduce(...) until you get 0)

Note that the growth relies on the 'lazy' evaluation of "count". Despite how simple it is to normally cube an integer, fully reducing "count^3" actually results in count > 10^10^10^10^10^10^5.

Let g(x, n) be the final count after fully reducing x with an initial count = n.

So from the previous example, g("count^3", 0) > 10^10^10^10^10^10^5.

For some intuition on the very fast growth, notice that g("a+b", n) > g(a, g(b, n)). This is because we have to reduce b before a. This means addition allows recursion, and we also know that multiplication expands into lots of addition.

Then note that

Some other values of interest:

For the last 3, we define:

g("count^k", n) ~ n↑↑...k arrows...↑↑n
g("count^count", n) ~ n↑↑...n arrows...↑↑n ~ Ack(n,n)
g("count^(++count)", 20) ~ Toeofdoom's a_20(1)
g("count^(++count)", 64) ~ Graham's number
g("count^(count+1)", 15) ~ eaglgenes101's number  (note count+1 turns into ++(++count))
g("count op(4) 2", 127) ~ col6y's number
g("(count op(4) 3) * count", 3) ~ my older/other number
g("count op(6) 1", 9) ~ r.e.s.'s number
g("(count op(6) 1) * (++count op(4) 1)", 17) ~ Peter Taylor's number
g(h(3, "count + count"), 126) ~ this deterministic number
g(h(5, 16381), 1048577) ~ this non-deterministic number
g("h("count", "count") * count^7", 256^26) ~ Steve H.'s number

Rust, score \$10 \uparrow\uparrow\uparrow 127\$

fn main(){let b='~' as usize;let mut n=b+b;for _ in b..n{n<<=n;for _ in b..n{n<<=n;print!("{}",n)}}}

Try it online!

Note that the code's validity is dependent on the assumption that a computer with infinite memory will have an arbitrary precision pointer to index the infinite memory. I also attempted to write a version that wouldn't overflow instantly with arbitrary precision integers but it still overflowed on the second bitshift.

Size analysis:

A bit-shifting \$n\$ leftward \$n\$ times is equivalent to the function \$n2^n = f_2(n)\$. My code applies recursion in a manner consistent with the fast-growing hierarchy to achieve \$f_4(n)\$. let the final value of the local variable n in my code above be denoted as \$o\$. It will require \$log(o)\$ bitshifts to create \$o\$. The print! statement runs every time the inner bitshift does, meaning the order of magnitude of my score is the sum of the change in the order of magnitude of the variable n between the inner bitshifts. The order of magnitude of n should be growing exponentially since it is being tetrated, so the expression for the order of magnitude of the result is $$\sum_i^{log(o)}2^i$$ telling us that the final number is \$10^{2^{log(o)+1}-1}\$ which is not meaningfully different from \$o\$ itself since \$o\$ in this case is \$f_4(126)\$ or \$10 \uparrow\uparrow\uparrow 127\$. Please let me know if this explanation seems wrong or incomplete because I am new to the domain of big numbers.

Edit: better approximation thanks to Simply Beautiful Art.

JavaScript 44 chars

This may seem a little cheaty:

alert((Math.PI+''+Math.E).replace(/\./g,""))

Score = 31415926535897932718281828459045 / 44^3 ≈ 3.688007904758867e+26 ≈ 10↑↑2.1536134004

Idris, score >>> g64

h:Nat->Nat
h Z=S(S Z)
h(S y)=let n=h y in hyper n n n
let x=iterate h Z in index((index$S$S$S$Z)x)x

Last line is the expression resulting in an extremely high number. I did never use exponentiation directly, since I never even called the hyper operator on level 3. The fifth element of x already results in

hyper(hyper(hyper(hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2))),hyper(hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2))),hyper(hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)))),hyper(hyper(hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2))),hyper(hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2))),hyper(hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)))),hyper(hyper(hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2))),hyper(hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2))),hyper(hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)),hyper(hyper(2,2,2),hyper(2,2,2),hyper(2,2,2)))))

because the code builds up trinary trees of hyper operators. However, the now given value will be used to index an infinite stream, such that the n-th element of that stream equals h applied n times on zero. This results in a value much larger than Graham's number.

New Ruby: score ~ fωω2+1(12622126)

where fα(n) is the fast growing hierarchy.

n=?~.ord;H=->a{b,*c=a;eval"b ?H[b==$.?c:[b==~$.?n:b-(b<=>$.)]*n+c]:p(n+=n);"*n};eval"H[~n];".*n*n<<n

Try it online!

The *n are just string and array multiplication, so they should be fine.

Ungolfed code:

n = 126
H =-> a {
    b, *c = a
    n.times{
        case b
        when nil
            puts(n += n)
        when 0
            H[c]
        when -1
            H[[n]*n+c]
        else
            H[[b.-b<=>0]*n+c]
        end
    }
}
(n*n<<n).times{H[~n]}

where b.-b<=>0 returns an integer that is 1 closer to 0 than b.


Explanation:

It prints n at the start of every call of H.

H[[]] doubles n (n times), i.e. n = n<<n.

H[[0,a,b,c,...,z]] calls H[[a,b,c,...,z]] (n times).

H[[k+1,a,b,c,...,z]] calls H[[k]*n+[a,b,c,...,z]] (n times), where [k]*n = [k,k,...,k].

H[[-1,a,b,c,...,z]] calls H[[n]*n+[a,b,c,...,z]] (n times).

H[[-(k+1),a,b,c,...,z]] calls H[[-k]*n+[a,b,c,...,z]] (n times).

H[k] = H[[k]].

My program initializes n = 126, then calls H[-n-1] 12622126 times.


Examples:

H[[0]] will call H[[]] which applies n = n<<n (n times).

H[[0,0]] will call H[[0]] (n times).

H[[1]] will call H[[0]*n] (n times).

H[[-1]] will call H[[n]*n] (n times).

H[[-1,-1]] will call H[[n]*n+[-1]] (n times).

H[[-3]] will call H[[-2]*n] (n times).

Try it online!


See revisions for other cool things.

Python2

o=oct(ord('~'))
for a in range(int(o)):
    o+=o*int(o)
    for b in range(int(o)):
        o+=o*int(o)
o*int(o)

This is exactly 100 characters if the indentations are tabs.

In order for the program to output, it needs to be run in a python console rather than in a file.

Score is unknown at this point because the inner for loop will run 10e707 times in the first iteration of the outer loop. and in total, there will be 176 iterations of the outer loop. Also, this output is too big for me to even comprehend how to mark the notation for it.

Come Here, score 1.03x1037

TELL"___________________________________________"-"&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"NEXT

Come Here handles string arithmetic weirdly. In the encoding used by the reference implementation, "_"-"&" is "9".


Also, this program prints (in theory) a number slightly larger than 101098, however, it is not a valid answer to this question due to the restriction on using digits (and multiplication, for that matter; though I'm using it for string prepending here) in your code.

0CALL"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"cCALL0dCOME FROM SGNcCALL256*d+57d1CALLc-1cTELLdNEXT

Julia, fω3(127)

f(r,s,t)=foldl(|>,r,fill(s,t));!q=x->f(x,q,x);w(b)=a->x->x|>f(a,b,x);w(w(w(!)))(x->x+x)(BigInt('~'))

I aimed for the fast-growing functions corresponding to ordinals in the Veblen hierarchy, but I had to settle for ordinal exponentation. Maybe another challenge...

Explanation:

#Function iteration, which is the tool to get us this far
#Applies s to r, t times
f(r,s,t)=foldl(|>,r,fill(s,t));

#Here's the first order successor:
!q=x->f(x,q,x);

#Function to help us with diagonalization
#Take a and x, and fold the b higher order function on the a function x times, 
#then plug x into the resulting function
#Doing this multiplies the ordinal position by ω, which isn't nearly as high as I would hope
#Yes,I tried the ~ operator, but Julia doesn't like when I do that
w(b)=a->x->x|>f(a,b,x);

#Call it, and implicitly return it. 
#Or interrupt it, and and enjoy your screenfulls of stack traces. 
w(w(w(!)))(x->x+x)(BigInt('~'))

brainfuck, 97 bytes, f255(2552)

-[>-[[>]-[<]>>-]<-]-[-[[>]+[<]<+>>-]-[<+>-----]<.,<[>>>[[-<+>]<[<]<[->+<<+>]>[>]>]<+[<]>,<<-]>>>]

Assumes a wrapping implementation with an infinite tape in both directions.

The algorithm of the program is:

Initialise a list with 255^2+1 255s
While the list exists:
    Print a 3
    Pop the first element of the list to use as a counter
    Decrement the counter
    Append counter many 1s to the end of the list
    While counter != 0:
        Prepend length of list-1 copies of the counter to the front of the list
        Decrement counter

This is not infinite, as every time a list element is processed, it only appends elements that are less than it. 1s are popped and removed without appending anything.

A step by step explanation of the code:

- Initialise counter as 255
[ While counter
  >-[[>]-[<]>>-] Add 255 255s to the list
  <- Decrement counter
]- 
This initialises the list as 255^2+1 255s

[ While list exists
  - Decrement the first element
  [ 
    [>]+[<] Append that many 1s to the end of the list
    <+>>-   Copy the element one over
  ]
  -[<+>-----]<.,< Print a 3
  [ While counter
      >>> Go to first element of list
      [ For each element in the list
          [-<+>] Move the element over one
          <[<]< Go to the counter
          [->+<<+>] Prepend a copy of the counter to the start of the list
          >[>]> Go to the next element of the list
      ]
      <+[<] Return to the start of the list while appending a 1
      >,    Remove the first element of the list
      <<-   Decrement the counter
  ]
  >>> Go to first element of the list
]

Big thanks to the folks on the Ordinal Studies Discord for helping me understand just how big the number is. If anything seems wrong, blame them please correct me.

J, fω(256) / 50653

(<:@[$:~^:]])`(>:@])@.(=(#>a.)"_)~#a.

Explanation:

This makes use of what J calls a gerund:

The ` character is used to form a list of verbs, and the the verb following @. is used to select which verb to apply. This makes it equivalent to an if ... then ... else statement.

Also, $: is equivalent to the largest verb containing it. However, since we use ~ to apply our dyad with its right argument as both arguments, this is also part of $:, which in the dyadic case flips the order of its arguments. Therefore, we use another ~ to un-flip them.

And, one last bit, a: is an empty box, > unboxes it, and # takes the length. So, #>a: is 0

Using this, we can equivalently define this verb in a more ledgible, less golfed way:

f =: dyad define
if. x = 0 do.
    >:y
else.
    (<:x) f^:y (y)
end.
)

Note: x is the left argument, y is the right

This fits the definition of the fast-growing heirarchy.

And then our program is f~ #a.. Now, #a. is the length of J's alphabet, which happens to be 256. Therefore, our program computes f256(256) = fω(256), since fω is defined as fn(n).

Note: ^: is distinct from ^ :

^: is an adverb which is equivalent to a functional power, which I do not believe is disallowed in the OP

Javascript, > 10316469 ≈ 10↑↑2.740388839

(Run from the browser console to get output)

for(a="",b="■".charCodeAt``;b--;)a+=(''+b).repeat("■".charCodeAt``);a

Pyth, fψ(ΩΩ)+7(25626)/1000000

=CGL&=.<GG?+Ibt]Z?htb?eb[XbhhZyeby@bhZhb)hbXbhhZyeb@,tb&bG<bhZ=Y[tZGG)VGVGVGVGVGVGVGVG=[YYY)uyFYHpG)

SimplyBeautifulArt has a fantastic explanation of a function that both of our solutions share, namely that I define a function y[b,G] with a global =g[h,n]. The major differences are as follows:

Braingolf, 10 bytes, final score: ≈ 10131 ≈ 10↑↑2.3257765097

#􏿿[l!_]

Note that 􏿿 is a 4 byte ASCII character with the value 1114111

Outputs every number from 2 to 1114111 with no spaces or other separators. Somewhere around 6.7m digits, but can we make it bigger...

Braingolf, 100 bytes

#􏿿...............[l!_][l!_][l!_][l!_][l!_][l!_][l!_][l!_][l!_][l!_][l!_][l!_][l!_][l!_][l!_][l!_]

This does the same as above, but 16 times over. Meaning the final number is every number from 1 to 17825792 appended. 131m digits.

Not the largest or the winner by any stretch, but still pretty good, and probably as good as one can do in Braingolf given the banning of operators

GTB

Don't run this on your calculator (it leaks memory)

[%X:"]

Code length = 6 bytes (63=216)

Score = 13,256,072 (2,863,311,531/216)

**Assumes 16 GB free memory on an emulator for Windows*

Haskell, 100 bytes, score ≈ 10↑↑65503

f!x|x<' '=f|q<-(!pred x),r<-(q$q f)[x]=foldl(.)f[f|_<-r,_<-r]
main=print$(\x->x++x)!'�'$[pred ':']

The special character (2^16 - 3 ascii) counts as 2 bytes. pred ':' is equal to '9'.

C

(With apologies to Darren Stone)

long n,o,p,q,r;main(){while(--n){while(--o){while(--p){while(--q){while(--r){putchar('z'-'A');}}}}}}

n = 2^64 digit number (9...)

l = 100 chars of code

score ≈ 1e+2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936570 ≈ 10↑↑3.2974890744

[ Score = n^5/l^3 = (10^(2^320)-1)/(100^3) = (10^2135987035920910082395021706169552114602704522356652769947041607822219725780640550022962086936576-1)/(10^6) ]

Note that I deserve to be flogged mercilessly for this answer, but couldn't resist. I don't recommend acting like me on stackexchange, for obvious reasons. :-P


EDIT: It would be even harder to resist the temptation to go with something like

long n;main(){putchar('z'-'A');putchar('e');putchar('+');while(--n){putchar('z'-'A');}

...but I suppose that an intended but unspecified rule was that the entire run of digits making up the number must be printed.

Python, 2↑↑11 / 830584 ≈ 10↑↑8.632971 (Knuth up arrow notation)

print True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<(True<<True<<True)))))))))

Probably no computer has enough memory to successfully run this, but that's not really the program's fault. With the minimum system requirements satisfied, it does work.

Yes, this is doing bit shifting on boolean values. True gets coerced to 1 in this context. Python has arbitrary length integers.

JavaScript 98 chars

m=Math;a=k=(''+m.E).replace('.',"");j=m.PI%(a&-a);for(i=j;i<(m.E<<k<<k<<k<<m.E);i+=j)a+=k;alert(a)

generates 2.718e+239622337 ≈ 10↑↑2.9232195202

For score of just slightly more than 2.718e+239622331 ≈ 10↑↑2.9232195197

which is the largest I can make it without the browser crashing.

(console.log(a) will show you the full output)

Don't run these:

m=Math;a=k=(''+m.E).replace('.',"");j=m.PI%(a&-a);for(i=j;i<(k<<k<<k<<k<<k<<k<<k);i+=j)a+=k;alert(a)

would output 2.718+e121333054704 ≈ 10↑↑3.0189898069 (aka 2.718*10^(1.213*10^12) to compare to the longer answer:

more extreme version, if it didn't crash your browser: (80 char)

m=Math;a=k=(''+m.E).replace('.',"");j=m.PI%(a&-a);for(i=j;i<k;i+=j)a+=k;alert(a)

which would create a number around the same size as e * 10^(10^19) ≈ 10↑↑3.106786869689

Edit: updated code original solution only generated 2.718e+464

Python 3, score = ack(126,126)/100^3

g=len('"');i=ord('~');f=lambda m,n:(f(m-g,f(m,n-g))if n else f(m-g,g))if m else n+g
print(f(i,i))

The f function is the ackermann function, which i have just enough space to invoke.

Edit: previously "else n+1", which was in violation of challenge rules- kudos to Simply Beautiful Art.

ECMAScript 6 - 10^3↑↑↑↑3 / 884736

(3↑↑↑↑3 is G(1) where G(64) is Graham's number)

u=-~[v=+[]+[]]+[];v+=e=v+v+v;D=x=>x.substr(u);K=(n,b)=>b[u]?n?K(D(n),K(n,D(b))):b+b+b:e;u+K(v,e)

Output: 10^3↑↑↑↑3

Hints:

G is the function where G(64) is Graham's number. Input is an integer. Output is a unary string written with 0. Removed for brevity.

K is the Knuth up-arrow function a ↑n b where a is implicitly 3. Input is n, a unary string, and b, a unary string. Output is a unary string.

u is "1".

v is "0000", or G(0)

e is "000".

Fortran (6.4243e4926 ≈ 10↑↑2.556279837)

Requires quad-precision library to be installed,

use iso_c_binding;real(c_long_double)a;print*,huge(a);end

C (score ≈ 10^20 000 000 000 ≈ 10↑↑3.005558275)

main(){for(;rand();printf("%d",rand()));}

Despite of rand() the output is deterministic because there is no seed function.

Powershell (2.53e107976 / 72³ = 6.78e107970 ≈ 10↑↑1.701853371)

This takes far more than 5 seconds to run.

-join(-split(gci \ -r -EA:SilentlyContinue|select Length))-replace"[^\d]"

It retrieves and concatenates the byte length of every file on your current drive. Regex strips out any non-digit characters.

Haskell, score: (22265536-3)/1000000 ≈ 2↑↑7 ≈ 10↑↑4.6329710779

o=round$sin pi
i=succ o
q=i+i+i+i
m!n|m==o=n+i
 |n==o=(m-i)!i
 |True=(m-i)!(m!(n-i))
main=print$q!q

This program is exactly 100 bytes of pure Haskell code. It will print the fourth Ackermann number, eventually consuming all available energy, matter and time of the Universe and beyond in the process (thus slightly exceeding the soft limit of 5 seconds).

Javascript, 10↑↑↑↑210

100 chars:

z=~~Math.E+'';o={get f(){for(i=z;i--;)z+=i}};o.f;for(i=z;i--;)for(j=z;j--;)for(k=z;k--;)o.f;alert(z)

Based on the observation that maximally iterating f is the optimal way to go, I replaced the 13 calls to f with 3 levels of nested loops calling f, z times each (while f keeps increasing z).

I estimated the score analytically on a piece of paper—I'll type it up if anyone is interested in seeing it.


Improved Score: 10↑↑13

Javascript, in exactly 100 characters, again:

z=~~Math.E+'';__defineGetter__('f',function(){for(i=z;i--;)z+=i});f;f;f;f;f;f;f;f;f;f;f;f;f;alert(z)

This improves my original answer in three ways—

  1. Defining z on the global scope saves us from having to type o.z each time.

  2. It's possible to define a getter on the global scope (window) and type f instead of o.f.

  3. Having more iterations of f is worth more than starting with a larger number, so instead of (Math.E+'').replace('.','') (=2718281828459045, 27 chars), it's better to use ~~Math.E+'' (=2, 11 chars), and use the salvaged characters to call f many more times.

Since, as analyzed further below, each iteration produces, from a number in the order of magnitude M, a larger number in the order of magnitude 10M, this code produces after each iteration

  1. 210 ∼ O(102)
  2. O(10102) ∼ O(10↑↑2)
  3. O(1010↑↑2) = O(10↑↑3)
  4. O(1010↑↑3) = O(10↑↑4)
  5. O(1010↑↑4) = O(10↑↑5)
  6. O(1010↑↑5) = O(10↑↑6)
  7. O(1010↑↑6) = O(10↑↑7)
  8. O(1010↑↑7) = O(10↑↑8)
  9. O(1010↑↑8) = O(10↑↑9)
  10. O(1010↑↑9) = O(10↑↑10)
  11. O(1010↑↑10) = O(10↑↑11)
  12. O(1010↑↑11) = O(10↑↑12)
  13. O(1010↑↑12) = O(10↑↑13)

Score: ∼101010101016 ≈ 10↑↑6.080669764

Javascript, in exactly 100 characters:

o={'z':(Math.E+'').replace('.',''),get f(){i=o.z;while(i--){o.z+=i}}};o.f;o.f;o.f;o.f;o.f;alert(o.z)

Each o.f invokes the while loop, for a total of 5 loops. After only the first iteration, the score is already over 1042381398144233621. By the second iteration, Mathematica was unable to compute even the number of digits in the result.

Here's a walkthrough of the code:

Init

Start with 2718281828459045 by removing the decimal point from Math.E.

Iteration 1

Concatenate the decreasing sequence of numbers,

to form a new (gigantic) number,

How many digits are in this number? Well, it's the concatenation of

In Mathematica,

In[1]:= 1718281828459046*16+Sum[9*10^i*(i+1),{i,-1,14}]+1
Out[1]= 42381398144233626

In other words, it's 2.72⋅1042381398144233625.

Making my score, after only the first iteration, 2.72⋅1042381398144233619.

Iteration 2

But that's only the beginning. Now, repeat the steps, starting with the gigantic number! That is, concatenate the decreasing sequence of numbers,

So, what's my new score, Mathematica?

In[2]:= 1.718281828459046*10^42381398144233624*42381398144233625 + Sum[9*10^i*(i + 1), {i, -1, 42381398144233623}] + 1

During evaluation of In[2]:= General::ovfl: Overflow occurred in computation. >>

During evaluation of In[2]:= General::ovfl: Overflow occurred in computation. >>

Out[2]= Overflow[]

Iteration 3

Repeat.

Iteration 4

Repeat.

Iteration 5

Repeat.


Analytical Score

In the first iteration, we calculated the number of digits in the concatenation of the decreasing sequence starting at 2718281828459045, by counting the number of digits in

This sum can be represented by the formula,

        enter image description here

where Z denotes the starting number (e.g. 2718281828459045) and OZ denotes its order of magnitude (e.g. 15, since Z ∼ 1015). Using equivalences for finite sums, the above can be expressed explicitly as

        enter image description here

which, if we take 9 ≈ 10, reduces even further to

        enter image description here

and, finally, expanding terms and ordering them by decreasing order of magnitude, we get

        enter image description here

Now, since we're only interested in the order of magnitude of the result, let's substitute Z with "a number in the order of magnitude of OZ," i.e. 10OZ

        enter image description here

Finally, the 2nd and 3rd terms cancel out, and the last two terms can be dropped (their size is trivial), leaving us with

        enter image description here

from which the first term wins out.

Restated, f takes a number in the order of magnitude of M and produces a number approximately in the order of magnitude of M(10M).

The first iteration can easily be checked by hand. 2718281828459045 is a number in the order of magnitude of 15—therefore f should produce a number in the order of magnitude of 15(1015) ∼ 1016. Indeed, the number produced is, from before, 2.72⋅1042381398144233625—that is, 1042381398144233625 ∼ 101016.

Noting that M is not a significant factor in M(10M), the order of magnitude of the result of each iteration, then, follows a simple pattern of tetration:

  1. 1016
  2. 101016
  3. 10101016
  4. 1010101016
  5. 101010101016

LaTeX sources

(Z-10^{\mathcal{O}_Z}+1)(\mathcal{O}_Z+1)+\sum_{k=0}^{\mathcal{O}_Z-1}{(9\cdot10^k(k+1))}+1

(Z-10^{\mathcal{O}_Z}+1)(\mathcal{O}_Z+1)+\frac{10-\mathcal{O}_Z10^{\mathcal{O}_Z}+(\mathcal{O}_Z-1)10^{\mathcal{O}_Z+1}}{9}+10^{\mathcal{O}_Z}

(Z-10^{\mathcal{O}_Z}+1)(\mathcal{O}_Z+1)+\mathcal{O}_Z10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}+1

Z\mathcal{O}_Z+Z-10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}+\mathcal{O}_Z+2

\mathcal{O}_Z10^{\mathcal{O}_Z}+10^{\mathcal{O}_Z}-10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}+\mathcal{O}_Z+2

\mathcal{O}_Z10^{\mathcal{O}_Z}-\mathcal{O}_Z10^{\mathcal{O}_Z-1}

C, 10^10^2485766 ≈ 10↑↑3.805871804

unsigned a['~'<<'\v'],l='~'<<'\v',i,z;main(){while(*a<~z)for(i=l;printf("%u",~z),i--&&!++a[i];);}

We create an array of 258048 unsigned integers. It couldn't be unsigned longs because that made the program too long. They are unsigned because I don't want to use undefined behavior, this code is proper C (other than the lack of return from main()) and will compile and run on any normal machine, it will keep running for a long time though. This size is the biggest we can legally express without using non-ascii characters.

We loop through the array starting from the last element. We print the digits of 2^32-1, increment the element and drop the loop if the element hasn't wrapped to 0. This way we'll loop (2^32 - 1)^254048 = 2^8257536 times, printing 10 digits each time.

Here's example code that shows the principle in a more limited data range:

#include <stdio.h>
unsigned int a[3],l=3,i,f;

int
main(int argc, char *argc){
        while (*a<4) {
        for (i = l; i-- && (a[i] = (a[i] + 1) % 5) == 0;);
            for (f = 0; f < l; f++)
                printf("%lu ", a[f]);
            printf("\n");
        }
}

The result is roughly 10^10^2485766 divided by a million which is still roughly 10^10^2485766.

No more limit on runtime? OK then.

Does the program need to be runnable on modern computers?

Both solutions using a 64-bit compile, so that long is a 64-bit integer.

C: greater than 10(264-1)264, which is itself greater than 1010355393490465494856447 ≈ 10↑↑4.11820744

long z;void f(long n){long i=z;while(--i){if(n)f(n+~z);printf("%lu",~z);}}main(){f(~z);}

88 characters.

To make these formulas easier, I'll use t = 2^64-1 = 18446744073709551615.

main will call f with a parameter of t, which will loop t times, each time printing the value t, and calling f with a parameter of t-1.

Total digits printed: 20 * t.

Each of those calls to f with a parameter of t-1 will iterate t times, printing the value t, and calling f with a parameter of t-2.

Total digits printed: 20 * (t + t*t)

I tried this program using the equivalent of 3-bit integers (I set i = 8 and had main call f(7)). It hit the print statement 6725600 times. That works out to 7^8 + 7^7 + 7^6 + 7^5 + 7^4 + 7^3 + 7^2 + 7 Therefore, I believe that this is the final count for the full program:

Total digits printed: 20 * (t + t*t + t^3 + ... + t^(t-1) + t^t + t^(2^64))

I'm not sure how to calculate (264-1)264. That summation is smaller than (264)264, and I need a power of two to do this calculation. Therefore, I'll calculate (264)264-1. It's smaller than the real result, but since it's a power of two, I can convert it to a power of 10 for comparison with other results.

Does anyone know how to perform that summation, or how to convert (264-1)264 to 10n?

20 * 2^64^(2^64-1)
20 * 2^64^18446744073709551615
20 * 2^(64*18446744073709551615)
20 * 2^1180591620717411303360
10 * 2^1180591620717411303361
divide that exponent by log base 2 of 10 to switch the base of the exponent to powers of 10.
1180591620717411303361 / 3.321928094887362347870319429489390175864831393024580612054756 = 
355393490465494856446
10 * 10 ^ 355393490465494856446
10 ^ 355393490465494856447

But remember, that's the number of digits printed. The value of the integer is 10 raised to that power, so 10 ^ 10 ^ 355393490465494856447

This program will have a stack depth of 2^64. That's 2^72 bytes of memory just to store the loop counters. That's 4 Billion Terabytes of loop counters. Not to mention the other things that would go on the stack for 2^64 levels of recursion.

Edit: Corrected a pair of typos, and used a more precise value for log2(10).

Edit 2: Wait a second, I've got a loop that the printf is outside of. Let's fix that. Added initializing i.

Edit 3: Dang it, I screwed up the math on the previous edit. Fixed.


This one will run on modern computers, though it won't finish any time soon.

C: 10^10^136 ≈ 10↑↑3.329100567

#define w(q) while(++q)
long a,b,c,d,e,f,g,x;main(){w(a)w(b)w(c)w(d)w(e)w(f)w(g)printf("%lu",~x);}

98 Characters.

This will print the bitwise-inverse of zero, 2^64-1, once for each iteration. 2^64-1 is a 20 digit number.

Number of digits = 20 * (2^64-1)^7 = 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187500

Rounding the program length to 100 characters, Score = printed number / 1,000,000

Score = 10 ^ 14536774485912137805470195290264863598250876154813037507443495139872713780096227571027903270680672445638775618778303705182042800542187494

C, score = 101097.61735/983 ≈ 10↑↑2.29874984

unsigned long a,b,c,d,e;main(){while(++a)while(++b)while(++c)while(++d)while(++e)printf("%lu",a);}

I appreciate the help in scoring. Any insights or corrections are appreciated. Here is my method:

n = the concatenation of every number from 1 to 264-1, repeated (264-1)4 times. First, here's how I'm estimating (low) the cumulative number of digits from 1 to 264-1 (the "subsequence"): The final number in the subsequence sequence is 264-1 = 18446744073709551615 with 20 digits. Thus, more than 90% of the numbers in the subsequence (those starting with 1..9) have 19 digits. Let's assume the remaining 10% average 10 digits. It will be much more than that, but this is a low estimate for easy math and no cheating. That subsequence gets repeated (264-1)4 times, so the length of n will be at least (0.9×(264-1)×19 + 0.1×(264-1)×10) × (264-1)4 = 3.86613 × 1097 digits. In the comments below, @primo confirms the length of n to be 4.1433x1097. So n itself will be 10 to that power, or 101097.61735.

l = 98 chars of code

score = n/l3 = 101097.61735/983

Requirement: Must run on a 64-bit computer where sizeof(long) == 8. Mac and Linux will do it.

Javascript, more than 10^(16*2^2718281828459046) / 54^3 ≈ 10↑↑3.069506124

for(a=b=(Math.E+'').replace(".","");a--;b+=b);alert(b)

Description:

Lua, Unknown/99^3 ≈ 10↑↑2.945956159

With infinite runtime:

m=math;p=m.pi;t=m.floor(p)s=tostring;h=t+s(p):sub(t)j=h;while(j>t)do io.write(s(h):rep(h))j=j-t;end

< 5 seconds:

m=math;p=m.pi;t=m.ceil(p)s=tostring;h=t+s(p):sub(-t)j=h;while(j>t)do io.write(s(h):rep(h))j=j-t;end

Ungolfed:

t=math.ceil(math.pi)                -- Acquire the number 4
h=t+tostring(math.pi):sub(-t)       -- Get the last t(4) digits of pi(5898) as a string.
                                    -- Adding t auto converts it to a number and increases our number
j=h;                                -- Set j as a counter to loop
while(j>t)do
    io.write(tostring(h):rep(h))    -- Add h(5902) repitions of h as a string to the output
    j=j-t;                          -- Decrement j by t(4), my only number available
end

Extra

Lua's lack of mathematical constants (other than pi) and ++ or -- operators made it tricky to manipulate numbers, but I thought I made good work with what I have. string.rep is the real hero.

If there's a notation that exists to write my score, I'll include it, but I don't know of one. If I was thinking correctly, the < 5 code's number should be (5902 repeated 5902 times) repeated ~5902/4 times.

AWK, 100 bytes, Score ≈ 10^(5e80) ≈ 10↑↑2.280320629

func f(x){while(x-++x){printf x}}BEGIN{while(a-++a){while(b-++b){while(c-++c){while(d-++d){f(m)}}}}}

On most modern machines the while(x-++x) loop will terminate when x==2^53+1. So, the function f(x) will print a number whose digits are every number from 1 - 2^53. Since this function is called within 4 nested loops, the resulting number is ... big?

To approximate, 2^53 > 9e15, so it has 16 digits. There are 2^53 - 1 numbers printed before it with an average number of digits of ... hmm, just a bit less than 16, let's call it 15. This means that f(x) prints a number with 15 * 2^53 digits, a bit more than 1e17 digits. That number is concatenated with itself 9e15^4 times ~ 6e63.

The final number printed should have about 6e63 * 1e17 ~ 6e80 digits. Call it N=10^(6e80). The score will N/1e6 ~ 10^(5e80). I did some rounding down. I'm sure this can be written in some better way.

GNU Bash, 10^40964096² / 80^3 ≈ 10↑↑2.072820169

C=$(stat -c %s /) sh -c 'dd if=/dev/zero bs=$C$C count=$C$C|tr \\$((C-C)) $SHLVL'

C = 4096 on any reasonable system. SHLVL is a small positive integer (usually either 1 or 2 depending on whether /bin/sh is bash or not).

64 bit UNIX only:

Score: ~ 10^(40964096409640964096*40964096409640964096) / 88^3

C=$(stat -c %s /) sh -c 'dd if=/dev/zero bs=$C$C$C$C$C count=$C$C$C$C$C|tr \\$((C-C)) $SHLVL'

R, 63 characters of code, 4.036242e+3699695 ≈ 10↑↑2.81744412

set.seed(T)
paste(rep(RS<-abs(.Random.seed),RS[exp(T)]),collapse="")
# the result will be 3699696 digits long
# 624 repetitions of 4036241692704834420106146035583972223....

... or you can have it printing for as long as you have time:

set.seed(T)
repeat{cat(abs(.Random.seed),sep="")}

Mathematica, 1.08544407066*10^23496 ≈ 10↑↑2.640580269

N[Cosh[Cosh[Cosh[Pi]]]]

It applies the hyperbolic cosine function to pi 3 times. If I had applied it 4 times, it would've caused an overflow error.

JavaScript - 84 Characters - Final Score: 2.082941723E+2886 ≈ 10↑↑2.390912646

Code:

(function n(a){b=a.length+'';a.push(b);b.length<Math.PI?n(a):alert(a.join(''))})([])

Output:

01234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000

(2893 digits)

Score:

(Calculated using http://keisan.casio.com/calculator)

Output / 84^3 = 2.082941723E+2886

C - 92 bytes (score 1.2842113915e4373822 ≈ 10↑↑2.822224398)

main(){char c='~',n='z'-'A',f=c,g=c;while(--c!=n)while(--f!=n)while(--g!=n)printf("%c",n);}

Wrote this before I found someone already posted a C solution. Oh, well.

This program generates the digit '9' by subtracting the ascii value 'A' from 'z', then repeatedly prints it.

Since the characters wrap around the container values, it actually repeats more than just the simple (126-57)^3 from the character values, it instead wraps around the character cells after subtraction, resulting in repeating the digit '9' 4373828 times. (I'm too tired right now to figure out why that particular number, but I'll edit later)

PHP, about 2.2e957136 ≈ 10↑↑2.7767719

Code is 58 bytes long (not counting the <? and ?> tags).

<?$b="FFFF";for(;$i<hexdec($b);$i++,$a+=hexdec($b.$b))echo$a?>

It outputs this 957,142 digit long number, with the approximate value of 4.295*10957141.

Code in action here.

Degolfed and annotated:

<?
$b="FFFF";
for(;//who needs to initalize variables? not us!
   $i<hexdec($b);//loops 65,535 or 2^16 times
   $i++,//add 1 to $i per loop
   $a+=hexdec($b.$b)//add 4294967295?
)
echo$a //output $a once per loop
?>

R - 49 41 characters of code, 4.03624169270483442*10^5928 ≈ 10↑↑2.576681348

set.seed(T)
cat(abs(.Random.seed),sep="")

will print out [reproducing here just the start]:

403624169270483442010614603558397222347416148937479386587122217348........

Brain-Flak, 2.1∙10410/1003 = 2.1∙10404 ≈ 10↑↑2.416095652

([(((((((((([()()()]){}){}){({}())}){({}())}){({}())}){({}())}){({}())}){({}())}){({}())}){({}())}])

Explanation

This program starts by pushing -12 to the stack. It then sums up all negative integers greater than -12, and adds that to -12.

This leaves -78 on the stack.

We repeat this process 7 times eventually yielding:

-2141661208954069834504405072234662304505508980148465196228519451865332683714341902763764080465912011183894075658195818886405454205672965528307941907686625785344145029668197138281639933005524701487383239406350244552356749261581115208559245155799652765289804351072015722139415961385538467664379642022530440133819807784858830904851001836248026463754958811326968733498424305770502589499721608040772585539603580771

We negate this and output.

C

Not sure if this one counts but damn does it print large numbers.

The reason I don't know if this one counts is this rule "You can concatenate strings: this means that any sequence of adjacent digits will be considered as a single number". I am not really concatenating, only printing many numbers.

No seed is intentional.

Ungolfed

#include <stdio.h>
#include <stdlib.h>

int main(){
    while(rand())
    {
        printf("%d",rand());
    }
}

Golfed

#include <stdio.h> 
#include <stdlib.h> 
int main(){while(rand())printf("%d",rand()%10);}

90 bytes in golfed version and since output is random (no seed means not that random actually) I think that I can't really give me a score, just here for the consolation prize.

dc, 100 characters

[lnA A-=ilbA A-=jlaSalbB A--SbLndB A--SnSnlhxlhx]sh[LaLnLb1+sbq]si[LbLnLasbq]sjFsaFsbFFFFFFsnlhxclbp

Given enough time and memory, this will calculate a number around 15 ↑¹⁶⁶⁶⁶⁶⁵ 15. I had originally implemented the hyperoperation function, but it required too many characters for this challenge, so I removed the n = 2, b = 0 and n >= 3, b = 0 conditions, turning the n = 1, b = 0 condition into n >= 1, b = 0.

The only arithmetic operators used here are addition and subtraction.

EDIT: as promised in comments, here is a breakdown of what this code does:

[            # start "hyperoperation" macro
lnA A-=i     # if n == 0 call macro i
lbA A-=j     # if b == 0 call macro j
laSa         # push a onto a's stack
lbB A--Sb    # push b-1 onto b's stack
LndB A--SnSn # replace the top value on n with n-1, then push n onto n's stack
lhxlhx       # call macro h twice
]sh          # store this macro in h

[            # start "increment" macro (called when n=0, the operation beneath addition)
LaLnLb       # pop a, b, and n
F+sb         # replace the top value on b with b+15
q            # return
]si          # store this macro in i

[            # start "base case" macro (called when n>0 and b=0)
LbLnLa       # pop b, n, and a
sb           # replace the top value on b with a
q            # return
]sj          # store this macro in j

Fsa          # store F (15) in a
Fsb          # store F (15) in b
FFFFFFsn     # store FFFFFF "base 10" (150000+15000+1500+150+15=1666665) in n
lhx          # load and call macro h
lbp          # load and print b

As noted, this deviates from the hyperoperation function in that the base cases for multiplication and higher are replaced with the base case for addition. This code behaves as though a*0 = a^0 = a↑0 = a↑↑0 ... = a, instead of the mathematically correct a*0 = 0 and a^0 = a↑0 = a↑↑0 ... = 1. As a result, it computes values that are a bit higher than they should be, but that's not a big deal since we are aiming for bigger numbers. :)

EDIT: I just noticed that a digit slipped into the code by accident, in the macro that performs increments for n=0. I've removed it by replacing it with 'F' (15), which has the side effect of scaling each increment operation by 15. I'm not sure how much this affects the final result, but it's probably a lot bigger now.

APL, 10↑↑3.4

Here's my revised attempt:

{⍞←⎕D}⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⍣n⊢n←⍎⎕D

100 char/byte* program, running on current hardware (uses a negligible amount of memory and regular 32-bit int variables) although it will take a very long time to complete.

You can actually run it on an APL interpreter and it will start printing digits. If allowed to complete, it will have printed a number with 10 × 12345678944 digits.

Therefore the score is 1010 × 12345678944 / 1003 ≈ 1010353 ≈ 10↑↑3.406161

Explanation

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
*: APL can be written in its own (legacy) single-byte charset that maps APL symbols to the upper 128 byte values. Therefore, for the purpose of scoring, a program of N chars that only uses ASCII characters and APL symbols can be considered to be N bytes long.

GolfScript; score at least fε_0+ω+1(17) / 1000

Following r.e.s.'s suggestion to use the Lifetime of a worm answer for this question, I present two programs which vastly improve on his derivation of Howard's solution.

They share a common prefix, modulo the function name:

,:z){.[]+{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:g~g

computes g(g(1)) = g(5) where g(x) = worm_lifetime(x, [x]) grows roughly as fε0 (which r.e.s. notes is "the function in the fast-growing hierarchy that grows at roughly the same rate as the Goodstein function").

The slightly easier (!) to analyse is

,:z){.[]+{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:g~g.{.{.{.{.{.{.{.{.{.{g}*}*}*}*}*}*}*}*}*}*

.{foo}* maps x to foo^x x.

,:z){[]+z\{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:g~g.{g}*

thus gives g^(g(5)) ( g(5) ); the further 8 levels of iteration are similar to arrow chaining. To express in simple terms: if h_0 = g and h_{i+1} (x) = h_i^x (x) then we calculate h_10 (g(5)).

I think this second program almost certainly scores far better. This time the label assigned to function g is a newline (sic).

,:z){.[]+{\):i\.z={.z+.({<}+??\((\+.@<i*\+}{(;}if.}do;}:
~
{.['.{
}*'n/]*zip n*~}:^~^^^^^^^^^^^^^^^^

This time I make better use of ^ as a different function.

.['.{
}*'n/]*zip n*~

takes x on the stack, and leaves x followed by a string containing x copies of .{ followed by g followed by x copies of }*; it then evaluates the string. Since I had a better place to burn spare characters, we start with j_0 = g; if j_{i+1} (x) = j_i^x (x) then the first evaluation of ^ computes j_{g(5)} (g(5)) (which I'm pretty sure already beats the previous program). I then execute ^ 16 more times; so if k_0 = g(5) and k_{i+1} = j_{k_i} (k_i) then it calculates k_17. I'm grateful (again) to r.e.s. for estimating that k_i >> fε_0+ω+1(i).

My code is:

x=ord('힠');s=lambda:sum(range(x))
for i in range(s()):
 for i in range(s()):x+=s();x+=s()
print(x)

Or a little cleaner:

x=ord('힠')
s=lambda:sum(range(x))
for i in range(s()):
 for i in range(s()):x+=s();x+=s()
print(x)

It's python3.

Explanation:

sum(range(x)) is sum of 1 to x. for each x we have

s(x) = sum(range(x)) = (x/2) * (x+1)            

a is a function where:

n = 0 -> a(n) = 55200
n > 0 -> a(n) = g(a(n-1))

where g(x) is:

g(x) = v(x) + v(v(x))

and v(x) equeals to:

v = x + s(x) = x + (x/2) * (x+1)

then g(x) becomes:

   g = v + v + (v/2) * (v+1)
-> g = (x + (x/2) * (x+1))*2
      +(x + (x/2) * (x+1)/2)
      *(x + (x/2) * (x+1)+1)

for a(n-1) we have:

g = (a(n-1) + (a(n-1)/2) * (a(n-1)+1))*2
   +(a(n-1) + (a(n-1)/2) * (a(n-1)+1)/2)
   *(a(n-1) + (a(n-1)/2) * (a(n-1)+1)+1)

so a is:

n = 0 -> a(n) = 55200
n > 0 -> a(n) =  (a(n-1) + (a(n-1)/2) * (a(n-1)+1))*2
                +(a(n-1) + (a(n-1)/2) * (a(n-1)+1)/2)
                *(a(n-1) + (a(n-1)/2) * (a(n-1)+1)+1)

our number is:

x = a(i)

where i is:

i = a(0)*a(0)+a(0)*a(1)+...+a(0)*a(a(0))

There maybe errors in this calculations, I'm not a mathematician. I Cannot calculate my score! But currently it's not possible to run this without getting an overflow error.

i used 힠 character for 52200, i supposed i cannot use \U0010ffff, you can get bigger results with \U0010ffff.

code is exactly 100bytes. Sorry for bad explanation, my english is not so good.

GolfScript,   ≈ fε0(fε0(fε0(fε0(fε0(fε0(fε0(fε0(fε0(126)))))))))

This is shamelessly adapted from another answer by @Howard, and incorporates suggestions by @Peter Taylor.

[[[[[[[[[,:o;'~'(]{o:?~%{(.{[(]{:^o='oo',$o+o=<}{\(@\+}/}{,:^}if;^?):?)*\+.}do;?}:f~]f]f]f]f]f]f]f]f

My understanding of GolfScript is limited, but I believe the * and ^ operators above are not the arithmetic operators forbidden by the OP.

(I will happily delete this if @Howard wants to submit his own version, which would doubtless be superior to this one anyway.)

This program computes a number that's approximately fε0(fε0(fε0(fε0(fε0(fε0(fε0(fε0(fε0(126))))))))) -- a nine-fold iteration of fε0 -- where fε0 is the function in the fast-growing hierarchy that grows at roughly the same rate as the Goodstein function. (fε0 grows so fast that the growth rates of Friedman's n(k) function and of k-fold Conway chained arrows are virtually insignificant even in comparison to just a single non-iterated fε0.)

Ruby, 94 characters, Friedman's n[26]

b,e=%w[aa zz]
t=*b..e
p(b=~/$/)while t=t.product([*b<<?a..e<<?z]).reject!{|*o,n|n[/#{o*'|'}/]}

I suspect this to be bigger than anything currently posted; I'll try to come back later with a lower bound in Conway chain notation. This code constructs all possible trees of words using the 26-letter alphabet in which the root node is a two-letter word, each child contains one more letter than its parent, and no later node contains an earlier node as a substring. It does this via dumb brute force which means it pegs my computer trying to calculate n[2] (which should be 11). It does get n[1] right, at least, and the code looks right to me. See the linked paper for proof that this terminates. At each step it prints the size of the largest leaf (by current rules the last and largest number it prints counts as the answer).

Bash + bc

NOTE: To stop once you've tried it (kills all bc instances):

for p in `pgrep bc`; do kill -9 $p; done`

Suggestion:

echo "((($$^$$)^$$)^$$)^$$"|bc and so on...

The $$ operator gives us the process ID.

Depending on your luck you can get a very high number here.

When repeated 7 times (5 + 2 + 2 * 7 + 2 * 7 + 3 = 38 chars...) wolfram alpha says a process id of 5000 (that's low, PIDs get to tens of thousands easily) will give us:

10^(10^(10^(10^(10^(10^(10^4.267064153307629))))))

Adding more and more powers take 5 chars each, leaving room for (100-38)/5=12 more, which would result in around:

10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^(10^4.267064153307629)))))))))))))))))))))

again, for a PID of only 5000.

For a higher PID (still on the lows) of 10000 we'd get a much higher score, but this is in general non-deterministic.

Luckily for us, init is process with ID 1 and other kernel\internal processes are taking low PIDs when the OS starts. This means we can expect the PID to be over 5000, if not higher.

Score: non-deterministic

Bonus: Score should be incrementing with attempts :D

C, undetermined (infinite?) output length / 62^3 67^3

l(){printf("%o",rand())-!!l&&l();}main(){srand(time(!l));l();}

l(){for(;printf("%o",rand())-!!l;l());}main(){srand(time(!l));l();}

I'd written this a few days prior, but was having a hard time figuring out the expected average length of the output. The program (given enough stack and time) eventually will terminate.

Was going to post when I figured the output length, but since Nate Eldridge's is similar, posting it now.

Originally had !'!' instead of !l; borrowed that part from Nate's answer.

I also had a similar version without srand, at 42 48 characters:

main(){printf("%o",rand())-!!'!'&&main();}

main(){for(;printf("%o",rand())-!!'!';main());}

Mine terminate (on average) earlier, compared to Nate's (10/RAND_MAX chance of popping up the stack instead of 1/RAND_MAX), but output more digits per iteration (~10.43 vs 1).

Edit: original actually terminated after RAND_MAX/20 iterations on average. Golfed too far.

Edit2: not enough rep to comment. Golfed Nate's entries below mine (64 and 44):

w(){for(printf("%o",w);rand();w());}main(){srand(time(!w));w();}

main(){for(printf("%o",'I');rand();main());}

C

The file size is 45 bytes.

The program is:

main(){long d='~~~~~~~~';while(--d)printf("%ld",d);}

And the number produced is larger than 10^(10^(10^1.305451600608433)).

The file I redirected std out to is currently over 16 Gb, and still growing.

The program would terminate in a reasonable amount of time if I had a better computer.

My score is uncomputable with double precision floating point.

Squeak Smalltalk cheat: > 2^^(2^30) / 71^3 chars

^((Float pi at:Float e)to:(Float e at:Float e))reduceRight:[:x :y|x<<y]

Little explanation:

With characters left, I could also use significandAsInteger, but these are big enough yet. How big?

The first iteration is greater than 2^31*2^(2^31) > 2^^5
The second iteration is greater than 2^31*2^(2^^5) > 2^^6
...
The 2^30th iteration is greater than 2^^(2^30)

I let readers do the conversion to base 10, That kind of number gives me some vertigos...

Since this number is represented in memory, then converted to decimal by way of multiplications and divisions, let's say it's highly hypothetical...
Anyway, the technique consisting in storing the number in memory (base 2) then print, especially in Squeak is completely disqualified...
Creating a very small number is fast:
[1<<15000000] timeToRun -> 4 (milliseconds)
But LargeInteger package is not based on gmp and rapidly inefficient for base 10 conversion (naive * and /)
Even if I install a karatsuba multiplication, it takes quite long to print on my mac mini:
[1<<15000000 printOn: NullStream new] bench -> '2,700 seconds.'

A more reasonable loop in 32-bit memory:

What I can really execute is the first loop (let's omit the -1 on first term):

[((Float e at:Float e)<<(Float e at:Float e))] timeToRun -> 8732 (milliseconds)

As said above, I can 'do it' but I can't 'print it' in reasonable time with Squeak, though I can manipulate it, like having a guess of number of decimal digits:

((((Float e at:Float e)<<(Float e at:Float e)) highBit - 1) * 1233 >> 12) + 1-> 702402458, or log: 10 -> 10^(10^8.8)

Perl - score ≈ 10↑↑4.1

$_=$^Fx($]<<-$]),/(?<R>(((((((((((((((((((.(?&R))*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*(??{print})/

Once again abusing perl's regex engine to grind through an unimaginable amount of combinations, this time using a recursive descent.

In the inner most of the expression, we have a bare . to prevent infinite recursion, and thus limiting the levels of recursion to the length of the string.

What we'll end up with is this:

/((((((((((((((((((((.[ ])*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*/
   ___________________/ \_____________________________________
  /                                                           \
  (((((((((((((((((((.[ ])*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*
   ___________________/ \_____________________________________
  /                                                           \
  (((((((((((((((((((.[ ])*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*
   ___________________/ \_____________________________________
  /                    .                                      \
                       .
                       .

... repeated 671088640 times, for a total of 12750684161 nestings - which quite thoroughly puts my previous attempt of 23 nestings to shame. Remarkably, perl doesn't even choke on this (once again, memory usage holds steady at about 1.3GB), although it will take quite a while before the first print statement is even issued.

From my previous analysis below, it can be concluded that the number of digits output will be on the order of (!12750684161)671088640, where !k is the Left Factorial of k (see A003422). We can approximate this as (k-1)!, which is strictly smaller, but on the same order of magnitude.

And if we ask wolframalpha:

...which barely changes my score at all. I thought for sure that'd be at least 10↑↑5. I guess the difference between 10↑↑4 and 10↑↑4.1 is a lot bigger than you'd think.


Perl - score ≈ 10↑↑4

$_=$^Fx($]<<-$]),/((((((((((((((((((((((.*.*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*)*(??{print})/

Abusing the perl regex engine to do some combinatorics for us. The embedded codeblock
(??{print}) will insert its result directly into the regex. Since $_ is composed entirely of 2s (and the result of print is always 1), this can never match, and sends perl spinning through all possible combinations, of which there's quite a few.

Constants used

$_ is then a string containing the digit 2 repeated 671088640 times. Memory usage is constant at about 1.3GB, output begins immediately.

Analysis

Let's define Pk(n) to be the number of times the print statement is executed, where k is the number of nestings, and n is the length of the string plus one (just because I don't feel like writing n+1 everywhere).

(.*.*)*
P2(n) = [2, 8, 28, 96, 328, 1120, 3824, 13056, ...]

((.*.*)*)*
P3(n) = [3, 18, 123, 900, 6693, 49926, 372615, 2781192, ...]

(((.*.*)*)*)*
P4(n) = [4, 56, 1044, 20272, 394940, 7696008, 149970676, 2922453344, ...]

((((.*.*)*)*)*)*
P5(n) = [5, 250, 16695, 1126580, 76039585, 5132387790, 346417023515, 23381856413800, ...]

(((((.*.*)*)*)*)*)*
P6(n) = [6, 1452, 445698, 137050584, 42142941390, 12958920156996, ...]

((((((.*.*)*)*)*)*)*)*
P7(n) = [7, 10094, 17634981, 30817120348, 53852913389555, ...]

etc. In general, the formula can be generalized as the following:

where

That is, the Left Factorial of k, i.e. the sum of all factorials less than k (see A003422).


I've been unable to determine closed forms for Dk and Ek, but this doesn't matter too much, if we observe that

and

With 23 nestings, this gives us an approximate score of:

This should be nearly exact, actually.

But to put this into a notation that's a bit easier to visualize, we can approximate the base of the inner exponent:

and then the exponent itself:

and then ask wolframalpha:

which you may as well just call 10↑↑4 and be done with it.

C, almost surely finite but infinite on average / 81^3

Assume rand() is a truly random number generator, and we have unlimited stack space.

void w(){printf("%d",!!w);while(rand()&!!w)w();}int main(){srand(time(!w));w();}

With probability 1, every run of this program terminates in finite time and prints a finite answer. Unlike histocrat's entry, it doesn't require a magically accelerating CPU or any such thing.

The expected value of the number produced is infinite. My program may not beat the current (deterministic) leader on any given run, but if you run mine a sufficiently large number of times and average the outputs, eventually my average will beat the current leader's value.

Explanation: This program performs a simple random walk on the stack. Each call to w() is a step down and each return from w() is a step up. Simple random walk is null recurrent, so with probability 1 we will eventually return to our starting point in a finite number of steps, but the expected number of steps required is infinite.

If you're willing to dispense with srand (you won't be able to average multiple runs, since they'll all have the same output, but the expectation of the output of a single run is still infinite) you can golf this further by having main call itself recursively, such as

 int main(){while(rand()&!!main)printf("%d",!main());}

Now it's 54 characters, and I bet there is a still better way to get 1 than !!main. (A useful fact: if you don't return a value from main it returns 0.)

PHP (a lot)/83^3

Script should run for 99 seconds and produce as much 9's concatenated as it can.

$n=strlen("alphabeta");ini_set('max_execution_time',intval($n.$n));while($n)echo$n;

MATLAB ???/53^3

In matlab the maximum character size is defined and therefore this program will terminate eventually.

Basically it starts like this:

9
(9)!
((9)!)!
(((9)!)!)!    
...

I have no clue how big the number is but this will be allowed to grow to a string with approximately 2^41-1 elements (on windows 64 bit). Some help in estimating the resulting number size would be appreciated.

s=char('z'-'A')
while true
   s=['(' s ')!']
   vpa(s)
end

Python 3 - 99 chars - (most likely) significantly larger than Graham's number

I've come up with a more quickly increasing function based on an extension of the Ackermann function.

A=lambda a,b,*c:A(~-a,A(a,~-b,*c)if b else a,*c)if a else(A(b,*c)if c else-~b);A(*range(ord('~')))

http://fora.xkcd.com/viewtopic.php?f=17&t=31598 inspired me, but you don't need to look there to understand my number.

Here is the modified version of the ackermann function that I'll be using in my analysis:

A(b)=b+1
A(0,b,...)=A(b,...)
A(a,0,...)=A(a-1,1,...)
A(a,b,...)=A(a-1,A(a,b-1,...),...)

My function A in the code above is technically not the same, but it is actually stronger, with the following statement to replace the third line of the above definition:

A(a,0,...)=A(a-1,a,...)

(a has to be at least 1, so it has to be stronger)

But for my purposes I will assume that it is the same as the simpler one, because the analysis is already partially done for Ackermann's function, and therefore for this function when it has two arguments.

My function is guaranteed to eventually stop recursing because it always either: removes an argument, decrements the first argument, or keeps the same first argument and decrements the second argument.

Analysis of size

Graham's number, AFAIK, can be represented as G(64) using:

G(n) = g^n(4)
g(n) = 3 ↑^(n) 3

Where a ↑^(n) b is knuth's up-arrow notation.

As well:

A(a,b) = 2 ↑^(a-2) (b+3) - 3
A(a,0) ≈ 2 ↑^(a-2) 3
g(n) ≈ A(n+2,0) // although it will be somewhat smaller due to using 2 instead of 3. Using a number larger than 0 should resolve this.
g(n) ≈ A(n+2,100) // this should be good enough for my purposes.

g(g(n)) ≈ A(A(n+2,100),100)

A(1,a+1,100) ≈ A(0,A(1,a,100),100) = A(A(1,a,100),100)

g^k(n) ≈ A(A(A(A(...(A(n+2,100)+2)...,100)+2,100)+2,100)+2,100) // where there are k instances of A(_,100)
A(1,a,100) ≈ A(A(A(A(...(A(100+2),100)...,100),100),100),100)

g^k(100) ≈ A(1,k,100)
g^k(4) < A(1,k,100) // in general
g^64(4) < A(1,64,100)

The number expressed in the program above is A(0,1,2,3,4,...,123,124,125).

Since g^64(4) is Graham's number, and assuming my math is correct then it is less than A(1,64,100), my number is significantly larger than Graham's number.

Please point out any mistakes in my math - although if there aren't any, this should be the largest number computed so far to answer this question.

Python 3: 98 chars, ≈ 10 ↑↑ 256

Using a variable-argument function:

E=lambda n,*C:E(*([~-n][:n]+[int("%d%d"%(k,k))for k in C]))if C else n;print(E(*range(ord('~'))))

Effectively, E decrements the first argument while increasing the rest of the arguments, except that instead of putting -1 in the arguments it drops the argument. Since every cycle either decrements the first argument or decreases the number of arguments, this is guaranteed to terminate. The increasing function used is int("%d%d"%(k,k)), which gives a result between k**2 + 2*k and 10*k**2 + k. My code does use the * symbol - but not as multiplication. It's used to work with variable numbers of arguments, which I think should follow the rules since the clear point of the rules was to restrict specific operations, not the symbols themselves.

Some examples of how large E gets quickly:

E(1,1) = 1111
E(0,1,1) = E(11,11) = (approx) 10^8191
E(1,1,1) = E(1111,1111) = (approx) 10^(10^335)
E(2,1,1) = E(11111111,11111111) = (approx) 10^(10^3344779)

Only the first two of those are runnable on my computer in a reasonable amount of time.

Then, E is invoked by E(*range(ord('~'))) - which means:

E(0,1,2,3,4,5, ... ,121,122,123,124,125)

I'm not entirely sure how large this is (I've been trying to approximate it to no avail) - but it's obvious that it's ~really~ big.

As an example, about twelve cycles in, the result is around: (technically a bit more than)

E(2**27211,2**27211,2**27212,2**27212,2**27212,2**27212,2**27213,2**27213,2**54423,2**54423,2**54423,2**54423,2**54423,2**54423,2**54423,2**54423,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54424,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54425,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**54426,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636,2**81636)

Result estimation:

If we approximate the increasing step by lambda k: 10 * k**2, the function can be described as

E(n, C₁, C₂, ... Cᵥ) ≈ E(10^(n²/2) ⋅ C₁²ⁿ, 10^(n²/2) ⋅ C₂²ⁿ, ... 10^(n²/2) ⋅ Cᵥ²ⁿ)
                     ≈ E(10^((10^(n²/2) ⋅ C₁²ⁿ)²/2) ⋅ C₂^(2n  ⋅ 10^(n²/2) ⋅ C₁²ⁿ), ... )
                     ≈ E(10^((10^n² ⋅ C₁⁴ⁿ)/2) ⋅ C₂^(2n  ⋅ 10^(n²/2) ⋅ C₁²ⁿ), ... )

The relevant thing we're doing here is build up a tower of powers of ten, so the eventual score can be approximated as 10 ↑↑ 256.

Better (although partial) result estimation:

This uses the same 10 * k**2 as the other estimation.

E(0, b) = 10 * b**2
E(1, b) = 10 * (10 * b**2)**2 = 10 * 100 * b**4 = 10**3 * b**4
E(2, b) = 10 * (10**3 * b**4)**2 = 10 * (10**6 * b**8) = 10**7 * b**8
E(a, b) = 10**(2**(a+1)-1) * b**(2**(a+1))

Under the previous estimation, it would be:

E(a, b) = 10**(a**2/a) * b**(2*a)

Which is significantly smaller than the actual value since it uses a**2 instead of 2**a for the 10 and uses a*2 instead of 2**a for the b.

x86 machine code - 100 bytes (Assembled as MSDOS .com file)

Note: may bend the rules a little

This program will output 2(65536*8+32) nines which would put the score at (102524320-1) / 1000000

As a counter this program uses the entire stack (64kiB) plus two 16bit registers

Assembled code:

8A3E61018CD289166101892663018ED331E4BB3A01438A2627
018827A0300130E4FEC4FEC4FEC410E4FEC400E431C95139CC
75FB31D231C931DBCD3F4175F94275F45941750839D4740D59
4174F85131C939D475F9EBDD8B266301A161018ED0C3535858

Assembly:

ORG 0x100

SECTION .TEXT
            mov bh, [b_ss]
            mov dx, ss
            mov [b_ss], dx
            mov [b_sp], sp
            mov ss, bx
            xor sp, sp
            mov bx, inthackdst
            inc bx
            mov ah, [inthacksrc]
            mov [bx], ah
            mov al, [nine]
            xor ah, ah
            inc ah
            inc ah
            inc ah
inthacksrc: adc ah, ah
            inc ah
            add ah, ah
            xor cx, cx
fillstack:  push cx
nine:       cmp sp, cx
            jnz fillstack
regloop:    xor dx, dx
dxloop:     xor cx, cx
cxloop:     xor bx, bx
inthackdst: int '?'
            inc cx
            jnz cxloop
            inc dx
            jnz dxloop
            pop cx
            inc cx
            jnz restack
popmore:    cmp sp, dx
            jz end
            pop cx
            inc cx
            jz popmore
restack:    push cx
            xor cx, cx
            cmp sp, dx
            jnz restack
            jmp regloop
end:        mov sp, [b_sp]
            mov ax, [b_ss]
            mov ss, ax
            ret

b_ss:       dw 'SX'
b_sp:       db 'X'

Haskell - Ackermann function applied to its result 20 times - 99 characters

This is the best haskell solution I can come up with based on the ackermann function - you may notice some similarities to n.m.'s solution, the i=round$log pi was inspired from there and the rest is coincidence :D

i=round$log pi
n?m|m<i=n+i|n<i=i?(m-i)|True=(n-i)?m?(m-i)
a n=n?n
b=a.a.a.a
main=print$b$b$b$b$b$i

It runs the ackermann function on itself 20 times, starting at one, the sequence being

As for the estimation, wikipedia says:

a(m,n) = 2↑m-2(n+3) - 3

From this we can see a3(1) = a(61,61) = 2↑5964 + 3, which is clearly greater than g1 = 3↑43, unless the 3 at the start is far more important than I think. After that, each level does the following (discarding the insignificant constants in an):

If these are approximately equivalent, then a20(1) ~= g18. The final term in an, (an-1) is far greater than 3, so it is potentially higher than g18. I'll see if I can figure out if that would boost it even a single iteration and report back.

This is madness, to print the number it must be in the memory somehow, otherwise it would be considered as printing many separate numbers. I've written a JavaScript code and I've launched it in FireBug console. The largest result I've get with following code, on the quite strong workstation (8Core, 8GB RAM, haven't noted more details):

The code:

var e=Math.E,s=(e+'').replace('.',''),b=parseInt(s)
try{for(var i=e;i<b;i+=i)s+=s}catch(e){}
s

Code length: 94 characters (counted newlines as 1, you can replace them with semicolons and then it will be undoubtly 1). 94^3=830584. Test generated: '2718281828459045' repeated so many times, that the length of s was 1073741824 (over 1GB allocated). So the number is 2,7182*10^1073741824, and the points are:

3,27*10^1073741817

You can try to do that, but Firefox on my home laptop has crashed, so you need a really strong machine.

But many people has written the snipplets, noone has reported to be able to run! So let's remove that try.. catch and analyse what theoretically could happen:

The code:

var e=Math.E,s=(e+'').replace('.',''),b=parseInt(s);for(var i=e;i<b;i+=i)s+=s;s

Code length: 79 characters, 79^3=493039 The code will make 50 iterations generating the string of the length of 18014398509481984. Please verify if it would be able to store on 64 bit machine, but because the string is duplicated, there could be a theoretical machine able to compress such items in memory. However, I have no idea if there is enough energy in solar system to display the whole number on any console...

Anyway, we have number 2,7182*10^18014398509481984 divided by 79^3, so the poins are:

5,5*10^18014398509481977

Fill free to correct any mathematical errors, I've became a typical coding machine :D

bash script

ls -lR|sed s/[^[:digit:]]//g|tr -d '\n'

Score: Depends on system. For my system: Approx. 10^(9031890.226806)

Here's how I calculated the score...

Script length=39 (L)

Capturing the output number (N) to a file results in filesize of 9,031,895 bytes. The file size (9031895 bytes) is approximately equal to log10(N). (The "actual" log10(N) would be something like: 9031894.99999999####+ (or so).

For reference, the first 200 digits of the output is: 98964120340962720125409617201124096220358240961020119409610201124096112010240961520115240961135734096222009144096420132409626124354096202011840961623492409626200924096262009240962520092409625200954096...

Calculating score:

score=(N)/(L^3)
score=10^( log10(N)-log10(39^3) )
score=10^( log10(N)-log10(59319) )

log10(N)=9031895
log10(59319)=4.773194

score=10^(9031895-4.773194)
score=10^(9031890.226806)

Windows 2000 - Windows 8 (3907172 / 23³ = 321)

NOTE: DON'T F'ING RUN THIS!

Save the following to a batch file and run it as Administrator.

CD|Format D:/FS:FAT/V/Q

Output when run on a 4TB drive with the first printed number in bold.

Insert new disk for drive D:
and press ENTER when ready... The type of the file system is NTFS.
The new file system is FAT.
QuickFormatting 3907172M
The volume is too big for FAT16/12.

Ruby, probabilistically infinite, 54 characters

x='a'.ord
x+=x while x.times.map(&:rand).uniq[x/x]
p x

x is initialized to 97. We then iterate the following procedure: Generate x random numbers between 0 and 1. If they are all the same, then terminate and print x. Otherwise, double x and repeat. Since Ruby's random numbers have 17 digits of precision, the odds of terminating at any step are 1 in (10e17)^x. The probability of terminating within n steps is therefore the sum for x=1 to n of (1/10e17)^(2^n), which converges to 1/10e34. This means that for any number, no matter how large, it is overwhelmingly unlikely that this program outputs a lesser number.

Now, of course, the philosophical question is whether a program that has less than a 1 in 10^34 chance of terminating by step n for any n can be said to ever terminate. If we assume not only infinite time and power, but that the program is given the ability to run at increasing speed at a rate that exceeds the rate at which the probability of terminating decreases, we can, I believe, in fact make the probability of terminating by time t arbitrarily close to 1.

C, ??? (91 characters)

main(int d,char**v){long c='\t'-'\b';for(;c;c++)for(d-=d;(*v)[d];d++)printf("%llu",(*v)[d]);}

If I could use ^, I'd write d^=d, but alas.

Run through argv[0] and print its contents as an unsigned long long.Repeat 2long-1 times.

Since argv[0] is the program's path, I'd assume the smallest possible value printed by this program (on Windows) would be A:\ .com with a 32 bit long. I'm not so sure on that though, smaller paths are probably possible.

GolfScript, score: way too much

OK, how big a number can we print in a few chars of GolfScript?

Let's start with the following code (thanks, Ben!), which prints 126:

'~'(

Next, let's repeat it 126 times, giving us a number equal to about 1.26126 × 10377:

'~'(.`*

(That's string repetition, not multiplication, so it should be OK under the rules.)

Now, let's repeat that 378-digit number a little over 10377 times:

'~'(.`*.~*

You'll never actually see this program finish, since it tries to compute a number with about 10380 ≈ 21140 digits. No computer ever built could store a number that big, nor could such a computer ever be built using known physics; the number of atoms in the observable universe is estimated to be about 1080, so even if we could somehow use all the matter in the universe to store this huge number, we'd still somehow have to cram about 10380 / 1080 = 10300 digits into each atom!

But let's assume that we have God's own GolfScript interpreter, capable of running such a calculation, and that we're still not satisfied. OK, let's do that again!

'~'(.`*.~*.~*

The output of this program, if it could complete, would have about 1010383 digits, and so would equal approximately 101010383.

But wait! That program is getting kind of repetitive... why don't we turn it into a loop?

'~'(.`*.{.~*}*

Here, the loop body gets run about 10377 times, giving us a theoretical output consisting of about 1010⋰10377 digits or so, where the tower of iterated powers of 10 is about 10377 steps long. (Actually, that's a gross underestimate, since I'm neglecting the fact that the number being repeated also gets longer every time, but relatively speaking that's a minor issue.)

But we're not done yet. Let's add another loop!

'~'(.`*.{.{.~*}*}*

To even properly write down an approximation of such numbers requires esoteric mathematical notation. For example, in Knuth up-arrow notation, the number (theoretically) output by the program above should be about 10 ↑3 10377, give or take a few (or 10377) powers of ten, assuming I did the math right.

Numbers like this get way beyond just "incredibly huge", and into the realm of "inconceivable". As in, not only is it impossible to count up to or to write down such numbers (we crossed beyond that point already at the third example above), but they literally have no conceivable use or existence outside abstract mathematics. We can prove, from the axioms of mathematics, that such numbers exist, just like we can prove from the GolfScript specification that program above would compute them, if the limits of reality and available storage space did not intervene), but there's literally nothing in the physical universe that we could use them to count or measure in any sense.

Still, mathematicians do sometimes make use of even larger numbers. (Theoretically) computing numbers that large takes a little bit more work — instead of just nesting more loops one by one, we need to use recursion to telescope the depth of the nested loops. Still, in principle, it should be possible to write a short GolfScript program (well under 100 bytes, I would expect) to (theoretically) compute any number expressible in, say, Conway chained arrow notation; the details are left as an exercise. ;-)

C++ - 101 bytes

This runs for exactly 5 seconds - you can't see it, but I have the ASCII character for 5 in there:

#include<iostream>
#include<ctime>
int main(){for(int n=time(NULL);time(NULL)<n+'';)std::cout<<n;}

I wouldn't know how large the number is - large enough that my computer wouldn't be able to calculate my score. I ran this program outputting the number into .txt file, and it produced a file of 16.585 MB.

Screenshot of code in text document:

Image of code.