當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 嵌入式微處理器
[導(dǎo)讀]今天?Hacker News?上有個(gè)熱帖討論一個(gè)?C?程序,一次調(diào)用輸出的井字棋游戲。 打開一看,原來(lái)是 2020 年 IOCCC 大賽的一個(gè)參賽作品: #include #define N(a) "%"#a"$hhn"#define O(a,b) "%10$"#a"d"N(b)#define U "%10$.*37$d"#define G(a) "%"#a"$s"

今天 Hacker News 上有個(gè)熱帖討論一個(gè) 程序,一次調(diào)用輸出的井字棋游戲。



打開一看,原來(lái)是 2020 年 IOCCC 大賽的一個(gè)參賽作品:

#include <stdio.h>
#define N(a) "%"#a"$hhn"#define O(a,b) "%10$"#a"d"N(b)#define U "%10$.*37$d"#define G(a) "%"#a"$s"#define H(a,b) G(a)G(b)#define T(a) a a #define s(a) T(a)T(a)#define A(a) s(a)T(a)a#define n(a) A(a)a#define D(a) n(a)A(a)#define C(a) D(a)a#define R C(C(N(12)G(12)))#define o(a,b,c) C(H(a,a))D(G(a))C(H(b,b)G(b))n(G(b))O(32,c)R#define SS O(78,55)R "\n\033[2J\n%26$s";#define E(a,b,c,d) H(a,b)G(c)O(253,11)R G(11)O(255,11)R H(11,d)N(d)O(253,35)R#define S(a,b) O(254,11)H(a,b)N(68)R G(68)O(255,68)N(12)H(12,68)G(67)N(67)
char* fmt = O(10,39)N(40)N(41)N(42)N(43)N(66)N(69)N(24)O(22,65)O(5,70)O(8,44)N( 45)N(46)N (47)N(48)N( 49)N( 50)N( 51)N(52)N(53 )O( 28, 54)O(5, 55) O(2, 56)O(3,57)O( 4,58 )O(13, 73)O(4, 71 )N( 72)O (20,59 )N(60)N(61)N( 62)N (63)N (64)R R E(1,2, 3,13 )E(4, 5,6,13)E(7,8,9 ,13)E(1,4 ,7,13)E (2,5,8, 13)E( 3,6,9,13)E(1,5, 9,13)E(3 ,5,7,13 )E(14,15, 16,23) E(17,18,19,23)E( 20, 21, 22,23)E (14,17,20,23)E(15, 18,21,23)E(16,19, 22 ,23)E( 14, 18, 22,23)E(16,18,20, 23)R U O(255 ,38)R G ( 38)O( 255,36) R H(13,23)O(255, 11)R H(11,36) O(254 ,36) R G( 36 ) O( 255,36)R S(1,14 )S(2,15)S(3, 16)S(4, 17 )S (5, 18)S(6, 19)S(7,20)S(8, 21)S(9 ,22)H(13,23 )H(36, 67 )N(11)R G(11)""O(255, 25 )R s(C(G(11) ))n (G( 11) )G( 11)N(54)R C( "aa") s(A( G(25)))T (G(25))N (69)R o (14,1,26)o( 15, 2, 27)o (16,3,28 )o( 17,4, 29)o(18 ,5,30)o(19 ,6,31)o( 20,7,32)o (21,8,33)o (22 ,9, 34)n(C(U) )N( 68)R H( 36,13)G(23) N(11)R C(D( G(11))) D(G(11))G(68)N(68)R G(68)O(49,35)R H(13,23)G(67)N(11)R C(H(11,11)G( 11))A(G(11))C(H(36,36)G(36))s(G(36))O(32,58)R C(D(G(36)))A(G(36))SS
#define arg d+6,d+8,d+10,d+12,d+14,d+16,d+18,d+20,d+22,0,d+46,d+52,d+48,d+24,d\ +26,d+28,d+30,d+32,d+34,d+36,d+38,d+40,d+50,(scanf(d+126,d+4),d+(6\ -2)+18*(1-d[2]%2)+d[4]*2),d,d+66,d+68,d+70, d+78,d+80,d+82,d+90,d+\ 92,d+94,d+97,d+54,d[2],d+2,d+71,d+77,d+83,d+89,d+95,d+72,d+73,d+74\ ,d+75,d+76,d+84,d+85,d+86,d+87,d+88,d+100,d+101,d+96,d+102,d+99,d+\ 67,d+69,d+79,d+81,d+91,d+93,d+98,d+103,d+58,d+60,d+98,d+126,d+127,\ d+128,d+129
char d[538] = {1,0,10,0,10};
int main() { while(*d) printf(fmt, arg);}


截圖:



是不是看著發(fā)暈?發(fā)暈就對(duì)了!


IOCCC  大賽全稱:The International Obfuscated C Code Contest,國(guó)際 C 語(yǔ)言混亂代碼大賽,目的是寫出最有創(chuàng)意的最讓人難以理解的 C 語(yǔ)言代碼,并限制在 4 kb 以內(nèi)。這項(xiàng)賽事也年頭了,2020 年是第 27 次舉辦。


寫這個(gè)程序的小哥 Carlini 已經(jīng)在 GitHub 上解釋了程序原理:



鏈接:

https://github.com/carlini/printf-tac-toe


本文授權(quán)轉(zhuǎn)載自公眾號(hào)“CPP開發(fā)者”,作者CPP開發(fā)者


-END-




推薦閱讀



【01】STM32好找工作,所以學(xué)linux終究是錯(cuò)付了嗎?
【02】鋰電池充電慢?教你用 STM32 制作鋰電池快充充電器
【03】stm32幾種低功耗模式的實(shí)現(xiàn)和差別
【04】如何讓STM32優(yōu)雅地“說(shuō)”hello world?
【05】stm32幾種低功耗模式的實(shí)現(xiàn)和差別


免責(zé)聲明:整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問(wèn)題,請(qǐng)聯(lián)系我們,謝謝!

嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉