知乎和B站上经常见到一些奇奇怪怪的数字游戏,比如:
- 向 114514 中添加数学符号以得到一个目标整数:
100 = (1 / 1 + 4) * 5 / 1 / 4 - 向 114514 中添加数学符号以近似一个目标实数:
pi ~ sin(sin(sin(1)) / (1 / 4 + 5)) - 1 + 4 = 3.14155 - 用 114514 拟合一个目标实数:
pi ~ sin(sin(sin(114514 / 114514))) / sin(114514) - (sin(sin(sin(sin(sin(114514))))) + sin(114514)) = 3.1418
本仓库致力于这些无聊的数字游戏,并初步实现了一个基于遗传算法(Genetic Programming, GP)求解“向114514中添加符号以拟合目标值”的搜索算法。之后可能考虑添加更多的搜索算法和更多更无聊的数字游戏。
- iiyokoiyo: 向数字串 114514 中添加数学符号,以构造一个表达式来拟合目标数字。数字的顺序不能改变,但是允许将多个数字连在一起作为一个数,如
99 = 11 * 45 / (1 + 4)。 - jmcomic: 向给定数字串中添加包含等号的数学符号以构造一个等式,如
377532 -> 3 + 7 + 7 = 5 * 3 + 2。数字的顺序不能改变,但是允许将多个数字连在一起作为一个数。 - math24: 24点,将给定数字串中的数用数学符号组合以得到 24(或其他目标值)。数字的顺序可以改变,但不允许将多个数字连在一起作为一个数。
0 = (1 - 1) / 4 / (5 + 14)
1 = 1 / 1 - 4(5 - (1 + 4))
2 = 1 + 1 - (4 - 5 + 1) * 4
3 = 1 * 1 + (4 + 5 - 1) / 4
4 = (1 + 1 + 4 - 5 / 1) * 4
...
96 = 1 * 1 * 4 * (5 + 1) * 4
97 = 1 * 1 + 4(5 + 1) * 4
98 = (1 + 1)(45 + 1 * 4)
99 = 11 * 45 / (1 + 4)
100 = 1 / 1 * 4 * 5(1 + 4)
详见 demo.ipynb