Codeforces April Fools Day Contest 2020 Writeups(迫真CTF)
愚人節(jié)比賽寫(xiě)作ICPC賽制讀作CTF。
這可能有點(diǎn)違背賽德我們真的當(dāng)成CTF組隊(duì)參加了。解決了ABCDEG題。這里再次感謝組友ssttkkl、TML_104、宮藤明的參與。

反正又不rate

A. Is it rated?

這題沒(méi)有題面,是的,沒(méi)有題面。但其實(shí)我們只需要回答它題目標(biāo)題問(wèn)的就好。
手賤第一時(shí)間趁著大家都卡的時(shí)候交了個(gè)復(fù)讀輸入結(jié)果WA了
exp:
print('No')

B. Limericks

這題讓我做我是拒絕的畢竟我英語(yǔ)不好。在約30min時(shí)得到ACM群asdkjc前輩的hint說(shuō)是質(zhì)因數(shù)分解(眾所周知ACM選手普遍適合打CTF),在和組友討論了一下復(fù)雜度問(wèn)題以后率先寫(xiě)出暴力的公公先A掉了,這里我是去百度找了個(gè)質(zhì)數(shù)表。
exp:


C. ...And after happily lived ever they

沒(méi)給什么題面,按數(shù)據(jù)范圍推斷應(yīng)該和二進(jìn)制有關(guān)。
轉(zhuǎn)了一下ACM群Maxzz前輩的hint,然后104做出來(lái)了。
這題是104給的題解,說(shuō)C的標(biāo)題是被打亂的一句話。要根據(jù)輸入數(shù)字的二進(jìn)制來(lái)確定選中的單詞然后將他們正確順序的二進(jìn)制數(shù)輸出。

畫(huà)圖說(shuō)話的話就是這樣的:

exp:


D. Again?

104首先猜是判斷奇偶,然后ss先寫(xiě)了一個(gè)交了上去還真是判斷奇偶(
我是只抓最后一位算的
exp:


E. Jordan Smiley

題目大意:給定坐標(biāo)判斷是在圖片圍起來(lái)的封閉區(qū)域內(nèi)還是在外。
104給了個(gè)想法:用顏料桶潑一下圖形,后面的工作就是我和公公接手了。

首先我們對(duì)潑過(guò)的圖片用PIL庫(kù)打開(kāi),之后我的處理方法和公公的略有不同:
公公用的是getpixel方法讀點(diǎn),我是圖片灰度整個(gè)轉(zhuǎn)成numpy.array對(duì)象然后才開(kāi)始統(tǒng)計(jì),我的exp1是根據(jù)圖片大小(963*964)以及數(shù)據(jù)范圍大?。?4*64)計(jì)算區(qū)段長(zhǎng)度向下取整為15,然后取偏移量9(交了偏移量為1和為5的都WA了,公公在這題因?yàn)槿×?后來(lái)又沒(méi)有調(diào)整所以沒(méi)過(guò))進(jìn)行采樣,打出01表。
exp1:

得到差不多這樣的01表:

然后把這個(gè)丟進(jìn)exp2里面進(jìn)行回答:

賽后發(fā)現(xiàn)這個(gè)偏移量真的得小心選取,因?yàn)樵}目里面給的是線圈起來(lái)的框,不是正經(jīng)的黑白格子,如果偏移量小于線的寬度就會(huì)造成采樣錯(cuò)誤。

F. Elementary!

標(biāo)題誤導(dǎo)性很大,我和104都被誤導(dǎo)為解題與電視劇Elementary有關(guān),遂去wiki搜了一下提供的8個(gè)詞,發(fā)現(xiàn)no組里面有1個(gè)單詞在正文出現(xiàn),1個(gè)在注解中出現(xiàn),yes組全部出現(xiàn)在正文中,然后我拋棄了爬取wiki頁(yè)面的想法去用類(lèi)似sql盲注的方式猜解數(shù)據(jù)(-6的來(lái)源)。
賽后Maxzz前輩告訴我是去找元素周期表,如果這個(gè)給定的單詞全部由元素構(gòu)成就是yes否則是no(原來(lái)用的是element元素的意思嗎?菜 我 菜)。
百度了一圈沒(méi)找到現(xiàn)成的元素周期簡(jiǎn)寫(xiě)表,寫(xiě)了個(gè)小爬蟲(chóng)去爬百度百科的網(wǎng)頁(yè)發(fā)現(xiàn)少了一個(gè)元素然后肉眼對(duì)了3遍沒(méi)找出來(lái),無(wú)奈去wiki右鍵網(wǎng)頁(yè)另存為到本地然后直接用re匹配去處理文檔,對(duì)拍的時(shí)候發(fā)現(xiàn)百度百科頁(yè)面上Sg元素的g這個(gè)字符在S字符所在標(biāo)簽的子標(biāo)簽里面,怪不得沒(méi)爬出來(lái)(我爬)。

最終搞到了118個(gè)元素的周期表,exp如下:


G. Lingua Romana

寫(xiě)到這題的時(shí)候,先跟我喊一句:
ssttkkl牛逼!
題目給了輸入和一段疑似拉丁文的代碼及其輸出,現(xiàn)要求你用自己的語(yǔ)言把題目所示算法表示一遍。
00:07:39?善于搜索的公公找到了題目所示語(yǔ)言是Perl的換皮(?)

00:14:42?公公給出了源鏈接?https://metacpan.org/pod/release/DCONWAY/Lingua-Romana-Perligata-0.50/lib/Lingua/Romana/Perligata.pm
同時(shí)ssttkkl開(kāi)始介入調(diào)查
00:24:40 ssttkkl翻譯成功,但是由于組內(nèi)忙于F和H,沒(méi)有引起重視。
aresult?=?sqrt(abs(val))
bresult?=?5?*?(val?**?3)
result?=?aresult?+?bresult
00:33:04 ssttkkl在組內(nèi)共享了他的代碼,我們?cè)谧詈笠环昼妰?nèi)交了G題。
exp:


H. It's showtime

題目大意:只能使用給定的未知語(yǔ)言UnknownX解決這個(gè)問(wèn)題:計(jì)算輸入n的二次階乘,對(duì)它與給定模數(shù)進(jìn)行求模。
00:35:00結(jié)束的比賽,104在00:31:11找到了線索但是來(lái)不及了。https://zhuanlan.zhihu.com/p/44095546
難點(diǎn)在于理解并運(yùn)用這么個(gè)語(yǔ)言,我們組在比賽中沒(méi)有做出來(lái)。
賽后我根據(jù)github上面找到的對(duì)應(yīng)項(xiàng)目和他給的實(shí)例花了差不多50分鐘才解決,這種語(yǔ)言只支持最多16bit signed int的定義,比我以前寫(xiě)文言的體驗(yàn)差到不知道哪里去了。
冗長(zhǎng)的代碼抄著讓人手累,滿(mǎn)屏的臟話看著讓人心煩
exp:
