自然数をzeroとsuccで表せるのは周知の事実だ。
文字列で書くこともできる。例えば、"ssso"
は3になる。
文字列で表した自然数を、文字列のまま計算したらどうだろう。
文字列書き換え系でやってみた。
ユーティリティ
convergeReplaceString()
それ以上置換しても変わらなくなるまで、置換を繰り返す。reverseString()
文字列を逆順にする。
第一引数をx
、第二引数をy
とします。
加算
x
の中の"o"
をy
に置換する。
Egisonにもポイントフリースタイルが導入されればなあ。
減算
x
の中の"o"
をreverseString y
に置換する。
(例えば7 - 3
なら"sssssssosss"
になる)"sos"
を無くなるまで"o"
に置換する。"os"
を無くなるまで"o"
に置換する。
(x<yのときは答えは0になるため)
乗算
x
の中の"so"
をreverseString y
に置換する。"so"
が無くなるまで置換する。- 文字列を逆順にする。
余り
x
の中のy
を"o"
に置換する。y
が無くなるまで置換する。
除算
- 余りを引く。
z
とおく。 z
の中のy
を"os"
に置換する。y
が無くなるまで置換する。- 文字列を逆順にする。
意外とすんなり実装できた。
整数に拡張したら面白いかもしれない。
(でも多分やらない)
ソースコード