惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threatpost
博客园 - 叶小钗
T
The Blog of Author Tim Ferriss
Recent Announcements
Recent Announcements
D
DataBreaches.Net
The Cloudflare Blog
阮一峰的网络日志
阮一峰的网络日志
罗磊的独立博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
N
Netflix TechBlog - Medium
Microsoft Azure Blog
Microsoft Azure Blog
Microsoft Security Blog
Microsoft Security Blog
B
Blog
U
Unit 42
有赞技术团队
有赞技术团队
博客园 - 聂微东
GbyAI
GbyAI
宝玉的分享
宝玉的分享
F
Full Disclosure
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MyScale Blog
MyScale Blog
Jina AI
Jina AI
Martin Fowler
Martin Fowler
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
D
Docker
P
Proofpoint News Feed
A
About on SuperTechFans
I
InfoQ
博客园 - 【当耐特】
C
Check Point Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
T
Threat Research - Cisco Blogs
Y
Y Combinator Blog
Project Zero
Project Zero
WordPress大学
WordPress大学
小众软件
小众软件
AWS News Blog
AWS News Blog
博客园 - 司徒正美
T
The Exploit Database - CXSecurity.com
L
LINUX DO - 热门话题
I
Intezer
Engineering at Meta
Engineering at Meta
C
CXSECURITY Database RSS Feed - CXSecurity.com
J
Java Code Geeks
T
Tenable Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Last Week in AI
Last Week in AI
C
CERT Recently Published Vulnerability Notes

文章 - 硬盘在歌唱 on 硬盘在歌唱

Open Prompt:AI 时代的 PR 协作新范式 记一例浮点数精度问题 AI 辅助编程时代,哪些编程语言会更流行? 从认知心理学看代码可读性 父子对谈30则 都2024了,你还没随身带录音笔吗? 写段子的窍门 给TiDB(MySQL)写一个代理网关 论怎么与基层干部打成一片 怎么做一个匿名论坛 适合程序员的桌面窗口管理方案 Go语言泛型初体验 双中心主从模式 TrueTime和原子钟 价值6万元的TiDB Hackathon创意 价值10万元的TiDB Hackathon创意 Paxos从入门到学会Raft 一个小故事,关于科幻,关于老师 beancount 复式记账实践
TiDB1024谜题解题报告
2020-10-24 · via 文章 - 硬盘在歌唱 on 硬盘在歌唱

今天(10月24日)被大家称为程序员节,PingCAP也凑热闹发布了一个谜题。其实是很简单,不过借助这题,我也是学习了一些 linux 命令的使用方法,还是很有意义的。不想关注公众号的话,题目也能在asktug直接看到。

首先谜面看形式像是摩尔斯电码,但肯定不是,因为摩尔斯电码不是定长的,但是这里每组长度都是8,大概率是ASCII。

这里-和.想必是0和1(所以提示的莱布尼茨是二进制的意思?),又因为ASCII第一位总是0,所以我们把-换成0,.换成1,再按ASCII转成拉丁字母。

先用 tr 做简单的字符替换,同时把空格换成空行方便后续处理。

cat CODE | tr '-' '0' | tr '.' '1' | tr ' ' '\n'

输出是

00100000
01110101
00110101
00110100
00111000
...

接下来我们用bc来做个进制转换,方法是设置ibase和obase:echo "ibase=2;obase=10000;00100000" | bc。注意这里我们先设置ibase=2,接着设置obase的时候要按ibase的格式,也就是二进制的16(10000)。

在把之前的结果交给bc之前,先用sed整理下格式。

sed "s/^/ibase=2;obase=10000;/g" | bc

输出:

20
75
35
34
38
...

然后我们用xxd工具,这个一般是用来做hex dump的,不过给它加上-r参数后,可以把hex形式给转回去。在hex之前,我们要整理下格式,把换行符删掉。

tr -d '\n' | xxd -p -r

输出:

 u548c u0020 u0054 u0069 u0044 u0042 ...

看上去是固定的u后跟4个字符,显然是unicode了。我随便找了个在线转unicode的网站,发现它要的输入格式是\uXXX。这好说,再用tr把空格换成\,然后填到网站上就出结果了:

和 TiDB 一起用代码....

看上去这就是答案了,用一行脚本的话就是:

cat CODE | tr '-' '0' | tr '.' '1' | tr ' ' '\n' | sed "s/^/ibase=2;obase=10000;/g" | bc | tr -d '\n' | xxd -p -r | tr ' ' '\\'