达芬奇密码题解
題目信息
達芬奇隱藏在蒙娜麗莎中的數(shù)字列: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
記錄在達芬奇窗臺口的神秘數(shù)字串:36968853882116725547342176952286
這道題目需要很好的數(shù)感和聯(lián)想能力
依靠數(shù)感,感覺到達芬奇隱藏在蒙娜麗莎中的數(shù)字列是亂序的斐波那契序列
用python生成一下斐波那契序列
a=1 b=1 print(1,end=" ") print(1,end=" ") for i in range(32):c=a+bprint(c,end=" ")a=bb=c1 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
發(fā)現(xiàn)達芬奇隱藏在蒙娜麗莎中的數(shù)字列是亂序的斐波那契序列
聯(lián)想到記錄在達芬奇窗臺口的神秘數(shù)字串是亂序的flag
且造成亂序的交換位置
和達芬奇隱藏在蒙娜麗莎中的數(shù)字列是亂序的斐波那契序列一樣(但是斐波那契序列有兩個重復元素1,這樣解決導致位置有歧義,會有兩種結果,我們可以都解出來試著提交)
按照這個想法編寫腳本解題
#思考一個問題,斐波那數(shù)列有兩個1,交換后序列中的兩個1到底是原理位置0還是位置1的1我們不知道,那就會出現(xiàn)兩種情況 #但是這只會出現(xiàn)兩種情況,并且兩種可能的序列只有前兩位不一樣 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]) #根據(jù)斐波那契數(shù)列第i個位置的元素交換后在哪個下標#index搜索到的是序列從左到右第一個值為參數(shù)的下表,交換后的斐波那契序列第一個就是1,這樣搜出來會導致前兩位交換后的下標都是1#根據(jù)這道題的實際情況,我們只需要把交換后序列的第一個1換成序列中沒有的值,index函數(shù)就會為我們找到另一個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}
經(jīng)過提交驗證,正確的flag是
flag{37995588256861228614165223347687}
總結
- 上一篇: mac安装使用subversion(sv
- 下一篇: CMakeLists.txt详解