日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

zpl代码可以编译的特殊字符_国际C语言混乱代码大赛(IOCCC)代码解析

發布時間:2024/9/18 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zpl代码可以编译的特殊字符_国际C语言混乱代码大赛(IOCCC)代码解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019年Best one-liner:http://ioccc.org/2019/burton/hint.html

這個程序只有一行:

e,n,j,o,y;main(){for(++o;n=-~getchar();e+=11==n,y++)o=n>0xe^012>n&&'`'^n^65?!n:!o?++j:o;printf("%8d%8d%8dn",e^n,j+=!o&&y,y);}

功能就是統計一個文件里的行數、單詞數、字母數。

加上換行格式化后是這樣的:

e, n, j, o, y; main() {for (++o; n = -~getchar(); e += 11 == n, y++)o = n > 0xe ^ 012 > n && '`' ^ n ^ 65 ? !n : !o ? ++j : o;printf("%8d%8d%8dn", e ^ n, j += !o && y, y); }

編譯指令:

WARN="-Wno-implicit-int -Wno-missing-variable-declarations -Wno-parentheses" clang -Wall -Wextra -Weverything -pedantic $WARN -include stdio.h -o prog prog.c

這塊兒我也不熟,但看字面意思應該就是說把默認的變量設為int,然后加上stdio.h

然后就是代碼說明了:

先看循環條件:

n=-~getchar()//getchar函數不斷讀取字符,到結尾后返回EOF(-1),而-~(-1) =0;所以就可以跳出循環e += 11 == n, y++//e:行數統計 遇到換行符+1 y:字符統計 直接+1

可以看到行數信息和字符數信息很容易就實現了。

然后就是for中的循環語句,嵌套了兩次三元運算符,主要功能就是統計單詞個數。

邏輯是這樣的:

如果當前字符為空格(或者換行,水平定位,垂直定位,換頁等)等分割字符,且前一個字符不是分割字符,那么單詞數加1.

o這個變量這里就是用來記錄前一個是否是特殊字符的。

具體解釋:

(n > 0xe) ^ (012 > n)://輸入字符為ascii中的9 到13時為假 其余為真 //即水平定位、換行、垂直定位、換頁、歸位;在ascii表中正好是連在一起的'`' ^ n ^ 65//輸入為空格時為假

所以 n > 0xe ^ 012 > n && '`' ^ n ^ 65合起來就是分割字符時為假,其余為真

!n//恒等于0;用來迷惑人的

連起來就是說,

  • 所以如果當前字符是正常字符,就把o標記為0;
  • 如果當前字符是分割字符,
    • 且當前的o=0(表示前一個字符不是分割字符),那么單詞數加一,o的值變為非0(這里是把j的值賦給了o)
    • 否則o的值不變

最后一行就是打印了,循環退出的時候n=0;所以e^n就是e;

j += !o && y這個里面的y也是一定大于0的,只是用來混淆的。

總結

以上是生活随笔為你收集整理的zpl代码可以编译的特殊字符_国际C语言混乱代码大赛(IOCCC)代码解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。