g | x | w | all
Bytes Lang Time Link
nanThis is my first answer250718T194202ZDon Hatc
nan2044 i's250722T032654ZDon Hatc
nan2046 \$i\$’s250721T021119ZAnders K
nan328 \$i\$'s250717T053338ZWarpPrim
22448 \$i\$'s250715T204645ZSeggan
55732 \$i\$'s250717T031438Ztata

(This is my first answer, using a method that uses O(n²) i's to get n digits of accuracy. My second answer is better, using only O(n) i's.)

2016 \$i\$'s, 29 digits, 295.26 points


TL;DR:

$$ i^{iii}{(i^{ii^i})}^{2}{(i^{iii{(i^i)}^{2}})}^{3}i^{iii{(i^i)}^{3}}{(i^{iii{(i^i)}^{4}})}^{3}i^{iii{(i^i)}^{5}}i^{i{(i^i)}^{6}}i^{i{(i^i)}^{7}}i^{i{(i^i)}^{8}}{(i^{iii{(i^i)}^{9}})}^{3}i^{iii{(i^i)}^{11}}{(i^{iii{(i^i)}^{12}})}^{2}i^{i{(i^i)}^{13}}i^{i{(i^i)}^{14}}i^{i{(i^i)}^{15}}{(i^{i{(i^i)}^{16}})}^{2}{(i^{iii{(i^i)}^{17}})}^{3}i^{i{(i^i)}^{18}}i^{i{(i^i)}^{19}}{(i^{iii{(i^i)}^{23}})}^{2}{(i^{iii{(i^i)}^{24}})}^{3}i^{i{(i^i)}^{25}}i^{i{(i^i)}^{27}}i^{i{(i^i)}^{28}}{(i^{iii{(i^i)}^{29}})}^{3}i^{iii{(i^i)}^{30}}i^{iii{(i^i)}^{32}}i^{i{(i^i)}^{33}}i^{i{(i^i)}^{34}}i^{iii{(i^i)}^{36}}{(i^{iii{(i^i)}^{38}})}^{2}i^{i{(i^i)}^{40}}i^{iii{(i^i)}^{41}}i^{iii{(i^i)}^{44}} $$

i^(i*i*i)  *  (i^(i * i^i))^2  *  (i^(i*i*i * (i^i)^2))^3  *  i^(i*i*i * (i^i)^3)  *  (i^(i*i*i * (i^i)^4))^3  *  i^(i*i*i * (i^i)^5)  *  i^(i * (i^i)^6)  *  i^(i * (i^i)^7)  *  i^(i * (i^i)^8)  *  (i^(i*i*i * (i^i)^9))^3  *  i^(i*i*i * (i^i)^11)  *  (i^(i*i*i * (i^i)^12))^2  *  i^(i * (i^i)^13)  *  i^(i * (i^i)^14)  *  i^(i * (i^i)^15)  *  (i^(i * (i^i)^16))^2  *  (i^(i*i*i * (i^i)^17))^3  *  i^(i * (i^i)^18)  *  i^(i * (i^i)^19)  *  (i^(i*i*i * (i^i)^23))^2  *  (i^(i*i*i * (i^i)^24))^3  *  i^(i * (i^i)^25)  *  i^(i * (i^i)^27)  *  i^(i * (i^i)^28)  *  (i^(i*i*i * (i^i)^29))^3  *  i^(i*i*i * (i^i)^30)  *  i^(i*i*i * (i^i)^32)  *  i^(i * (i^i)^33)  *  i^(i * (i^i)^34)  *  i^(i*i*i * (i^i)^36)  *  (i^(i*i*i * (i^i)^38))^2  *  i^(i * (i^i)^40)  *  i^(i*i*i * (i^i)^41)  *  i^(i*i*i * (i^i)^44)

$$ = 3.14159265358979323846264338327\;787... $$ That's 2016 i's, giving 29.79 or so decimal digits of accuracy (literally 29 correct digits after the decimal point, delimited by the space above), 295.26 or so points.


Details

Strategy: look for an answer of the form $$ i^A i^B i^C i^D ... \approx \pi $$ where \$A,B,C,D,...\$ are expressible subexpressions whose values get closer and closer to 0, thus progressively refinining the approximation.

That is, $$ \begin{aligned} i^{A+B+C+D+...} &\approx \pi \\ A+B+C+D+... &\approx \mathrm{log}_i(\pi) \\ &= -(2\,\mathrm{ln}(\pi)/\pi)i \\ &= -.72875... i. \end{aligned} $$

So, how do we express an arbitrary number like that as a sum of expressible expressions \$A,B,C,D,...\$?

Well, first observe that we can express \$i^i\$ = \$e^{-\pi/2}\ = .207...\$, so then we can use integer powers of that as building blocks, to express any positive real number as a sum of expressible expressions: $$ \begin{aligned} i^i &= .207... \\ (i^i)^2 &= .0432... \\ (i^i)^3 &= .0089... \\ (i^i)^4 &= .00186... \\ (i^i)^5 &= .000388... \\ \end{aligned} $$ So it should be straightforward to express the positive real number \$2\;ln(\pi)/\pi=.72875...\$ as a sum (essentially a numeral) $$ 2\;ln(\pi)/\pi = .72875... = c_1 i^i + c_2 (i^i)^2 + c_3 (i^i)^3 + ... $$ where each \$c_k \in \{0,1,2,3,4\}\$.

But the number we want to express as a sum isn't a positive real number; instead, it's \$-i=iii\$ times a positive real number. So just multiply everything by \$-i=iii\$: $$ -.72875... i = c_1 iiii^i + c_2 iii(i^i)^2 + c_3 iii(i^i)^3 + ... $$ That's the form we wanted, where: $$\begin{aligned} A &= c_1 iii{i^i} \\ B &= c_2 iii{(i^i)}^2 \\ C &= c_3 iii{(i^i)}^3 \\ D &= c_4 iii{(i^i)}^4 \\ ... \end{aligned}$$

So, once we compute \$c_1,c_2,c_3,...\$, the answer will be: $$\begin{aligned} &\;i^A i^B i^C i^D ... \\ =&\;i^{c_1 iiii^i} i^{c_2 iii(i^i)^2} i^{c_3 iii(i^i)^3} ... \\ =&\;(i^{iiii^i})^{c_1} (i^{iii(i^i)^2})^{c_2} (i^{iii(i^i)^3})^{c_3} ... \end{aligned}$$

So what are the \$c_k\$'s?

We can think of this as writing \$.72875...\$ as a numeral in base \$1/i^i\$ using digits \$\{0,1,2,3,4\}\$: $$\begin{aligned} &\;0 . c_1 c_2 c_3 c_4 c_5 ... (\mathrm{in\;base\;}1/i^i) \\ =&\;0.322014034102330024022213204120041211122110013343010242030034222242433112410312213131412423322030120... \end{aligned}$$

I'll include a program to compute these digits at the end of this post. Reading off the first handful of them from above: \$c_1=3, c_2=2, c_3=2, c_4=0, c_5=1\$. So the corresponding not-too-ambitious approximation is: $$\begin{aligned} & {(i^{iiii^i})}^{3}{(i^{iii{(i^i)}^{2}})}^{2}{(i^{iii{(i^i)}^{3}})}^{2}i^{iii{(i^i)}^{5}} \\ =& i^{iiii^i}i^{iiii^i}i^{iiii^i}i^{iiii^ii^i}i^{iiii^ii^i}i^{iiii^ii^ii^i}i^{iiii^ii^ii^i}i^{iiii^ii^ii^ii^ii^i} \end{aligned}$$

(i^(i*i*i * i^i))^3  *  (i^(i*i*i * (i^i)^2))^2  *  (i^(i*i*i * (i^i)^3))^2  *  i^(i*i*i * (i^i)^5)
i^(i*i*i * i^i) * i^(i*i*i * i^i) * i^(i*i*i * i^i)  *  i^(i*i*i * i^i*i^i) * i^(i*i*i * i^i*i^i)  *  i^(i*i*i * i^i*i^i*i^i) * i^(i*i*i * i^i*i^i*i^i)  *  i^(i*i*i * i^i*i^i*i^i*i^i*i^i)

$$ = 3.139933... $$ That's 68 i's, giving 2.78 or so or so digits of accuracy, 33.7 points.

Going up to \$c_{18}\$ beats the previous high score: $$ {(i^{iiii^i})}^{3}{(i^{iii{(i^i)}^{2}})}^{2}{(i^{iii{(i^i)}^{3}})}^{2}i^{iii{(i^i)}^{5}}{(i^{iii{(i^i)}^{6}})}^{4}{(i^{iii{(i^i)}^{8}})}^{3}{(i^{iii{(i^i)}^{9}})}^{4}i^{iii{(i^i)}^{10}}{(i^{iii{(i^i)}^{12}})}^{2}{(i^{iii{(i^i)}^{13}})}^{3}{(i^{iii{(i^i)}^{14}})}^{3}{(i^{iii{(i^i)}^{17}})}^{2}{(i^{iii{(i^i)}^{18}})}^{4} \ $$

(i^(i*i*i * i^i))^3  *  (i^(i*i*i * (i^i)^2))^2  *  (i^(i*i*i * (i^i)^3))^2  *  i^(i*i*i * (i^i)^5)  *  (i^(i*i*i * (i^i)^6))^4  *  (i^(i*i*i * (i^i)^8))^3  *  (i^(i*i*i * (i^i)^9))^4  *  i^(i*i*i * (i^i)^10)  *  (i^(i*i*i * (i^i)^12))^2  *  (i^(i*i*i * (i^i)^13))^3  *  (i^(i*i*i * (i^i)^14))^3  *  (i^(i*i*i * (i^i)^17))^2  *  (i^(i*i*i * (i^i)^18))^4

[expanded version omitted because it's getting too long] $$ = 3.141592653589\;511... $$ That's 782 i's, giving 12.55 or so digits of accuracy, 126.282 points.

There isn't really any limit to this in sight, but I'll shoot for over 1000 points by taking it to \$c_{152}\$: $$ {(i^{iiii^i})}^{3}{(i^{iii{(i^i)}^{2}})}^{2}{(i^{iii{(i^i)}^{3}})}^{2}i^{iii{(i^i)}^{5}}{(i^{iii{(i^i)}^{6}})}^{4}{(i^{iii{(i^i)}^{8}})}^{3}{(i^{iii{(i^i)}^{9}})}^{4}i^{iii{(i^i)}^{10}}{(i^{iii{(i^i)}^{12}})}^{2}{(i^{iii{(i^i)}^{13}})}^{3}{(i^{iii{(i^i)}^{14}})}^{3}{(i^{iii{(i^i)}^{17}})}^{2}{(i^{iii{(i^i)}^{18}})}^{4}{(i^{iii{(i^i)}^{20}})}^{2}{(i^{iii{(i^i)}^{21}})}^{2}{(i^{iii{(i^i)}^{22}})}^{2}i^{iii{(i^i)}^{23}}{(i^{iii{(i^i)}^{24}})}^{3}{(i^{iii{(i^i)}^{25}})}^{2}{(i^{iii{(i^i)}^{27}})}^{4}i^{iii{(i^i)}^{28}}{(i^{iii{(i^i)}^{29}})}^{2}{(i^{iii{(i^i)}^{32}})}^{4}i^{iii{(i^i)}^{33}}{(i^{iii{(i^i)}^{34}})}^{2}i^{iii{(i^i)}^{35}}i^{iii{(i^i)}^{36}}i^{iii{(i^i)}^{37}}{(i^{iii{(i^i)}^{38}})}^{2}{(i^{iii{(i^i)}^{39}})}^{2}i^{iii{(i^i)}^{40}}i^{iii{(i^i)}^{41}}i^{iii{(i^i)}^{44}}{(i^{iii{(i^i)}^{45}})}^{3}{(i^{iii{(i^i)}^{46}})}^{3}{(i^{iii{(i^i)}^{47}})}^{4}{(i^{iii{(i^i)}^{48}})}^{3}i^{iii{(i^i)}^{50}}{(i^{iii{(i^i)}^{52}})}^{2}{(i^{iii{(i^i)}^{53}})}^{4}{(i^{iii{(i^i)}^{54}})}^{2}{(i^{iii{(i^i)}^{56}})}^{3}{(i^{iii{(i^i)}^{59}})}^{3}{(i^{iii{(i^i)}^{60}})}^{4}{(i^{iii{(i^i)}^{61}})}^{2}{(i^{iii{(i^i)}^{62}})}^{2}{(i^{iii{(i^i)}^{63}})}^{2}{(i^{iii{(i^i)}^{64}})}^{2}{(i^{iii{(i^i)}^{65}})}^{4}{(i^{iii{(i^i)}^{66}})}^{2}{(i^{iii{(i^i)}^{67}})}^{4}{(i^{iii{(i^i)}^{68}})}^{3}{(i^{iii{(i^i)}^{69}})}^{3}i^{iii{(i^i)}^{70}}i^{iii{(i^i)}^{71}}{(i^{iii{(i^i)}^{72}})}^{2}{(i^{iii{(i^i)}^{73}})}^{4}i^{iii{(i^i)}^{74}}{(i^{iii{(i^i)}^{76}})}^{3}i^{iii{(i^i)}^{77}}{(i^{iii{(i^i)}^{78}})}^{2}{(i^{iii{(i^i)}^{79}})}^{2}i^{iii{(i^i)}^{80}}{(i^{iii{(i^i)}^{81}})}^{3}i^{iii{(i^i)}^{82}}{(i^{iii{(i^i)}^{83}})}^{3}i^{iii{(i^i)}^{84}}{(i^{iii{(i^i)}^{85}})}^{4}i^{iii{(i^i)}^{86}}{(i^{iii{(i^i)}^{87}})}^{2}{(i^{iii{(i^i)}^{88}})}^{4}{(i^{iii{(i^i)}^{89}})}^{2}{(i^{iii{(i^i)}^{90}})}^{3}{(i^{iii{(i^i)}^{91}})}^{3}{(i^{iii{(i^i)}^{92}})}^{2}{(i^{iii{(i^i)}^{93}})}^{2}{(i^{iii{(i^i)}^{95}})}^{3}i^{iii{(i^i)}^{97}}{(i^{iii{(i^i)}^{98}})}^{2}{(i^{iii{(i^i)}^{102}})}^{2}{(i^{iii{(i^i)}^{104}})}^{4}{(i^{iii{(i^i)}^{105}})}^{3}{(i^{iii{(i^i)}^{106}})}^{3}i^{iii{(i^i)}^{107}}{(i^{iii{(i^i)}^{108}})}^{2}i^{iii{(i^i)}^{110}}{(i^{iii{(i^i)}^{112}})}^{3}{(i^{iii{(i^i)}^{113}})}^{3}{(i^{iii{(i^i)}^{114}})}^{3}i^{iii{(i^i)}^{115}}i^{iii{(i^i)}^{117}}{(i^{iii{(i^i)}^{118}})}^{3}i^{iii{(i^i)}^{119}}{(i^{iii{(i^i)}^{120}})}^{3}{(i^{iii{(i^i)}^{121}})}^{3}{(i^{iii{(i^i)}^{123}})}^{2}i^{iii{(i^i)}^{124}}{(i^{iii{(i^i)}^{125}})}^{4}{(i^{iii{(i^i)}^{126}})}^{2}{(i^{iii{(i^i)}^{127}})}^{3}{(i^{iii{(i^i)}^{128}})}^{2}{(i^{iii{(i^i)}^{129}})}^{4}{(i^{iii{(i^i)}^{130}})}^{2}i^{iii{(i^i)}^{131}}{(i^{iii{(i^i)}^{132}})}^{4}{(i^{iii{(i^i)}^{134}})}^{4}{(i^{iii{(i^i)}^{135}})}^{3}i^{iii{(i^i)}^{136}}{(i^{iii{(i^i)}^{137}})}^{3}{(i^{iii{(i^i)}^{138}})}^{2}{(i^{iii{(i^i)}^{140}})}^{3}{(i^{iii{(i^i)}^{141}})}^{3}{(i^{iii{(i^i)}^{142}})}^{3}i^{iii{(i^i)}^{143}}i^{iii{(i^i)}^{144}}{(i^{iii{(i^i)}^{146}})}^{3}{(i^{iii{(i^i)}^{147}})}^{4} $$

(i^(i*i*i * i^i))^3  *  (i^(i*i*i * (i^i)^2))^2  *  (i^(i*i*i * (i^i)^3))^2  *  i^(i*i*i * (i^i)^5)  *  (i^(i*i*i * (i^i)^6))^4  *  (i^(i*i*i * (i^i)^8))^3  *  (i^(i*i*i * (i^i)^9))^4  *  i^(i*i*i * (i^i)^10)  *  (i^(i*i*i * (i^i)^12))^2  *  (i^(i*i*i * (i^i)^13))^3  *  (i^(i*i*i * (i^i)^14))^3  *  (i^(i*i*i * (i^i)^17))^2  *  (i^(i*i*i * (i^i)^18))^4  *  (i^(i*i*i * (i^i)^20))^2  *  (i^(i*i*i * (i^i)^21))^2  *  (i^(i*i*i * (i^i)^22))^2  *  i^(i*i*i * (i^i)^23)  *  (i^(i*i*i * (i^i)^24))^3  *  (i^(i*i*i * (i^i)^25))^2  *  (i^(i*i*i * (i^i)^27))^4  *  i^(i*i*i * (i^i)^28)  *  (i^(i*i*i * (i^i)^29))^2  *  (i^(i*i*i * (i^i)^32))^4  *  i^(i*i*i * (i^i)^33)  *  (i^(i*i*i * (i^i)^34))^2  *  i^(i*i*i * (i^i)^35)  *  i^(i*i*i * (i^i)^36)  *  i^(i*i*i * (i^i)^37)  *  (i^(i*i*i * (i^i)^38))^2  *  (i^(i*i*i * (i^i)^39))^2  *  i^(i*i*i * (i^i)^40)  *  i^(i*i*i * (i^i)^41)  *  i^(i*i*i * (i^i)^44)  *  (i^(i*i*i * (i^i)^45))^3  *  (i^(i*i*i * (i^i)^46))^3  *  (i^(i*i*i * (i^i)^47))^4  *  (i^(i*i*i * (i^i)^48))^3  *  i^(i*i*i * (i^i)^50)  *  (i^(i*i*i * (i^i)^52))^2  *  (i^(i*i*i * (i^i)^53))^4  *  (i^(i*i*i * (i^i)^54))^2  *  (i^(i*i*i * (i^i)^56))^3  *  (i^(i*i*i * (i^i)^59))^3  *  (i^(i*i*i * (i^i)^60))^4  *  (i^(i*i*i * (i^i)^61))^2  *  (i^(i*i*i * (i^i)^62))^2  *  (i^(i*i*i * (i^i)^63))^2  *  (i^(i*i*i * (i^i)^64))^2  *  (i^(i*i*i * (i^i)^65))^4  *  (i^(i*i*i * (i^i)^66))^2  *  (i^(i*i*i * (i^i)^67))^4  *  (i^(i*i*i * (i^i)^68))^3  *  (i^(i*i*i * (i^i)^69))^3  *  i^(i*i*i * (i^i)^70)  *  i^(i*i*i * (i^i)^71)  *  (i^(i*i*i * (i^i)^72))^2  *  (i^(i*i*i * (i^i)^73))^4  *  i^(i*i*i * (i^i)^74)  *  (i^(i*i*i * (i^i)^76))^3  *  i^(i*i*i * (i^i)^77)  *  (i^(i*i*i * (i^i)^78))^2  *  (i^(i*i*i * (i^i)^79))^2  *  i^(i*i*i * (i^i)^80)  *  (i^(i*i*i * (i^i)^81))^3  *  i^(i*i*i * (i^i)^82)  *  (i^(i*i*i * (i^i)^83))^3  *  i^(i*i*i * (i^i)^84)  *  (i^(i*i*i * (i^i)^85))^4  *  i^(i*i*i * (i^i)^86)  *  (i^(i*i*i * (i^i)^87))^2  *  (i^(i*i*i * (i^i)^88))^4  *  (i^(i*i*i * (i^i)^89))^2  *  (i^(i*i*i * (i^i)^90))^3  *  (i^(i*i*i * (i^i)^91))^3  *  (i^(i*i*i * (i^i)^92))^2  *  (i^(i*i*i * (i^i)^93))^2  *  (i^(i*i*i * (i^i)^95))^3  *  i^(i*i*i * (i^i)^97)  *  (i^(i*i*i * (i^i)^98))^2  *  (i^(i*i*i * (i^i)^102))^2  *  (i^(i*i*i * (i^i)^104))^4  *  (i^(i*i*i * (i^i)^105))^3  *  (i^(i*i*i * (i^i)^106))^3  *  i^(i*i*i * (i^i)^107)  *  (i^(i*i*i * (i^i)^108))^2  *  i^(i*i*i * (i^i)^110)  *  (i^(i*i*i * (i^i)^112))^3  *  (i^(i*i*i * (i^i)^113))^3  *  (i^(i*i*i * (i^i)^114))^3  *  i^(i*i*i * (i^i)^115)  *  i^(i*i*i * (i^i)^117)  *  (i^(i*i*i * (i^i)^118))^3  *  i^(i*i*i * (i^i)^119)  *  (i^(i*i*i * (i^i)^120))^3  *  (i^(i*i*i * (i^i)^121))^3  *  (i^(i*i*i * (i^i)^123))^2  *  i^(i*i*i * (i^i)^124)  *  (i^(i*i*i * (i^i)^125))^4  *  (i^(i*i*i * (i^i)^126))^2  *  (i^(i*i*i * (i^i)^127))^3  *  (i^(i*i*i * (i^i)^128))^2  *  (i^(i*i*i * (i^i)^129))^4  *  (i^(i*i*i * (i^i)^130))^2  *  i^(i*i*i * (i^i)^131)  *  (i^(i*i*i * (i^i)^132))^4  *  (i^(i*i*i * (i^i)^134))^4  *  (i^(i*i*i * (i^i)^135))^3  *  i^(i*i*i * (i^i)^136)  *  (i^(i*i*i * (i^i)^137))^3  *  (i^(i*i*i * (i^i)^138))^2  *  (i^(i*i*i * (i^i)^140))^3  *  (i^(i*i*i * (i^i)^141))^3  *  (i^(i*i*i * (i^i)^142))^3  *  i^(i*i*i * (i^i)^143)  *  i^(i*i*i * (i^i)^144)  *  (i^(i*i*i * (i^i)^146))^3  *  (i^(i*i*i * (i^i)^147))^4  *  i^(i*i*i * (i^i)^148)  *  i^(i*i*i * (i^i)^149)  *  (i^(i*i*i * (i^i)^150))^2  *  (i^(i*i*i * (i^i)^151))^4  *  (i^(i*i*i * (i^i)^152))^3

$$ = 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982\;095 $$ That's 46332 i's, giving 103.28 or so decimal digits of accuracy (literally 102 correct digits after the decimal point, delimited by the space or linebreak above), 1006.8484588 points.


UPDATE 2025/07/19 for new rules:

In order to stay within the new limit of 2048 i's while using the scheme described above, we have to stop at \$c_{31}\$ (which is the same as stopping at \$c_{29}\$ since it happens that \$c_{30}=c_{31}=0\$ anyway): $$ {(i^{iiii^i})}^{3}{(i^{iii{(i^i)}^{2}})}^{2}{(i^{iii{(i^i)}^{3}})}^{2}i^{iii{(i^i)}^{5}}{(i^{iii{(i^i)}^{6}})}^{4}{(i^{iii{(i^i)}^{8}})}^{3}{(i^{iii{(i^i)}^{9}})}^{4}i^{iii{(i^i)}^{10}}{(i^{iii{(i^i)}^{12}})}^{2}{(i^{iii{(i^i)}^{13}})}^{3}{(i^{iii{(i^i)}^{14}})}^{3}{(i^{iii{(i^i)}^{17}})}^{2}{(i^{iii{(i^i)}^{18}})}^{4}{(i^{iii{(i^i)}^{20}})}^{2}{(i^{iii{(i^i)}^{21}})}^{2}{(i^{iii{(i^i)}^{22}})}^{2}i^{iii{(i^i)}^{23}}{(i^{iii{(i^i)}^{24}})}^{3}{(i^{iii{(i^i)}^{25}})}^{2}{(i^{iii{(i^i)}^{27}})}^{4}i^{iii{(i^i)}^{28}}{(i^{iii{(i^i)}^{29}})}^{2} $$

(i^(i*i*i * i^i))^3  *  (i^(i*i*i * (i^i)^2))^2  *  (i^(i*i*i * (i^i)^3))^2  *  i^(i*i*i * (i^i)^5)  *  (i^(i*i*i * (i^i)^6))^4  *  (i^(i*i*i * (i^i)^8))^3  *  (i^(i*i*i * (i^i)^9))^4  *  i^(i*i*i * (i^i)^10)  *  (i^(i*i*i * (i^i)^12))^2  *  (i^(i*i*i * (i^i)^13))^3  *  (i^(i*i*i * (i^i)^14))^3  *  (i^(i*i*i * (i^i)^17))^2  *  (i^(i*i*i * (i^i)^18))^4  *  (i^(i*i*i * (i^i)^20))^2  *  (i^(i*i*i * (i^i)^21))^2  *  (i^(i*i*i * (i^i)^22))^2  *  i^(i*i*i * (i^i)^23)  *  (i^(i*i*i * (i^i)^24))^3  *  (i^(i*i*i * (i^i)^25))^2  *  (i^(i*i*i * (i^i)^27))^4  *  i^(i*i*i * (i^i)^28)  *  (i^(i*i*i * (i^i)^29))^2

$$ = 3.1415926535897932384\;595... $$ That's 1788 i's, giving 20.5 or so decimal digits of accuracy (literally 19 correct decimal digits after the decimal point, delimited by the space above), 202.89 or so points.

Efficiency improvements:

Here are a couple of ways to do a bit better than the original scheme described above.

  1. When starting to compute the \$c_k\$'s to form the sum \$āˆ’.72875...i\$, start by overshooting, so the remainder becomes a positive multiple of \$i\$ instead of a negative one, throughout the rest of the process. The result will be statistically essentially the same as before, except instead of all those \$i i i\$'s there will just be single \$i\$'s instead. In practice, I've observed that sometimes (for some values of max k) this helps a lot, sometimes it helps a little or even hurts.

  2. Actually for every \$c_k\$, try to make an intelligent choice of whether to overshoot (reversing the sign of the remainder and subsequent coefficients) or undershoot, so we get a mix of \$i\$'s and \$i i i\$'s appearing in the exponents. One simple way to decide whether to overshoot or undershoot would be to always make the absolute value of the new remainder as small as possible, thus uniformly(ish) producing \$c_k\$'s in \$\{-2,-1,0,1,2\}\$ instead of \$\{0,1,2,3,4\}\$, and corresponding uniform mix of \$i\$'s and \$i i i\$'s. This can be further improved by introducing a bias so that the \$i\$ direction is preferred over \$i i i\$, so that the total number of i's will tend to be smaller. I'm not sure whether there's an optimal-in-principle formula for this bias; in practice, I've observed that there seems to be a substantial amount of luck involved. For my current best solution (now shown at the top of this answer), I settled on a magic bias value of .2 which seems to produce exceptionally lucky results for the current rule constraints: going up to \$c_{44}\$ gives 2016 \$i\$'s, 29.79 digits, 295.26 points.


Here is python code to compute the \$c_k\$'s, and resulting expression and score, up to any desired max \$k\$ (required as command-line argument). This is what I used to compose the expressions and results shown above; in particular, args --algorithm_revision=2 44 for the current best known result within the rule constraints. You can select --algorithm_revision=0 (the original algorithm), or algorithm revision 1 or 2 (corresponding to the two efficiency improvements described above).

#!/usr/bin/python3

# For https://codegolf.stackexchange.com/questions/282646/computing-pi-with-ifck
# Author: Don Hatch
# Revision 9, 2025/07/19

from mpmath import *
import re
import sys
import time

if len(sys.argv) != 3 or not sys.argv[1].startswith("--algorithm_revision="):
  print("Usage: computing_pi_with_iFuck.py --algorithm_revision=[0|1|2] <n_coeffs>", file=sys.stderr)
  print("    --algorithm_revision=0 means original solution: coeffs all positive, always overshoot")
  print("    --algorithm_revision=1 means first coeff positive (so 'i*i*i' appears) but overshoot, all remaining coeffs negative (so 'i' appears) and underthoot")
  print("    --algorithm_revision=1 means choose coeff to be + or - intelligently each time, so remainder is as small as possible (with ad-hoc bias towards negative)")
  print("    For the win: --algorithm_revision=2 44")
  exit(1)


algorithm_revision = int(sys.argv[1][len("--algorithm_revision="):])
print(f"  algorithm_revision = {algorithm_revision}");
assert algorithm_revision in [0,1,2]
n = int(sys.argv[2])
print(f"  n = {n}");

mp.dps = 2*n  # set mpmath working precision to this many decimal digits (n is plenty, 2*n is overkill for peace of mind)
print(f"  mp.dps = {mp.dps} decimal digits of working precision")

x = 2*log(pi)/pi   # 0.728...
base = e**(-pi/2)  # i^i = .207...

print(f"  x = {x!r}")
print(f"  (inverse of) base = {base!r}")

coeffs = []

remainder = x
for k in range(n+1):  # 0,1,2,...,n
  if algorithm_revision == 0:
    # Original solution: coeffs all positive, always undershoot
    # (so it's like a standard numeral),
    # so "i*i*i" appears in every term
    assert remainder > 0
    c_k = int(remainder / base**k)
    print(f"  (i^i)^(k={k}) = {base**k}: c_{k}={c_k}")
    assert c_k in [0,1,2,3,4], c_k
    coeffs.append(c_k)
    remainder -= c_k * base**k
  elif algorithm_revision == 1:
    # First coeff positive (so "i*i*i" appears) but overshoot,
    # all remaining coeffs negative (so "i" appears) and undershoot.
    if k == 0:
      # special case: first coeff positive but overshoot
      assert remainder > 0
      c_k = 1
    else:
      # all remaining coeffs negative and undershooting.
      assert remainder < 0
      c_k = -int(-remainder / base**k)
      assert c_k in [0,-1,-2,-3,-4], c_k
    print(f"  (i^i)^(k={k}) = {base**k}: c_{k}={c_k}")
    coeffs.append(c_k)
    remainder -= c_k * base**k
  elif algorithm_revision == 2:
    # Try to make an intelligent decision each time.
    # Choose a coeff that makes the absolute value of the remainder
    # as small as possible.
    # And, experiment with a bias in favor of making c_k negative
    # (so that "i" is more likely to occur than "i*i*i").
    # Not sure what the optimal bias is, so just experimenting with values for now.
    bias = -.2  # currently hard coded.  huh, bias of -.2 seems optimal to win... currently I think this is luck!!  n=40-> N=1838 27.27 digits n=41,42,43: N=1924 29.19  n=44-> N=2016 29.78 digits wow!  and that should win the contest by a lot (N<=2048, digits>25)
    c_k = int(round(remainder / base**k + bias))
    if bias == 0:  # this assertion isn't valid otherwise
      assert c_k in [-2,-1,0,1,2], c_k
    print(f"  (i^i)^(k={k}) = {base**k}: c_{k}={c_k}")
    coeffs.append(c_k)
    remainder -= c_k * base**k
  else:
    assert False  # can't happen

print(f"  the c_k's starting with c_0 are: {coeffs}")

print(f"  So {x}...")
print(f"    in base {1/base}...")
print(f"    is {coeffs[0]}.{''.join(str(c_k) for c_k in coeffs[1:])}...")
print()

print("  Mathjax:")
mathjax_string = ""
for k,c_k in enumerate(coeffs):
  if c_k != 0:
    i_or_iii = ("i" if c_k < 0 else "iii")

    if k == 0:
      factor = "i^{"+i_or_iii+"}"
    elif k == 1:
      factor = "i^{"+i_or_iii+"i^i}"
    else:
      factor = "i^{"+i_or_iii+"{(i^i)}^{%d}}"%(k,)
    if abs(c_k) > 1:
      factor = "{("+factor+")}^{%d}"%(abs(c_k),)
    mathjax_string += factor
print(mathjax_string+"\n")

print("  Mathjax expanded:")
mathjax_string_expanded = "".join(("i^{"+("i" if c_k<0 else "iii")+"i^i"*k+"}")*abs(c_k) for k,c_k in enumerate(coeffs))
MAX_N_FOR_WHICH_TO_SHOW_EXPANDED = 45
if n <= MAX_N_FOR_WHICH_TO_SHOW_EXPANDED:
  print(mathjax_string_expanded+"\n")
else:
  print("      (suppressed because it would be unwieldy and no one cares)\n")

print("  Octave:")
factors = []
for k,c_k in enumerate(coeffs):
  if c_k != 0:
    i_or_iii = ("i" if c_k < 0 else "i*i*i")
    if k == 0:
      factor = "i^("+i_or_iii+")"  # note, we don't need parens if i_or_iii is "i"... but this doesn't happen at k==0 anyway so don't worry about it
    elif k == 1:
      factor = "i^("+i_or_iii+" * i^i)"
    else:
      factor = "i^("+i_or_iii+" * (i^i)^%d)"%(k,)
    if abs(c_k) > 1:
      factor = "("+factor+")^%d"%(abs(c_k),)
    factors.append(factor)
octave_string = "  *  ".join(factors)
print(octave_string+"\n")

print("  Octave expanded:")
octave_string_expanded = "  *  ".join([
  " * ".join(["i^("+" * ".join(
                              ["i" if c_k<0 else "i*i*i"] + ([] if k==0 else ["*".join(["i^i"]*k)])
                              )+")"] * abs(c_k))
  for k,c_k in enumerate(coeffs)
  if c_k != 0
])
if n <= MAX_N_FOR_WHICH_TO_SHOW_EXPANDED:
  print(octave_string_expanded+"\n")
else:
  print("      (suppressed because it would be unwieldy, although we do use it)\n")

print(f"  Number of i's in expanded mathjax string: {mathjax_string_expanded.count('i')}")
print(f"  Number of i's in expanded octave string: {octave_string_expanded.count('i')}")

print(f"  replacing ^ with ** to get a string we can eval() in python")
python_string_expanded = re.sub("\\^", "**", octave_string_expanded)
if n <= MAX_N_FOR_WHICH_TO_SHOW_EXPANDED:
  print(f"  python_string_expanded = {python_string_expanded}")

print(f"  and recall that working precision is {mp.dps} decimal digits")
print(f"  evaluating...")
t0 = time.time()
pi_approximation = eval(python_string_expanded, {}, {"i": mpc(1j)})  # mpc = multiprecision complex
t1 = time.time()
print(f"  evaluated in {t1-t0}s.")
print(f"  pi_approximation = {pi_approximation}")
error = pi_approximation - pi
print(f"  error = {error}")
num_digits_of_accuracy = -log10(abs(error))
print(f"  num_digits_of_accuracy = -log10(abs(error)) = {num_digits_of_accuracy}")

N = python_string_expanded.count("i")
print(f"  N = {N}")
score = 10 * (1 + num_digits_of_accuracy) - N**(1/3)
print(f"  score = {score}")

# Finally, count the literal integer number of correct digits,
# for the informal description.
print()
assert pi_approximation.imag == 0
pi_approximation_string = str(pi_approximation.real)
pi_string = str(pi)
first_mismatch_index = next(i for i,(a,b) in enumerate(zip(pi_approximation_string+"X", pi_string+"Y")) if a != b)
literal_integer_num_correct_digits = first_mismatch_index - len("3.")
pi_approximation_string = pi_approximation_string[:first_mismatch_index] + " " + pi_approximation_string[first_mismatch_index:]
pi_string = pi_string[:first_mismatch_index] + " " + pi_string[first_mismatch_index:]
print(f"  approx pi string = {pi_approximation_string!r}")
print(f"  actual pi string = {pi_string!r}")
print(f"  so literal integer count of number of correct digits of pi after the decimal point is {literal_integer_num_correct_digits}")

Try it online!

2044 i's, 245 digits, 2453.94 points, via uFuck

(My second answer)

Start by writing a program in the language uFuck instead of iFuck. uFuck is just like iFuck, except its single symbol is \$u\$ instead of \$i\$, with value \$u = i^i = e^{-\pi/2} = .207...\$.

uFuck can be easier to work with than iFuck, because it expresses only positive real numbers. And translation from uFuck to iFuck is straightforward: $$\begin{aligned} \mathrm{translate}(u^{E}) &= i^{i\;\mathrm{translate}(E)} \mathrm{(for\;any\;nonempty\;subexpression\;E)}\\ \mathrm{translate}(u) &= i^i \mathrm{(when\;}u\mathrm{\;occurs\;without\;exponentiation)} \end{aligned}$$

However, there's a minor problem with uFuck: it can express only numbers between 0 and 1. So it can't express \$\pi\$. To work around that, we'll write a uFuck expression for \$1/\pi=0.3183...\$ instead, translate it to iFuck, and then invert the expression in iFuck to get an expression for \$\pi\$.

We're going to shoot for an expression of the following form, similar to a continued fraction: $$ 1/\pi \approx u^{c_0} u^{u^{c_1} u^{u^{c_2} u^{u^{c_3} u^{ ... }}}} $$ where each \$c_k\$ is a nonnegative integer (and \$u^{c_k}\$ is, of course, an abbreviation for \$u u ... (c_k\;\mathrm{times})\$).

The decision procedure for finding the \$c_k\$'s can be structured as follows:

remainder = 1/š›‘
for k in 0...n:
  choose nonnegative integer c_k somehow
  remainder = log_u(remainder/u^c_k)
            = log_u(remainder) - c_k

So how do we do the "choose nonnegative integer c_k somehow" part?

Well, note that, in order to keep from blowing up, the remainder must be kept strictly positive (since it's used as an argument to \$\log_u\$). Also, it can't ever become \$\ge 1\$ (think about what would happen if it did: then \$\log_u\$(remainder) would be \$\le 0\$, so \$\log_u\$(remainder)-\$c_k\$ would be \$\le 0\$, making remainder \$\le 0\$ on the next iteration, which we've already said can't be allowed to happen).

That in turn implies the \$c_k\$ we choose at each iteration must satisfy: $$ 0 < \log_u(\mathrm{remainder}_k) - c_k < 1 \\ 0 > c_k - \log_u(\mathrm{remainder}_k) > -1 \\ \log_u(\mathrm{remainder}_k) > c_k > \log_u(\mathrm{remainder}_k)-1 $$ So that tells us that \$c_k\$ must be exactly \$\lfloor{\log_u(\mathrm{remainder}_k)}\rfloor\$.

So, surprisingly, the infinite encoding of \$1/\pi\$ in this form is unique, and the \$c_k\$'s can be found as follows:

remainder = 1/š›‘
for k in 0...n:
  assert 0 < remainder < 1
  c_k = floor(log_u(remainder))
  assert c_k >= 0
  remainder = log_u(remainder) - c_k
  assert 0 < remainder < 1

Subtlety: the integers \$c_k\$ can be arbitrarily large, on steps when the remainder happens to be small. This is ok: its expected (average) value is small, and the probability of it ever blowing up so large that it becomes a problem (e.g. integer overflow) is vanishingly small.

I've included some python code that implements this algorithm, at the end of this post.


For a smoke test, we can take just the first handful of coefficients \$c_{0}\$ through \$c_{20}\$ which are: $$ 0\;0\;1\;2\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;0\;1\;0\;0\;2\;1\;0 $$ which represents the uFuck expression: $$ 1/\pi \approx u^{u^{uu^{uuu^{u^{u^{u^{u^{u^{u^{u^{u^{u^{u^{u^{uu^{u^{u^{uuu^{u}}}}}}}}}}}}}}}}}}} $$

1/š›‘ ā‰ˆ u^(u^(u*u^(u*u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u*u*u^(u)))))))))))))))))))

Translating from uFuck to iFuck: $$ 1/\pi \approx i^{ii^{ii^ii^{ii^ii^ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^ii^{ii^{ii^{ii^ii^ii^{ii^i}}}}}}}}}}}}}}}}}}} $$

1/š›‘ ā‰ˆ i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i)))))))))))))))))))

Invert, by inserting \$ii\$ into the outermost exponent: $$\begin{aligned} \pi &\approx {i^{ii\,ii^{ii^ii^{ii^ii^ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^{ii^ii^{ii^{ii^{ii^ii^ii^{ii^i}}}}}}}}}}}}}}}}}}}} \\ &= 3.14159~519... \end{aligned}$$

š›‘ ā‰ˆ i^(i*i * i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i)))))))))))))))))))
  = 3.14159 519...

That's 54 i's, giving 5.59445 or so decimal digits of accuracy (literally 5 correct digits after the decimal point, delimited by the space above), 33.7 points.


We can go up to \$c_{776}\$ before exceeding the competition limit of 2048 i's. That gives:

1/š›‘ ā‰ˆ u^(u^(u*u^(u*u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u*u*u^(u*u^(u^(u*u^(u^(u^(u*u*u^(u*u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u*u*u^(u^(u^(u^(u^(u^(u*u^(u^(u*u^(u^(u^(u*u*u^(u*u^(u^(u^(u*u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u*u*u^(u*u*u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u*u^(u^(u^(u*u*u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u*u^(u*u^(u*u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u*u^(u^(u*u*u^(u^(u*u^(u^(u*u^(u^(u^(u*u^(u^(u^(u^(u^(u*u*u*u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u*u^(u^(u*u^(u^(u^(u^(u^(u*u^(u*u^(u*u^(u^(u*u^(u^(u^(u^(u*u^(u^(u*u*u*u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u*u^(u^(u*u^(u*u^(u*u^(u^(u^(u^(u^(u*u*u^(u*u*u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u*u^(u^(u^(u^(u*u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u*u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u*u^(u^(u^(u^(u^(u^(u*u^(u*u^(u*u^(u*u^(u*u^(u^(u^(u^(u^(u*u^(u^(u*u*u^(u^(u^(u^(u^(u^(u*u^(u^(u*u^(u*u*u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u*u^(u*u^(u*u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u*u^(u*u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u*u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u*u^(u^(u^(u*u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u*u^(u*u*u*u^(u*u^(u^(u^(u^(u^(u^(u*u*u*u^(u^(u^(u^(u^(u*u^(u*u^(u^(u^(u*u^(u^(u^(u^(u*u*u^(u*u^(u^(u^(u*u^(u^(u*u^(u*u^(u^(u^(u^(u^(u^(u*u*u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u*u*u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u*u^(u*u*u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u*u^(u^(u*u^(u*u*u^(u*u^(u^(u*u*u^(u*u^(u*u^(u^(u^(u^(u*u^(u^(u^(u*u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u*u^(u^(u*u*u*u*u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u*u^(u*u^(u*u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u*u^(u^(u*u^(u*u*u*u^(u*u*u^(u^(u^(u*u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u*u*u*u*u*u^(u*u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u*u^(u^(u*u^(u*u^(u*u^(u^(u^(u^(u^(u*u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u*u*u^(u^(u*u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u*u*u^(u*u*u^(u*u^(u^(u^(u^(u*u*u^(u^(u*u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u*u^(u^(u*u^(u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u*u^(u^(u*u^(u^(u*u^(u^(u*u^(u^(u*u^(u*u*u^(u^(u^(u*u^(u*u^(u^(u*u^(u^(u^(u^(u*u^(u^(u^(u*u^(u^(u^(u^(u*u^(u^(u^(u^(u^(u^(u^(u)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
1/š›‘ ā‰ˆ i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
  š›‘ ā‰ˆ i^(i*i * i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i)))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
    = 3.14159265358979323846264338327950288419716939937510582097494459230781640628620899862803482534211706798214808651328230664709384460955058223172535940812848111745028410270193852110555964462294895493038196442881097566593344612847564823378678316527120 407...

That's 2044 i's, giving 245.66337 or so decimal digits of accuracy (literally 245 correct digits after the decimal point, delimited by the space above), 2453.94 points.


Here is python code to compute the \$c_k\$'s, and resulting expression and score, up to any desired max \$k\$ (required as command-line argument). This is what I used to compose the expressions and results shown above.

#!/usr/bin/python3

# For https://codegolf.stackexchange.com/questions/282646/computing-pi-with-ifck
# Author: Don Hatch
# Second solution, using uFuck
# Revision 1, 2025/07/21

from mpmath import *
import re
import sys
import time


if len(sys.argv) != 2:
  exit("Usage: computing_pi_with_uFuck.py <n_coeffs>")


n = int(sys.argv[1])
print(f"  n = {n}");

mp.dps = n  # set mpmath working precision to this many decimal digits (in practice n/2 is plenty, n is overkill for peace of mind
print(f"  mp.dps = {mp.dps} decimal digits of working precision")

u = e**(-pi/2)  # i^i = .207...
print(f"  u = {u!r}")

coeffs = []

print(f"  c_0 through c_{n} are:", end='')

remainder = 1/pi
for k in range(n+1):  # 0,1,2,...,n
  assert 0 < remainder < 1
  logu_remainder = log(remainder)/log(u)
  c_k = int(floor(logu_remainder))
  assert c_k >= 0
  remainder = logu_remainder - c_k
  assert 0 < remainder < 1

  coeffs.append(c_k)
  print(f" {c_k}", end='')
  sys.stdout.flush()

print()

max_coeff_index = max([c_k,k] for k,c_k in enumerate(coeffs))[1]
print(f"  max is c_{max_coeff_index} = {coeffs[max_coeff_index]}")

# it begins: 0.01200000000000100210100210100000000100010000100200000101002100101000010000321000000000000010010000100001000100200100001

print(f"  average coeff = {sum(coeffs)/len(coeffs)}") # n=1000 -> 0.32967032967032966; n=10000 -> 0.35366463353664634; n=20000 -> 0.35423228838558074

print("  Mathjax:")
print("  Mathjax expanded:")
mathjax_string_expanded = ''
for c_k in reversed(coeffs):
  mathjax_string_expanded = ''.join(["u"]*c_k
                          + ([] if mathjax_string_expanded=='' else ["u^{"+mathjax_string_expanded+"}"]))
print(f"      1/pi = {mathjax_string_expanded}\n")

# Convert mathjax to iFuck
ifuck_mathjax_string_expanded = mathjax_string_expanded
ifuck_mathjax_string_expanded = re.sub("u\\^\\{", "i^{i", ifuck_mathjax_string_expanded)
ifuck_mathjax_string_expanded = re.sub("u", "i^i", ifuck_mathjax_string_expanded)  # any that weren't handled by the previous
print(f"      1/pi = {ifuck_mathjax_string_expanded}\n")

#  1/pi \approx u^c_0 u^(u^c_1 u^(u^c_2 u^(u^c_3 u^( ... ))))
print("  Octave:")
octave_string_expanded = ''
for c_k in reversed(coeffs):
  octave_string_expanded = '*'.join(["u"]*c_k
                         + ([] if octave_string_expanded=='' else ["u^("+octave_string_expanded+")"]))
print(f"      1/pi = {octave_string_expanded}\n")

# Convert to iFuck
octave_string_expanded = re.sub("u\\^\\(", "i^(i*", octave_string_expanded)
octave_string_expanded = re.sub("u", "i^i", octave_string_expanded)  # any that weren't handled by the previous
assert 'u' not in octave_string_expanded
print(f"      1/pi = {octave_string_expanded}\n")

# Convert from 1/pi to pi.
assert octave_string_expanded.startswith("i^(i*i^(")  # CBB: fails for very small n, whatever
octave_string_expanded = octave_string_expanded.replace("i^(i*i^(",
                                                        "i^(i*i * i*i^(",
                                                        1)
assert octave_string_expanded.startswith("i^(i*i * i*i^(")
print(f"      pi = {octave_string_expanded}\n")


print(f"  replacing ^ with ** to get a string we can eval() in python")
python_string_expanded = re.sub("\\^", "**", octave_string_expanded)
print(f"  python_string_expanded = {python_string_expanded}")

print(f"  and recall that working precision is {mp.dps} decimal digits")

# Python eval() works up to only n=201, so here's a homegrown recursive-descent
# parser/evaluator for python iFuck expressions of the form created by this program.
# Note: temporarily increases the recursion limit,
# to avoid "RecursionError: maximum recursion depth exceeded".
def EvaluatePythonIFuckExpressionOrDie(s):  # {

  s = re.sub('\\s', '', s)  # remove all spaces from s

  end = len(s)
  pos = 0

  def ConsumeFactorOrDie():
    # Factor -> 'i' ( '**' ('(' NonemptyExpression ')' | Factor) )?
    # (note that a Factor cannot begin with '('; in this program, parentheses are used
    # only to delimit exponents)
    nonlocal pos
    if s[pos:pos+1] != 'i':
      raise SyntaxError(f"syntax error in python string at position {pos}/{end}: expected 'i'")
    pos += 1
    answer = mpc(1j)  # i
    if s[pos:pos+2] == '**':
      pos += 2
      if s[pos:pos+1] == '(':
        pos += 1
        answer = answer ** ConsumeNonemptyExpressionOrDie()
        if s[pos:pos+1] != ')':
          raise SyntaxError(f"syntax error in python string at position {pos}/{end}: expected ')'")
        pos += 1
      else:
        answer = answer ** ConsumeFactorOrDie()  # right-to-left evaluation of '**'s
    return answer
  def ConsumeNonemptyExpressionOrDie():
    # NonemptyExpression -> Factor ('*' Factor)*
    nonlocal pos
    answer = ConsumeFactorOrDie()
    while s[pos:pos+1] == '*':
      assert s[pos:pos+2] != '**'  # it would have already gotten consumed greedily by the previous ConsumeFactorOrDie
      pos += 1
      answer *= ConsumeFactorOrDie()
    return answer

  if s == '':
    answer = 1
  else:
    original_recursionlimit = sys.getrecursionlimit()
    try:
      sys.setrecursionlimit(original_recursionlimit + len(s))  # overkill but whatever
      answer = ConsumeNonemptyExpressionOrDie()
    finally:
      sys.setrecursionlimit(original_recursionlimit)

  if pos != end:
    raise SyntaxError(f"error in python string at position {pos}/{end}")
  return answer

# }  EvaluatePythonIFuckExpressionOrDie

def SmokeTestEvaluatePythonIFuckExpressionOrDie():
  i = mpc(1j)
  assert EvaluatePythonIFuckExpressionOrDie("") == 1
  assert EvaluatePythonIFuckExpressionOrDie("i") == i
  assert EvaluatePythonIFuckExpressionOrDie("i*i") == -1
  assert EvaluatePythonIFuckExpressionOrDie("i*i*i") == -i
  assert EvaluatePythonIFuckExpressionOrDie("i*i*i*i") == 1
  assert EvaluatePythonIFuckExpressionOrDie("i*i*i*i*i") == i
  assert EvaluatePythonIFuckExpressionOrDie("i**i") == i**i
  assert i**i**i == i**(i**i) != (i**i)**i  # confirm that python evaluates ** right-to-left (note that octave doesn't though!)
  assert EvaluatePythonIFuckExpressionOrDie("i**i**i") == i**i**i
  assert EvaluatePythonIFuckExpressionOrDie("i**i**i**i") == i**i**i**i
  assert EvaluatePythonIFuckExpressionOrDie("i**(i)") == i**(i)
  assert EvaluatePythonIFuckExpressionOrDie("i**(i*i)") == i**(i*i)
  assert EvaluatePythonIFuckExpressionOrDie("i**(i*i*i)") == i**(i*i*i)
  assert EvaluatePythonIFuckExpressionOrDie("i**i * i**i") == i**i * i**i
  assert EvaluatePythonIFuckExpressionOrDie("i*i*i * i**(i*i * i**(i * i**i))") == i*i*i * i**(i*i * i**(i * i**i))
SmokeTestEvaluatePythonIFuckExpressionOrDie()

print(f"  len(python_string_expanded) = {len(python_string_expanded)}")

print()
print(f"  evaluating using homegrown parser...")
t0 = time.time()
pi_approximation_using_homegrown_parser = EvaluatePythonIFuckExpressionOrDie(python_string_expanded)
t1 = time.time()
print(f"  evaluated using homegrown parser in {t1-t0}s.")
print(f"  pi approximation using homegrown parser = {pi_approximation_using_homegrown_parser}")

try:
  # Note: using python's eval works only up to n=201; n=202 gives "MemoryError: Parser stack overflowed - Python source too complex to parse".  No idea whether it's possible to raise the limit.
  # So, we try it, and if it works, we assert it matches our homegrown parse result;
  # if it doesn't, then no worries.
  print()
  print(f"  evaluating using python eval...")
  t0 = time.time()
  pi_approximation_using_eval = eval(python_string_expanded, {}, {
    "i": mpc(1j), # mpc = multiprecision complex
  })
  assert pi_approximation_using_eval == pi_approximation_using_homegrown_parser
  t1 = time.time()
  print(f"  evaluated using python eval in {t1-t0}s.")
except Exception as e:
  print()
  print(f"Oh no! Caught during python eval: {e!r}")
  print(f"But we don't care, we parsed it ourselves; assuming the result is correct.")
  print()

pi_approximation = pi_approximation_using_homegrown_parser

print(f"  pi_approximation = {pi_approximation}")
error = pi_approximation - pi
print(f"  error = {error}")
num_digits_of_accuracy = -log10(abs(error))
print(f"  num_digits_of_accuracy = -log10(abs(error)) = {num_digits_of_accuracy}")

N = python_string_expanded.count("i")
print(f"  N={N} i's")
score = 10 * (1 + num_digits_of_accuracy) - N**(1/3)
print(f"  score = {score}")

# Finally, count the literal integer number of correct digits,
# for the informal description.
print()
assert pi_approximation.imag == 0
pi_approximation_string = str(pi_approximation.real)
pi_string = str(pi)
first_mismatch_index = next(i for i,(a,b) in enumerate(zip(pi_approximation_string+"X", pi_string+"Y")) if a != b)
literal_integer_num_correct_digits = first_mismatch_index - len("3.")
pi_approximation_string = pi_approximation_string[:first_mismatch_index] + " " + pi_approximation_string[first_mismatch_index:]
pi_string = pi_string[:first_mismatch_index] + " " + pi_string[first_mismatch_index:]
print(f"  approx pi string = {pi_approximation_string!r}")
print(f"  actual pi string = {pi_string!r}")
print(f"  so literal integer count of number of correct digits of pi after the decimal point is {literal_integer_num_correct_digits}")

Try it online

2046 \$i\$’s, 425 digits, 4243.10 points

i^(i*i^i)*i^(i*i*i*i^(i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i^(i*i^i)*i^(i*i^i*i^(i*i^i)*i^(i*i^(i*i^(i*i^(i*i*i)*i^(i*i^(i*i^i)*i^(i*i^(i*i*i))*i^(i*i^i*i^(i*i*i*i^i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i*i)*i^(i*i^(i*i^(i*i*i))*i^(i*i*i*i^i*i^(i*i^(i*i^i)*i^(i*i^(i*i^i))*i^(i*i*i*i^i*i^i*i^i*i^i*i^i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i^i)*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i*i*i^i)*i^(i*i^i*i^i*i^(i*i^(i*i*i))*i^(i*i^(i*i^(i*i*i*i^i*i^i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i*i)*i^(i*i^i*i^i*i^(i*i^i)*i^(i*i^i*i^i*i^(i*i^(i*i^i)*i^(i*i^(i*i*i))*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i*i*i^(i*i^i*i^i*i^i*i^i*i^i*i^(i*i^(i*i*i)*i^(i*i*i*i^i*i^(i*i^(i*i^(i*i^(i*i*i*i^(i*i^(i*i^i))*i^(i*i*i*i^i*i^i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i*i^(i*i^(i*i*i))*i^(i*i^(i*i^i)*i^(i*i*i*i^i*i^i*i^(i*i^(i*i*i*i^i*i^(i*i^i*i^i*i^i*i^i*i^(i*i^i)*i^(i*i^(i*i*i*i^(i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i*i))*i^(i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i*i*i^(i*i^(i*i^i))*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i*i))*i^(i*i^(i*i^i)*i^(i*i^i)*i^(i*i^i)*i^(i*i^(i*i*i))*i^(i*i*i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i*i))*i^(i*i*i*i^i*i^(i*i^i*i^(i*i^(i*i*i*i^(i*i^(i*i*i))*i^(i*i^i*i^(i*i*i*i^i*i^i*i^i*i^(i*i^(i*i*i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^i)*i^(i*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i)*i^(i*i^(i*i*i)*i^(i*i*i*i^(i*i^(i*i*i))*i^(i*i^(i*i^(i*i^(i*i*i)*i^(i*i^(i*i*i))*i^(i*i^i*i^(i*i^(i*i^i)*i^(i*i^(i*i*i))*i^(i*i*i*i^(i*i^(i*i*i))*i^(i*i*i*i^i*i^i*i^(i*i^i)*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i^i)*i^(i*i^(i*i^i*i^i)*i^(i*i*i*i^(i*i*i*i^i*i^(i*i^(i*i*i)*i^(i*i^i*i^i*i^i*i^i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^(i*i*i*i^i)*i^(i*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i))*i^(i*i^(i*i^(i*i^(i*i^(i*i*i)*i^(i*i^(i*i^(i*i*i*i^(i*i^(i*i^i)*i^(i*i^(i*i^i*i^i*i^i*i^(i*i*i*i^(i*i^(i*i*i*i^i*i^(i*i^(i*i*i))*i^(i*i^i*i^i*i^i*i^i*i^i*i^i*i^(i*i*i*i^(i*i^(i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i*i*i^(i*i^i*i^(i*i^(i*i*i*i^(i*i^(i*i*i*i^(i*i*i*i^i*i^(i*i^(i*i^(i*i^(i*i*i*i^i)*i^(i*i*i*i^i*i^i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i))*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^i)*i^(i*i^(i*i*i))*i^(i*i*i*i^(i*i^(i*i*i*i^i*i^(i*i^i*i^i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i*i*i^(i*i^(i*i^i*i^(i*i^(i*i*i)*i^(i*i^(i*i^i)*i^(i*i^(i*i*i))*i^(i*i^i*i^i*i^(i*i^(i*i*i*i^i*i^i*i^(i*i^i*i^(i*i^i)*i^(i*i^(i*i^(i*i*i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i*i))*i^(i*i^i*i^(i*i*i*i^i*i^(i*i^i*i^i*i^(i*i^i)*i^(i*i^(i*i*i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i*i^(i*i^(i*i*i)*i^(i*i^i*i^i*i^(i*i*i*i^i)*i^(i*i^(i*i^(i*i*i)*i^(i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i*i*i^(i*i^(i*i^(i*i^(i*i^(i*i*i))*i^(i*i^i*i^i*i^i*i^i*i^(i*i^(i*i^i)*i^(i*i^(i*i*i*i^(i*i^i*i^(i*i^(i*i*i))*i^(i*i^(i*i^(i*i^i)*i^(i*i^(i*i^(i*i*i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i*i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i^(i*i*i*i^(i*i*i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^i)*i^(i*i^(i*i^(i*i^(i*i*i)*i^(i*i*i*i^i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i*i*i^i*i^(i*i^(i*i*i*i^(i*i^(i*i*i*i^(i*i*i*i^i*i^(i*i^(i*i*i)*i^(i*i*i*i^(i*i^(i*i^i*i^i*i^i*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i^i*i^(i*i*i*i^i*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i^i*i^i)*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i*i*i^(i*i^i*i^(i*i^(i*i^i)*i^(i*i*i*i^(i*i^i*i^i)*i^(i*i^i*i^i*i^(i*i^(i*i*i*i^(i*i*i*i^i)*i^(i*i^i*i^i*i^i*i^i*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^i))*i^(i*i^i*i^i*i^i*i^i*i^(i*i^(i*i*i*i^(i*i*i)*i^(i*i^(i*i*i)*i^(i*i^i*i^i*i^(i*i^(i*i*i))*i^(i*i^i*i^(i*i^(i*i^i)*i^(i*i^(i*i^i)*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^i)*i^(i*i^(i*i*i))*i^(i*i^(i*i^(i*i*i)*i^(i*i*i*i^(i*i^(i*i*i*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i^i*i^(i*i^(i*i^i*i^i)*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i*i))*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^i)*i^(i*i^(i*i^i*i^(i*i^(i*i*i))*i^(i*i*i*i^(i*i^(i*i^(i*i^i)*i^(i*i^i*i^i*i^i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i*i^i*i^i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i*i*i^(i*i^(i*i*i*i^i*i^i*i^(i*i^(i*i^i*i^(i*i*i*i^i*i^(i*i^(i*i^(i*i*i*i^(i*i^i*i^i*i^i*i^i*i^i*i^(i*i^(i*i*i*i^(i*i^(i*i^(i*i*i))*i^(i*i^i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i)*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i^i)*i^(i*i^(i*i*i*i^(i*i^(i*i*i))*i^(i*i^(i*i^i*i^i*i^(i*i^i)*i^(i*i^i)*i^(i*i^i*i^(i*i*i*i^i*i^i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i*i)*i^(i*i^i*i^(i*i^(i*i*i)*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i^i*i^(i*i^(i*i^(i*i*i*i^(i*i^(i*i*i))*i^(i*i^i*i^i*i^(i*i^(i*i^(i*i*i))*i^(i*i^i*i^i*i^(i*i^(i*i^i)*i^(i*i^i)*i^(i*i^(i*i^i)*i^(i*i^(i*i*i*i^(i*i*i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^i)*i^(i*i^i*i^i*i^i*i^(i*i^i)*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i*i*i^(i*i^(i*i*i*i^(i*i*i*i^(i*i^(i*i*i*i^(i*i^i*i^i)*i^(i*i^(i*i*i))*i^(i*i^(i*i^(i*i*i*i^(i*i^i*i^(i*i^i*i^(i*i^(i*i*i))*i^(i*i^(i*i^(i*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i^(i*i*i*i^i*i^(i*i^i*i^i)*i^(i*i^i*i^i*i^i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i^(i*i^i*i^(i*i^(i*i*i))*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^i*i^i*i^(i*i^i*i^i*i^(i*i^(i*i^i*i^i*i^(i*i^i*i^(i*i^(i*i*i)*i^(i*i^(i*i*i)*i^(i*i^(i*i*i))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))

Attempt This Online!

I found this using a beam search over the following strategies:

328 \$i\$'s, 14 digits, 133.95 points

$$\Large i^{ii^{ii^{i}}ii}i^{i^{i}i^{ii}i^{i}i^{i}}i^{i}i^{ii^{ii^{ii^{iii}}}ii}i^{i}i^{ii^{ii^{ii^{iii}}}ii}\left(i^{ii^{ii^{iii}}i^{ii^{iii}}}\right)^{7}i^{iiii^{ii^{iii}}i^{ii^{iii}}i^{ii^{ii^{ii^{ii^{i}}}}}i^{ii^{ii^{ii^{ii^{i}}}}}\left(i^{i^{i}i^{ii}i^{i}i^{i}}\right)^{3}\left(i^{i^{i}iii}i^{ii^{ii^{i^{i}i}}}i^{ii^{ii^{iii^{i}i}}ii}\right)^{4}i^{iii}i^{ii^{ii^{ii^{iii}}}}}$$ $$\Large \approx 3.14159265358971$$

i^(i*i^(i*i^(i))*i*i)*i^(i^(i)*i^(i*i)*i^(i)*i^(i))*i^(i)*i^(i*i^(i*i^(i*i^(i*i*i)))*i*i)*i^(i)*i^(i*i^(
i*i^(i*i^(i*i*i)))*i*i)*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i)))*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i)))*i^(i*i^(i*i
^(i*i*i))*i^(i*i^(i*i*i)))*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i)))*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i)))*i^(i*i^(
i*i^(i*i*i))*i^(i*i^(i*i*i)))*i^(i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i)))*i^(i*i*i*i^(i*i^(i*i*i))*i^(i*i^(i*i*i))*i^
(i*i^(i*i^(i*i^(i*i^(i)))))*i^(i*i^(i*i^(i*i^(i*i^(i)))))*i^(i^(i)*i^(i*i)*i^(i)*i^(i))*i^(i^(i)*i^(i*i)*i^(i)*
i^(i))*i^(i^(i)*i^(i*i)*i^(i)*i^(i))*i^(i^(i)*i*i*i)*i^(i*i^(i*i^(i^(i)*i)))*i^(i*i^(i*i^(i*i*i^(i)*i))*i*i)*i^
(i^(i)*i*i*i)*i^(i*i^(i*i^(i^(i)*i)))*i^(i*i^(i*i^(i*i*i^(i)*i))*i*i)*i^(i^(i)*i*i*i)*i^(i*i^(i*i^(i^(i)*i)))*i
^(i*i^(i*i^(i*i*i^(i)*i))*i*i)*i^(i^(i)*i*i*i)*i^(i*i^(i*i^(i^(i)*i)))*i^(i*i*i*i^(i*i^(i*i*i^(i)*i)))*i^(i*i*i
)*i^(i*i^(i*i^(i*i^(i*i*i)))))

Try it online!

Explanation

Abuses the fact that there are many combinations of \$i\$ that result in numbers that are very close to 1. This allows us to repeatedly multiply these values together for arbitrary precision.
\$i^{ii^{ii^{iii}}i^{ii^{iii}}} \approx 0.999999571\\i^{i^{i}iii}i^{ii^{ii^{i^{i}i}}}i^{ii^{ii^{iii^{i}i}}ii} \approx 0.99877162\\i^{i}i^{ii^{ii^{ii^{iii}}}ii} \approx 0.99871136\$

I first started with creating a reasonable approximation for \$\pi\$ that uses "larger" (further from 1) values, then ran \$\log_b\left(\frac{\pi}{N}\right)\$, with \$b\$ being a suitable base like the two mentioned above, and \$N\$ being my rough approximation: $$N = i^{ii^{ii^{i}}ii}i^{i^{i}i^{ii}i^{i}i^{i}}i^{i}i^{ii^{ii^{ii^{iii}}}ii}i^{i}i^{ii^{ii^{ii^{iii}}}ii}\left(i^{ii^{ii^{iii}}i^{ii^{iii}}}\right)^{7} \approx 3.14159244$$ As a bonus, the aforementioned \$N\$ gives 7 digits of \$\pi\$ using 144 \$i\$'s, scoring 71.51 points.
I then approximated the fractional part of the logarithm with a suitable value:$$\log_{i^{ii^{ii^{iii}}i^{ii^{iii}}}}\left(\frac{\pi}{i^{ii^{ii^{i}}ii}i^{i^{i}i^{ii}i^{i}i^{i}}i^{i}i^{ii^{ii^{ii^{iii}}}ii}i^{i}i^{ii^{ii^{ii^{iii}}}ii}}\right) \approx 6.84366443 = 7 - 0.15633557\\i^{ii^{ii^{ii^{ii^{i}}}}}i^{ii^{ii^{ii^{ii^{i}}}}}\left(i^{i^{i}i^{ii}i^{i}i^{i}}\right)^{3}\left(i^{i^{i}iii}i^{ii^{ii^{i^{i}i}}}i^{ii^{ii^{iii^{i}i}}ii}\right)^{4}i^{iii}i^{ii^{ii^{ii^{iii}}}} \approx 0.15633551$$ This is a difference of roughly \$6\cdot10^{-8}\$, which is surprisingly close, hence no second-order correction was needed.
This method works very well with sufficient experimentation! Kudos to anyone who can find a more accurate solution using this method.

8 \$i\$'s, 2 digits, 22.44 points

$$ i^{{i^{ii^i}}iii} \approx 3.10558 $$

\$\log_i{\pi} \approx -0.72875i\$, and \$i^{ii^i} \approx 0.72142\$, so all that was needed was a quick \$iii=-i\$ to flip the number around and get a real result.

32 \$i\$'s, 55.7

$$ i^{ii^i}i^{iiii^{ii^{ii^{iii}}}}i^{ii^ii^{ii^{ii^i}}i^{ii^ii^i}} \approx 3.14158 $$

i^(i*i^i)*i^(i*i*i*i^(i*i^(i*i^(i*i*i))))*i^(i*i^i*i^(i*i^(i*i^i))*i^(i*i^i*i^i))

Try it online!


import math
i = 1j; g = [set(), {(i, "i")}]; best = -float('inf')
score = lambda n, N: -float('inf') if abs(n.imag) > 1e-8 else 10 * (1 - math.log(abs(abs(n) - math.pi), 10)) - N ** (1/3)

complexs = {}

for n in range(2, 20):
  print(n)
  s = set()
  g = g[:n] + [s]
  for x in range(1, n):
    for a in g[x]:
      for b in g[n - x]:
        try:
          t, e = (a[0] * b[0], "".join(['',a[1], '*', b[1], '']))
          if t in complexs: continue
          complexs[t] = e
          r = score(t, n)
          if r > best and a[1] < b[1]:
            best = r
            print(t, e, r)
          s.add((t, e))
        except: pass
    for b in g[n - 1]:
      a = (i, "i")
      try:
        t, e = (a[0] ** b[0], "".join(['',a[1], '^(', b[1], ')']))
        if t in complexs: continue
        complexs[t] = e
        r = score(t, n)
        if r > best and a[1] < b[1]:
          best = r
          print(t, e, r)
        s.add((t, e))
      except: pass


values = set()
reals = []

for s in g:
  ns = set()
  reals.append(ns)
  for x in s:
    if abs(x[0].imag) > 1e-8: continue
    if x[0].real in values: continue
    ns.add((x[0].real, x[1]))
    values.add(x[0].real)

for n in range(len(reals), 30):
  print(n)
  s = set()
  reals.append(s)
  for x in range(n):
    for a, ea in reals[x]:
      for b, eb in reals[n - x]:
        if ea < eb:
          try:
            t, e = (a * b, "".join(['',ea, '*', eb, '']))
            if t in values: continue
            values.add(t)
            r = score(t, n)
            if r > best:
              best = r
              print(t, e, r)
            s.add((t, e))
          except: pass

Found by some simple brute force.