Calculate a number with 114514
& some operators.
利用 114514
及一些运算符构造出所给的数字。
数字论证是一种常见的定理证明方法。
简单来说,就是对于给定的自然数,找出一个等值的表达式,如果该表达式去除所有符号部分后为字符串「114514」,则完成论证。表达式仅允许整数运算,可以使用括号、常见的代数运算符
+-*/%
和位运算符~^&|
。Via: USTC Hackergame 2020
See also: 超精巧的数字论证器 (official writeup)
在不超过6位数,即 0 <= num <= 999999
的论证上,参考了官方 WriteUp 里的算法。
重要性质:
-~x == x+1
~-x == x-1
对于任意 x
都成立。
一个办法就是按照十进制的方式来凑,即
given_number = (((((((0+a)*10+b)*10+c)*10+d)*10)+e)*10)+f
,其中a b c d e f
为 0 到 9 之间的整数。表达式中的值0 10 10 10 10 10
可以分别利用1 1 4 5 1 4
与嵌套~-
来凑出,而+a +b +c +d +e +f
可以直接利用嵌套~-
来实现(不需要使用数字)。
对于所给整数n
,采用与十进制类似的方法,在 $ n^{1/6} $ 附近取六个数,每位取不同进制,最后再凑到所给的数。
(TODO)
前端在 Hackergame 2020 签到题的基础上魔改而成。
基于 Vercel 完成部署。
详见: https://calc114514.vercel.app/
另外也部署到了 CloudFlare Pages:
后端使用 Python3 及 Flask 进行开发。
基于 Vercel 的 Serverless Function 完成部署。(Serverless 真香!)
GET / POST https://calc114514.vercel.app/api/calc
Param:
num
a number here.
isJson
Optional. If 1
, return the result(s) with JSON
format, else return text/plain
result.
Return:
See examples below.
Examples:
$ curl "https://calc114514.vercel.app/api/calc?num=114514"
-~-~-~-~(-~(-~-~-~-~-~(-~-~-~-~(-~(-~~-1*-~-~-~-~-~-~-~-~-~1)*-~-~-~-~-~-~4)*-~-~-~-~-~5)*-~-~-~-~-~-~-~-~-~1)*-~-~-~-~-~-~4)
$ curl "https://calc114514.vercel.app/api/calc?isJson=1&num=114514"
{"answer":"-~-~-~-~(-~(-~-~-~-~-~(-~-~-~-~(-~(-~~-1*-~-~-~-~-~-~-~-~-~1)*-~-~-~-~-~-~4)*-~-~-~-~-~5)*-~-~-~-~-~-~-~-~-~1)*-~-~-~-~-~-~4)","number":"114514"}
See @calc114514bot.
Usage:
- Send a number to @calc114514bot.
- Use inline query method,
@calc114514bot <Number Here>
.
第一个不带原数,第二个带原数,效果分别如下所示。
接口相关代码位于 /api/
目录下,main.py
内包含了开放接口和 bot 交互的相关接口。
bot 采用 Webhook 方式处理发来的消息。
-
Install the requirements.
pip3 install -r requirements.txt
-
Edit your Telegram bot token and Webhook URL path in the
secret.example.py
. -
Rename
secret.example.py
tosecret.py
. -
Run the backend, for example,
gunicorn main:app
.
基于 Vercel 部署:
直接用 CLI 上传即可。
部署笔记:
基于 Vercel Serverless 部署 Calc114514 API & Telegram bot | MiaoTony's 小窝
本项目相关技术内容仅供学习研究,请在合理合法范围内使用!
The relevant technical content of this project is only for study and research, please use within the reasonable and legal scope!
License: GNU Affero General Public License v3.0
最终解释权归本项目开发者所有。
The final interpretation right belongs to the developer of the project.
Copyright © 2020-2024 MiaoTony.