今天给大家瞎扯的就是我的解题过程,直接得到的答案通常是枯燥无味的,只有亲自去解题才能体会到中间的乐趣。
注:“夏至之谜”指的是一道题目,来自今年夏至当天的阿里云公众号。
“夏至之谜”部分截图
“关键词”的格式化字符串和数字编码
通过图1,我们能知道,谜底是由4个关键词(A、B、C、D)构成,每个关键词由格式化字符串和数字编码组成,其中第4个关键词的数字编码只有一个范围:
A:”%se%s%s%s%se”(格式化字符串)、5025370(数字编码)①
B:”%s%s”(格式化字符串)、22763(数字编码)
C:”%s%s%s%s”(格式化字符串)、13540483(数字编码)
D:”%s%si%s%snc%sn”(格式化字符串)、X(31945955~31945975,数字编码)
由以上线索可知:
A:数字编码5025370=5个字符,?e????e(关键词)
B:数字编码22763=2个字符,??(关键词)
C:数字编码13540483=4个字符,????(关键词)
D:数字编码X=5个字符,??i??nc?n(关键词)
注解:①在GO语言中常用“fmt”包来进行格式化,“%s”为格式指令,用于字符串。例如:fmt.Printf("%s", string)
函数
图3 中的函数可用可不用,除此之外没有其它更多有用信息,所以这里只是简单介绍下GO语言中函数的组成:
func functionName(optionalParameters) optionalReturnType {
body
}
func functionName(optionalParameters) (optionalReturnValues) {
body
}
func:关键字,functionName:函数名,optionalParameters:可选的参数,optionalReturnType:可选的返回类型,optionalReturnValues:可选的返回值
注意:函数使用func开头,左大括号不能另起一行。
参考信息
图4 的信息量太大了:
关键词的数字编码进行分解后,利用字符串格式化操作可得到关键词
素数103,关系表内的value都是素数(最开始没注意到)
关键词的数字编码分解需要用到关系表,且通过图1已知每个数字编码分解后的字符个数
可能需要升序排序
素数?加密?
通过一些搜素,我了解一下跟加密相关的知识点,缓慢的学习过程中,不断展开的知识点和各种跳转链接,让我目不暇接。
在主动学习中得到的进步是让人快乐的,但是……“我要干什么来着?”
我发现自己掉坑里了……这TMD就是个递归算法。
让我一个人待一会儿,我想静静……
掉坑里
曾哥说过成功三大要素:“第一,坚持;第二,不要脸;第三,坚持不要脸。”
精辟!我非常认同他的第一观点……
在通过重新查阅题目和查找资料的过程中,我找到了突破口。
素数相乘
虽然这个搜索依旧没给我答案,但是脑洞大开的我有了个想法,于是……
(同时回想到了之前的那个关系表,似乎有些特殊之处……)
于是我这样:
然后这样:
最后这样:
注解:
存在于第一行,用于指定包名
导入依赖包,上图导入的依赖包是“fmt”,前文对“fmt”有简单介绍
声明并初始化变量,变量声明的格式为:var name type
Go语言的保留函数,不接受任何参数,也不返回任何结果,不需要显示调用,可自动执行。可简单理解为程序运行时第一个执行的函数(实际上不是)
“for”循环,这里取列表“codes”内的每个元素,“index”赋予“_”(直接被丢弃),item赋予“code”
另一种初始化变量的方式,在编译时会根据value自动推导其类型
内置函数“append”在这的作用是将变量“key”追加到“list”中
“\n”:换行,“\t”:制表符,“%d”:十进制表示
……贝贝友情走错片场……
正解
现在,前3个关键词已经被求出:
welcome to join
第4个关键词虽然相比前3个会稍有麻烦,但相差不大,有兴趣的可以自己尝试。
注意:
为了方便阅读,这里不是最优写法,处女座请出门左转,谢谢
排序用的是标准库里的“sort”包……
懒癌犯了……
不写了……
再凑一行……
搞定……
本文作者:许鑫鑫(点融黑帮),目前就职于点融网DevOps部门,负责运维+开发,爱好电脑和足球。