東京大學情報理工學系研究科招生海報

==============================================首先是2011年的==================================================



實際上,這張圖真正最有趣的地方並非作爲背景的妹子,而恰恰是前面的這個01串。下面我們就來看看這個01串到底是什麼意思。


首先用ocr軟件將圖片上的數字轉化爲文本,有些地方顏色和背景差不多需要手工識別。數字串總共26行,除最後一行98個數字外其它每行110個數字,共計2848個數字。最後手工校驗一遍。這個過程比較考驗耐心……


00011111100010110000100000000000000000000000000000000000000000000000001000000011011011010101000011001011010011
10110000100100000000010100001111010101001100011110100001010101101010110101100000001110000000000011010100001101
10000101000100010011011010001110001000010110001100010011000110101100010011000011010010011010011000001101100010
11100000011010011010101001010111100001110100010011011001110101100000001011000011110111010010111101110010111000
11010110000001010010011000101110111111000000000011111111110000111000111101110000111000011110001100010110010011
01000011001000100110010011110011001001110010111001111101111001111010010011011110111110111001111101111111010111
11000111111000000001101100001000011110110010000001100001010100101011010010011010110011000010010010000010000010
10010100100001100011011000110010000110001101010110010001010101111001000101010010101100001100111100010011110111
10000101001010111110010000000001010000111010010001100010101101100001100110100010010011011110111111010010001000
01000110000111001011100001001100101110010000101010000101111100011100111101001111101110011011010110100000001011
10111101011101010110010010110000011011000010101111011010111010000111101101001110010110010110111001000111011011
11111110000100111110111110011110111100001100110111000001110100001001001001000001010100101100011010000101100011
00010011010110110000110011100110101001001100101001000111110000010110000000100010011011010101011100111000000100
11101011110110011001010101011001011010110111011111111010110000111010100100100110001111101011000010011100110110
10101001111011010101000111110000011110100011110110100001010101110111010101001110010001110101000101000101000001
01010010110001101011010110001100000111001001010000011000100110000110001000110010111111100101101010011110011101
10011110011000111100101110000101010101000110101101111010001000111001110100100001111110011111010101000110010101
00110010001111111011111000000100111001111001110101010001101110011000100100010110010111010011111000101100001011
11100010100010011000110110111010011001001001111011010010111000001111000011100100100100010011101011010001110010
01100101001101100001101100110000111111010010101000011010011000000111110100011000100001101010010110100110110110
01010001010000101001110011010110000101110001111010000101001011100100110100001001000001101000110101111110001010
01010000100100011000011000110110110111110100000010011110111001100000010011100100100101100010000010111111100101
10110110111000100000100010100000100001100001001110011101001000101000000110001110011000011101111100101000111101
01000011010010100100011000001000010001111011110001101010100110001111110100001101110100100001101101100010101101
11000010111011101011111111011110010000100010100101101101100100110101111000001101110010100000011100110101011000
01111011110010100000000010110111111110101010100011000010011100000110111110000000010000000000000000


首先第一個想法肯定是ASCII編碼,由於不知道是big-endian還是little-endian就兩個都試一次,結果看不出來是什麼有意義的字符串。考慮到可能用凱撒密碼加密過,去掉非拉丁字母后反解出26個可能的文本,也都沒有什麼意義。看來不是ASCII編碼。


考慮到2848長度是8的倍數,也可能是二進制文件,所以也big-endian和little-endian地讀出來並寫成二進制文件。


gnome還是比較聰明的,認出了big-endian的那個輸出是一個gz壓縮包。實際上,看不出來的話,也可以把文件頭的3個字節丟google,


改名爲bin.gz,解壓得到一個叫做bin的文件。看一下


\CA\FE\BA\BE\00\00\002\00!
\00\00 \00\00\00
\00\00
\00\00\00\00\00<init>\00()V\00Code\00main\00([Ljava/lang/String;)V\00 StackMapTable \00\00 \00 \00\00\00)w-aurlwtcniewo./-t.kjhltiypioe.o/kvru.fae\00 \00\00\00 \00\00 \00i\00java/lang/Object\00java/lang/System\00out\00Ljava/io/PrintStream;\00java/lang/String\00charAt\00(I)C\00java/io/PrintStream\00print\00(C)V\00 \00\00\00\00\00\00\00\00\00\00\00 \00\00
\00\00\00\00\00\00\00\00*\B7\00\B1\00\00\00\00\00 \00 \00 \00\00
\00\00\00=\00\00\00\00\00!=)\A2\00\B2\00h)p\B6\00\B6\00\84\A7\FF\E5\B1\00\00\00\00 \00\00\00
\00\FD\00\00\F9\00\00\00\00


熟悉java的同學應該一眼就能看出這是個編譯過的class文件(看不懂的也可以用jd-gui反編譯),改名爲bin.class,運行提示


Exception in thread "main" java.lang.NoClassDefFoundError: bin (wrong name: i)


再改名爲i.class,運行得到


www.i.u-tokyo.ac.jp/fun/hikari-loveletter

另外還有版權信息的文本解密: 0x11c開始,sjis編碼 


哦哦哦!感覺要接近真相了。


information is conceived in letters and sounds,
and wherever sentiment and intention are found -
poetry is formed when feelings rest within consonants and vowels,
melody is born when emotion in harmony with each soul resounds.

our desire to communicate is found at the core of the information we impart,
likes or dislikes, black or white, 0 or 1, science or art -
from our eyes and our ears - our whole bodies - each part,
and, most assuredly, from each one of our hearts.


唔哦,好文藝……點next進去,有一首歌 ヒカリラブレター hikari loveletter,似乎就是海報上那個妹子唱的,還挺好聽的……


反覆聽了幾遍,當作練聽力好了……嗯,其實有一段挺違和的,在2:58 - 3:01那一段,明顯不是日語,而且感覺是機器合成的一樣。用audacity把這段剪出來分析。



瞎搞了一番,最後的發現其實很簡單:倒放reverse即可。聽到的應該是xxxくれて、ありがとう(聽力不好,真心聽不清楚……)。


有說是慢放能聽作“聞いたくれてありがとう” (謝謝傾聽)。不過我是聽作“いてくれて、ありがとう”(來到這裏,謝謝你了),超帶感的啊~

========================================接下來是2010年的==========================================


妹子還是一如既往可愛呢。


100011101110010011000010110010001110101011000010111010001100101001000000101001101100011011010000110111101101111
011011000010000001101111011001100010000001001001011011100110011001101111011100100110110101100001011101000110100
101101111011011100010000001010011011000110110100101100101011011100110001101100101001000000110000101101110011001
000010000001010100011001010110001101101000011011100110111101101100011011110110011101111001001011000010000001010
100011010000110010100100000010101010110111001101001011101100110010101110010011100110110100101110100011110010010
000001101111011001100010000001010100011011110110101101111001011011111000111011100100110000101100100011101010110
000101110100011001010010000001010011011000110110100001101111011011110110110000100000011011110110011000100000010
010010110111001100110011011110111001001101101011000010111010001101001011011110110111000100000010100110110001101
101001011001010110111001100011011001010010000001100001011011100110010000100000010101000110010101100011011010000
110111001101111011011000110111101100111011110010010110000100000010101000110100001100101001000000101010101101110
011010010111011001100101011100100111001101101001011101000111100100100000011011110110011000100000010101000110111
101101011011110010110111110001110111001001100001011001000111010101100001011101000110010100100000010100110110001
101101000011011110110111101101100001000000110111101100110001000000100100101101110011001100110111101110010011011
010110000101110100011010010110111101101110001000000101001101100011011010010110010101101110011000110110010100100
000011000010110111001100100001000000101010001100101011000110110100001101110011011110110110001101111011001110111
100100101100001000000101010001101000011001010010000001010101011011100110100101110110011001010111001001110011011
010010111010001111001001000000110111101100110001000000101010001101111011010110111100101101111100011101110010011
000010110010001110101011000010111010001100101001000000101001101100011011010000110111101101111011011000010000001
101111011001100010000001001001011011100110011001101111011100100110110101100001011101000110100101101111011011100
010000001010011011000110110100101100101011011100110001101100101001000000110000101101110011001000010000001010100
011001010110001101101000011011100110111101101100011011110110011101111001001011000010000001010100011010000110010
100100000010101010110111001101001011101100110010101110010011100110110100101110100011110010010000001101111011001
100010000001010100011011110110100011101110010011000010110010001110101011000010111010001100101001000000101001101
100011011010000110111101101111011011000010000001101111011001100010000001001001011011100110011001101111011100100
110110101100001011101000110100101101111011011100010000001010011011000110110100101100101011011100110001101100101
001000000110000101101110011001000010000001010100011001010110001101101000011011100110111101101100011011110110011
10111100100101100001000000101010001101000011001010010000001010101011011100110100101110110011001010111001001110011011


共27行,除最後一行116個數字外每行111個數字,共計3002個數字。嘗試掐掉末尾轉成ASCII碼和二進制文件都失敗了。


試着轉化爲圖像,大致如圖。



仔細觀察可以發現,似乎什麼東西重複了4遍……於是用kmp作check,發現第1-第623個字符重複了3次,而第四次的後面似乎有些噪聲。不管它,先把1-623扣出來。


623不是8的倍數,但623=7*89,考慮到ASCII碼第一位一定是0,所以每7位組成一個字符,嘗試打出來。毫無結果……


等等,第一位一定是0的話,似乎這串裏8的倍數的位置都是0,這樣的話……莫非是最後補上一個0,然後這回是看作little-endian?嘗試後依舊無果……


再等等,8的倍數的位置都是0的話,也有可能是在第一位補0,然後看作big-endian。這回結果出來了:


[jffifa@jffifa acm]$ ./t
Graduate School of Information Science and Technology, The University of Tokyo


怎麼不是妹子的聯繫方式呢……


順便一提,妹子的衣服叫做“十二單“,是一種極其考究的古服,有興趣的同學可以研究一下。

有關衣服的姿勢

色調搭得很漂亮啊,胡亂目測一下,這一身是表紅裏紫的脂燭染向蝶丸二陪織唐衣,山吹色菱紋表着——沒意外的話應該是幸菱紋吧,考慮到入學是春季的關係?五衣大概是餅踟躕,然後海賦裳,深紅袴,引腰,小腰,檜扇,十二單標準配備
幾張日本平安朝時期女子的服飾圖。“十二單”由長袴(貼身裙褲)、小袖(白色短內衣)、單衣(小袖外)、五衣(開口處五層)、打衣(五衣外)、表着(外袍)、唐衣(最外短褂)、裳(圍腰長裙)、檜扇組成。——第二張“晴之裝束”貌似最接近



如何像那位姑娘一樣冒出那麼多名詞: 

首先去風俗博物館查十二単,搞清楚每個部位叫什麼。 
http://www.iz2.or.jp/fukushoku/f_disp.php?page_no=0000031

然後從外到內。先看唐衣。紅色是表色,翻出來的領子紫色是裏色。去下面兩個網站查重色目: 
http://www.kariginu.jp/kikata/kasane-irome.htm
http://www.bb.em-net.ne.jp/~maccafushigi/mac/7.htm
我目測是巖躑躅(3月中 男女)或者薔薇。按月份巖躑躅可能性比較大。舊曆三月正好是公曆的四月。 


那位姑娘說的脂燭明顯是把裏外看反了。 

其實重色目叫什麼無所謂,直接說表紅裏紫就好。 


二陪織指的是先繡一層底紋再用其他顏色繡上大的紋樣。 
http://www.kariginu.jp/kikata/6-1.htm
http://www.kariginu.jp/sozai/sozai4.htm


很明顯大的圓形圖案是向蝶。至於是不是二陪織,裏紋是什麼,圖這麼小誰看的出來呀。 
http://www.otomiya.com/kamon/animal/tyo.htm


================================以下是2012年的海報(未破解)=====================================



====================================下面是2013年的海報=================================


shtml下沒法右鍵存圖,Chrome右鍵審查元素,拿到圖像的實際地址:

拿到海報後可以嘗試OCR,但是一看這對比度不行,錯了一位數都可能毀滅後面的破解工作。還是丟到PS裏修修看,沒辦法,coder就得有兼職美工+營銷+策劃+搬磚……雜學到瑞士軍刀程度的覺悟。

識別出來一串二進制碼:

0010101100101101001011010010110100101101001010110000101001111100010010010111000001110111011001110111110000001010011111000110111100101110001011100111010101111100010001010100011001001000010010010010000001001011010011100100111101010010000010100111110001100001011000110111010001101111011111000111110001111100011111000111110000100000011111000111110001111100011111000000101001111100011101010111001101110111001000010111110001010110010101100101011001010110001000000101011001010110010101100101011000001010001010110010110100101101001011010010110100101011001011010010110100101101001011010010101100101101001011010010110100101101001010110010110100101101001011010010110100101011000010100111110000100000011101010110100101101100011111000110111100100000001000000111010001111100011010000111011100111010001000000111110001100001011010110010111001111001011111000010110100111110010100110000101001111100001000000110011001110100001000000111110001010011001011010111010001101111011111000110111001110111001011110111001001111100010111110010111101100001011011110111110000101101001111100101010000001010011111000111001101100011011110010111001101111100011010010110000101101001001000000111110001101111001011100110111100100000011111000101111101110100011101000110110001111100001011010011111001010101000010100111110001110100011101010111010101100101011111000110111001101110011011100010111001111100011011110110101001101011011010010111110001101100011010110010111000100000011111000010110100111110010101100010110001011001000010100010101100101101001011010010110100101101001010110010110100101101001011010010110100101011001011010010110100101101001011010010101100101101001011010010110100101101001010110000101001111100010001110101010001100001011001000111110000001010011111000110100000101111011100110110010101111100000010100111110001101100011010000010000001110010011111000000101001111100010000110101001101110000010001100111110000001010001010110010110100101101001011010010110100101011000010100000101001010010011011110111010001100001011101000110010100100000011101000110100001101001011100110010000001100011011101010110001001100101001000000110001001111001001000000111001001100101011100000110010101100001011101000110100101101110011001110000101001010100001011000100100000101100010001010010110001010101001011000100111000101100010010010010110001010110001011000100010100101100010100100010110001010011001011000100100100101100010101000010110001011001001011000100111100101100010001100010110001010100001011000100111100101100010010110010110001011001001011000100111100001010001100100011000000110001010111100101111000110011001000000111010001101001011011010110010101110011001011100000101000001010011000010101111001011110011000100010000001101001011100110010000001110101011100000010110101100001011100100111001001101111011101110010000001101110011011110111010001100001011101000110100101101111011011100010111000001010

統計一下位數,一共2848位,是8的倍數,那就好辦了,不管三七二十一看看ASCII再說,hankcs寫的一段解碼程式:

輸出:

居然直接拿到了明文,也算是意外了。不過也許從另一方面來講,也許是因爲明文有足夠的難度把人難倒吧。這些文字描述了什麼呢?我來翻譯並且解釋一下。


文本分爲兩部分,上半部分其實是一個四階魔方的展開圖。魔方一共六個面,每個面被分爲16塊,每一塊上標註了一個字符。其中有三條邊上表明瞭轉動方向。比如最右邊的S代表如圖往右旋轉,最上面的E代表往下旋轉(當然hankcs指的是是組合後的3d魔方的旋轉)。hankcs其實根本不瞭解魔方,爲此還專門給自己畫了一個圖:


下半部分是解魔方的key,也就是按照T,H,E,U,N,I,V,E,R,S,I,T,Y,O,F,T,O,K,Y,O的順序重複一定次數n(PS:THEUNIVERSITYOFTOKYO 就是東京大學的英文全稱)。這個次數n是多少呢?下面說了,是201^^3次。看到這裏,估計你可能不認識201^^3,hankcs也不認識。從小到大的奧數高數沒涉及到這個運算符,後來查維基百科才知道^^是超運算201^^3 = 201201201。三個201疊在一起,這是個天文數字,宇宙中可以觀測到的原子數目估計纔有1080個,絕對比你在現實生活裏見過的最大的數都大

OK,題目就是這麼簡潔。開始幹吧,爲了那個啥,勇敢的少年呀快去創造奇蹟吧!

首先是解決魔方的旋轉問題,這個稍有些複雜。hankcs以前沒玩過魔方,爲了輔助思考,於是自己拿起紙筆畫了一個,首先是平面圖:

然後把它疊起來就是了,請諸位睜大眼睛,純手工高端洋氣高仿日式4 x 4魔方誕生了

擦,這是什麼奇葩玩意兒……順便一提,昨天寫code到凌晨兩點半沒搞定,於是今天上午把這玩意兒拿到精讀教室去繼續了。你能想象拿着這麼蠢的東西被衆人圍觀的心情嗎?連石津先生都湊過來了……)

然後怎麼辦呢,拿這玩意兒旋轉201^^3次嗎?

當然不了,hankcs寫了一段魔方程序。在開始寫的時候,hankcs傾向於建立3d座標系來完成旋轉。可是這未免太小題大做了,而且魔方的面的座標的表示方法操作性很差。於是hankcs採取了僞3d的方法,這一套東西寫下來花了一個晚上和半個上午呢,如果要仔細解釋的話又是一片博文的篇幅了。而這篇博文是科普向的,所以不折磨大家的眼睛了,完整的代碼請跳轉http://www.hankcs.com/program/magiccube.html

有了旋轉程序,剩下的就是計算201^^3次了。以下計算稍有難度,請以消遣爲目的的讀者朋友直接跳過看圖就好了。


前文已經說過了,201^^3是個天文數字,肯定不需要計算的。一般ACM裏遇到了大數,那肯定是有週期性的,最後往往求mod解決。注意到前面的密匙“THEUNIVERSITYOFTOKYO”本身就是一個週期,於是hankcs用自己的魔方程序跑了下,發現了週期。

我們定義每次旋轉魔方(比如執行T)爲1步,讓程序按照密匙一直旋轉,發現20160步後魔方還原了,那麼此20160就是週期。也就是說在20160步內肯定已經破解了此魔方,假設是在第n * 20步(20是密匙的長度)的時候破解了,那麼剩下的201^^3 – n * 20 步都是耍花招騙人的。由於密匙有長度20,需要將週期除一下:20160 / 20 = 1008。

問題歸結於求n,由週期性可知n = 201^^3 % 1008。

hankcs並不瞭解數論,但是還是搜索到一個有用的公式:

(a * b) % c = ((a % c) * (b % c)) % c

看到這裏hankcs明白201^^3 % 1008仍然含有一個大數,大數怎麼辦?還是一板斧,找週期!hankcs編寫了一段程序求解201x % 1008(x = 1 …… 1024)並從中發現了週期規律:

1
2
3
4
5
6
7
8
9
10
11
12
13
201
81
153
513
297
225
873
81
153
513
297
225
873

從第二個餘開始都在重複着週期爲6的週期串。hankcs並不瞭解數論,所以這裏只是依據“現象”推斷這就是一個週期串。如果讀者朋友能夠證明的話,請一定賜教。今天發現這個完全可以用數學歸納法證明……

那麼問題進一步簡化爲201201 % 6 等於多少的問題。不過201201仍然是個大數,怎麼辦?仍然靠週期一板斧!繼續用前面的程序求解201x % 6(x = 1 …… 1024)並從中發現了週期規律:

1
2
3
4
5
6
7
8
9
10
3
3
3
3
3
3
3
3
3
3

這下不用我說明了,201x % 6 = 3是板上釘釘的事情了。

於是201^^3 % 1008 = 第一個列表中第 (201x % 6 – 1) % 6 + 1 = 2 個數(先減一後加一是因爲週期從第二個數開始),也就是153,n = 153 !沒有嚴密的證明,浪人的劍法只要奪命就好了。

於是重複153次密匙,也就是旋轉153 * 20 = 3060 步就能破解魔方,將3060代入魔方程序解出最終結果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Cong
ratu
lati
ons!
Follow the link.
 
 
u-tokyo.ac.jp/is
t_ueno_yuuka
Grad
Sch
of
IST

看來謎題的答案就是讓我Follow the link. http://www.is.s.u-tokyo.ac.jp/ist_ueno_yuuka ,於是hankcs複製此url到地址欄回車,結果看到:

這句話的意思是,已結束這個頁面的公開展示。想想也不奇怪,海報是5月份貼出來的,現在都11月份了。反正我破解了這個謎題,這就是我要的結果。

昨天晚上開始熬夜到2點,上午精讀課上終於解明此題的時候,hankcs簡直要無視講臺上的石津先生狂笑起來。也許這個簡陋的畫面對hankcs來說,勝於一切紅顏:





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章