达芬奇密码题解

简介: 达芬奇密码题解

达芬奇密码题解


题目信息

达芬奇隐藏在蒙娜丽莎中的数字列:1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711

记录在达芬奇窗台口的神秘数字串:36968853882116725547342176952286

这道题目需要很好的数感和联想能力

依靠数感,感觉到达芬奇隐藏在蒙娜丽莎中的数字列是乱序的斐波那契序列

用python生成一下斐波那契序列

a=1
b=1
print(1,end=" ")
print(1,end=" ")
for i in range(32):
    c=a+b
    print(c,end=" ")
    a=b
    b=c

1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578

发现达芬奇隐藏在蒙娜丽莎中的数字列是乱序的斐波那契序列

联想到记录在达芬奇窗台口的神秘数字串是乱序的flag

且造成乱序的交换位置

和达芬奇隐藏在蒙娜丽莎中的数字列是乱序的斐波那契序列一样(但是斐波那契序列有两个重复元素1,这样解决导致位置有歧义,会有两种结果,我们可以都解出来试着提交)

按照这个想法编写脚本解题

#思考一个问题,斐波那数列有两个1,交换后序列中的两个1到底是原理位置0还是位置1的1我们不知道,那就会出现两种情况
#但是这只会出现两种情况,并且两种可能的序列只有前两位不一样
exchange_fibo="1 233 3 2584 1346269 144 5 196418 21 1597 610 377 10946 89 514229 987 8 55 6765 2178309 121393 317811 46368 4181 1 832040 2 28657 75025 34 13 17711 "
_fibo="1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 "
array="36968853882116725547342176952286"
fibo=_fibo.split()
e_fibo=exchange_fibo.split()
f1=""
f2=""
for i in range(0,len(e_fibo)):
    x=e_fibo.index(fibo[i])  #根据斐波那契数列第i个位置的元素交换后在哪个下标
    #index搜索到的是序列从左到右第一个值为参数的下表,交换后的斐波那契序列第一个就是1,这样搜出来会导致前两位交换后的下标都是1
    #根据这道题的实际情况,我们只需要把交换后序列的第一个1换成序列中没有的值,index函数就会为我们找到另一个1的位置
    f1+=array[x]   #将交换后位置的元素加回到原来的位置i,这里操作array
#找另一个1的位置
for i in range(0,len(e_fibo)):
    x=e_fibo.index(fibo[i],1,len(e_fibo))
    f2+=array[x]
flag1="flag{"+f2[0:1]+f1[1:]+"}"
flag2="flag{"+f1[0:1]+f2[1:]+"}"
print("一种可能的flag:")
print(flag1)
print("另一种可能的flag:")
print(flag2)

脚本的解为

一种可能的flag:

flag{73995588256861228614165223347687}

另一种可能的flag:

flag{37995588256861228614165223347687}

经过提交验证,正确的flag是

flag{37995588256861228614165223347687}

相关文章
|
2月前
acwing 5408 保险箱
acwing 5408 保险箱
25 1
|
6月前
|
数据安全/隐私保护
【洛谷 P1928】外星密码 题解(递归+字符串)
外星密码挑战涉及解压缩由重复子串压缩的字符串,如`[3FUN]`代表`FUNFUNFUN`。输入是一行压缩过的字符串,输出是解压缩的结果。代码使用递归方法,遇到`[`读取重复次数并解压下一层,遇到`]`返回当前层结果,否则直接添加字符。样例输入`AC[3FUN]`输出`ACFUNFUNFUN`。处理的数据限制为解压后长度在20000内,最多十重压缩。
85 0
|
6月前
|
C++
【洛谷 P1047】[NOIP2005 普及组] 校门外的树 题解(位集合)
**NOIP2005普及组问题:**给定长度为$l$的马路,上面等距种植着树,需移除位于建造地铁区域的树。输入包含马路长度和区域数,以及各区域起止点,输出移树后剩余树的数量。样例输入:$l=500$, $m=3$,输出:$298$。$20\%$数据无区域重合,$1 \leq l \leq 10^4$,$1 \leq m \leq 100$。解决方案利用位集合(bitset)表示树的状态,遍历区域将树设为0,最后统计1的数量。AC代码使用C++实现。
31 0
|
6月前
【洛谷 P1046】[NOIP2005 普及组] 陶陶摘苹果 题解(比较)
`NOIP2005普及组`编程题《陶陶摘苹果》:陶陶有10个高度在100-200cm的苹果要摘,手触及最大高度+30cm板凳后能摘到的苹果数。输入10个苹果高度和她的最大触及高度,输出可摘苹果数。样例输入:10个苹果高度和110cm触及高度,输出5,表示能摘5个。代码通过逐个比较苹果高度实现统计。
72 0
|
6月前
|
C++
【洛谷 P1085】[NOIP2004 普及组] 不高兴的津津 题解(打擂台法)
**NOIP2004 普及组问题:津津的日程检查。津津每日上课时间若超8小时会不高兴。输入7行代表一周课程,输出最不高兴的日期(1-7)或0。示例输入/输出:5 3 6 2 7 2 5 3 5 4 0 4 0 6 -> 3。使用C++代码通过遍历计算最大上课时间并找到对应日期。**
38 0
|
6月前
|
C++
【洛谷 P1042】[NOIP2003 普及组] 乒乓球 题解(模拟+向量)
`NOIP2003`普及组编程题:乒乓球比赛模拟。给定一系列球赛记录(WL序列),程序需按11分和21分制分析比分。输入含多个字符串,含W(华华得分)、L(对手得分)和E(结束标记)。输出每局比分,分制间空行间隔。样例:`WWWWWW...` → `11:0\n11:0\n1:1`(11分制)和`21:0\n2:1`(21分制)。代码使用C++,逐字符读取,当分差≥2且得分≥x时输出比分。
50 0
[算法刷题题解笔记] 洛谷 P1008 [NOIP1998 普及组] 三连击 [枚举|模拟]
[算法刷题题解笔记] 洛谷 P1008 [NOIP1998 普及组] 三连击 [枚举|模拟]
|
算法 数据安全/隐私保护 C语言
LeetCode每日一题2299. 强密码检验器 II
本题是一道LeetCode上的简单题,使用了模拟、位运算两种方法解题,各位看官往下看。
69 0
|
数据采集 数据挖掘 Python
【每周一坑】验证哥德巴赫猜想
尽管对于大多数人来说,无法看懂哥德巴赫猜想及相关问题的证明。不过我们借助计算机,可以快速地判断一个数是否符合哥德巴赫猜想。(只需在判断质数的代码基础上加上两三行。)
|
机器学习/深度学习
HZU蓝桥杯校内第二次选拔赛题解
HZU蓝桥杯校内第二次选拔赛题解
79 0