A Small Unary Puzzle / A Small Unnary Code Exercise

Decimal is base-10. That means that there's 10 different symbols you can put together to create a number: 1234567890.
Binary is base-2, with just two different symbols: 10.
What would base-1 be? It's Unary: 1.

Let's take decimal 4.
In binary that's 100.
Unary is even easier to learn than binary. It's 1111.

Abusing the Java String Library to do Math

Let's represent a unary integer as a String: "11111" (five)
How do we convert a unary integer to a (binary / decimal) int?

(reminder: java has a REPL /usr/lib/jvm/java-*-openjdk/bin/jshell)

"11111".length() == 5;

(hover over or highlight the code to reveal spoilers)

Next, let's do addition.
"1111" + "11" should equal "111111" (six).

"1111" + "11" == "111111";
// string concatination
// it's that simple

Subtraction is a little harder.
"1111" - "111" == "1"

"1111".replaceFirst("111", "") == "1";

How about some enlightenment?
Let's implement multiplication and division at the same time.
If you aren't using the spoilers at this point,
"1111" * "11" == "11111111" (eight) and "11111111" / "11" == "1111"

// multiply
"1111".replace("1", "11") == "11111111";
// divide
"11111111".replace("11", "1") == "1111";

If you looked at the above spoiler, there is a bug with division.
What is it?

This implementation has a bug with division.
If the number isn't cleanly divisible with the divisor, the remainer will be added to the result.
It's simple to fix this by writing a for/while loop, but is there a function in the standard library that fixes this?

If you did multiplication and division the same way I did, fractional multiplication is the next step.

"111".replace("111", "11") == "11"
"111111".replace("111", "11") == "1111"
// multiplication by two thirds

// division is actually multiplication by a fraction

Further Abuse

What would a square function look like?
What would a exp function look like?
There is a way to represent zero. Would the functions you wrote work with this representation?
Is there a way to represent negative numbers while keeping all operations one-liners?