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