“所以你是想讓我們幫你改良抄襲的檢測工具?”
“嗯,搞定了那可是大功一件,我保證你獎學……好吧,你也不缺獎學金,回滬海我請你吃飯吧,金茂頂樓。”
“哇,這麼奢侈的嗎。”
“是啊,這可是大專案,怎麼樣,幫兄弟個忙唄?”
“行,我試試,不過話先說在前面,程式語言上我可沒你想象中這麼厲害。”
“是你比你想象中厲害的多才對。”李巖搖搖頭,雖然吳斌沒有幫他解決過什麼實際的程式碼問題,但李巖對他的學力實在太放心了,但凡是這位大佬用心鑽研過的東西,都能達到常人無法理解的境界。
兩人都屬於雷厲風行的『性』格,所以吃完飯,吳斌和林紫琪直接就跟著李巖來到了學生會辦公室。
【肩負時代使命,匯聚青春力量!】
一進門,就是滿牆各種黨報和宣傳字眼,可以說相當的紅,讓人看一眼就使命感滿滿。
在李巖的帶領下,吳斌認識了紀檢部的副『主席』唐成文。
得知吳斌是來幫忙解決問題的時候唐成文立馬錶示了熱烈的歡迎。
去年吳斌就從李巖這得知了科大的學生會沒有那種傳說中的“官僚氣”,大家都是把學生會當作了一個鍛鍊能力的地方,所以氛圍很不錯。
雖然吳斌也聽說過有些學生加入學生會之後會打起官腔,大權在握後甚至幹些結黨私營的事情,但他真的很難想象那會是種什麼樣的光景。
互相客氣幾句後唐成文向吳斌敘述了一下作弊的現象以及範圍。
吳斌聽完了然的點點頭。
總之就是他並不需要去研究抄襲是怎麼發生的,而是要研究出一個更好的自動程式從一堆提交的昨夜裡有效的把抄的程式碼給招出來。
‘有點意思’
這讓吳斌聯想到他在論壇上遇到過的一個小遊戲,內容是給你兩份c程式碼,你給它們之間的相似度打個分,是一種對語言理解的有效訓練。
“我試試吧。”
程式碼界的江湖高手吳斌已經在各大論壇見識了不少,不過他現在身在科大,會遇到什麼樣的道行的黑山老妖還真不知道。
“真聰明啊……”
刷完幾組程式碼,吳斌嘴角翹了翹,這個寫程式碼的人明顯知道會有人檢測程式碼的相似度,所以故意把程式碼給改複雜了,如果要人工一一來鑑定的話,的確費時費力。
另外還有直接把程式碼複製過來的同學,應該都是些抱大腿的同學,可以說完全是不勞而獲,雖然說這是人的天『性』,但肯定不是什麼好行為啊。
‘不過這個實驗設計的的確有些枯燥,估計大多數同學沒興趣認真做吧。’
但錯的就是錯的,養成這種習慣對於學業肯定沒有任何好處。
“怎麼樣,有難度嗎?”站在身後的唐成文問。
“還行,給我點時間就好。”
“那就太好了。”唐成文說完小聲問李巖:“你還認識信院的朋友?”
“哦不是,他是我同學,物院的。”
“物院現在這麼全能了嗎!?”唐成文驚道。
“沒,就他一個,他興趣愛好比較廣泛。”
“優秀……”
兩人聊天間吳斌正做著問題分析,從本質上來說,檢查抄程式碼的問題其實是給定兩份程式碼p1和p2。
要求d(p1,p2)它們之間的“距離”,距離越小則抄襲嫌疑越大。
解決問題的前提自然是找到問題,目前這麼多程式碼看下來,吳斌差不多在心裡做了個總結。
用的最多的方法是修改註釋、變數名、大小寫等無關資訊。接著是程式碼重排、風格修改等,例如用indent工具過濾一下程式碼,要知道每個人都有自己的程式設計風格,這麼一改,肉眼看起來可就大不一樣了。
另外兩種比較有技術『性』,一是增加或刪除程式碼中的冗餘成分,例如增加一些沒用的程式碼,或者刪掉一些列印的除錯資訊。
二是對資料結構、迴圈、區域性程式碼做等價的重寫,拆分、合併函式。
找出問題,吳斌第一件需要做的事情就是最佳化編譯器編譯程式碼,這一點很重要,可以把很多手工改過的等價程式碼最佳化成同樣的二進位制程式碼,接著再取得函式的指令序列。
這樣一來,除了對資料結構、迴圈、區域性程式碼做等價的重寫這種最具有技術『性』的方法外,其他三種作弊方法就都沒用了。