| ▲ | shoo 9 hours ago | |
That's a fun question. If we're allowed to introduce our own operators, we could concoct something like decimal notation a . b := 10a + b So we could write 90210 as 9 . 0 . 2 . 1 . 0 = S(S(S(S(S(S(S(S(S(0))))))))) . 0 . S(S(0)) . S(0) . 0 That doesn't quite work as it still depends upon a bunch of literal zeros. We could replace 0 with an operator Z() := 0, but that seems to be very much against the spirit of the challenge. We could rewrite our ersatz decimal expression to only require a single zero & then evaluate a vector of functions f : N -> N across that zero, resulting in a vector of natural numbers, then reduce that vector to a single number with our `.` decimal notation operator. Let M(fs, x) := (fs_1(x), ..., fs_n(x)) Let R(x) := x_1 . x_2 . ... . x_n 90210 = R(M((SSSSSSSSS, Id, SS, S, Id), 0)) the number of symbols to write a d-digit number this way is bounded by 10 + 10d = 10 + 10log_10(n) Is this cheating / against the spirit of the challenge? Perhaps! | ||