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)代码解析相关推荐

  1. 国际c语言混乱编码大赛,国际C语言混乱代码大赛代码赏析(一)【转】

    国际C语言混乱代码大赛代码赏析(一) 近段时间在看<C专家编程>,里面提到国际C语言混乱代码大赛(The International Obfuscated C Code Contest I ...

  2. 国际c语言混乱编码大赛,国际C语言混乱代码大赛优胜作品详解之“A clock in one line”...

    下面这段代码即为第19届 IOCCC(国际混乱C语言代码大赛)优胜作品:"A clock in one line". 1 main(_){_^448&&main(- ...

  3. c语言国际编码标准统一编码,88、国际C语言混乱代码大赛-2020.03.11

    国际C语言混乱代码大赛 国际C语言混乱代码大赛官网 1987年国际C语言混乱代码大赛获奖的一行代码 国际C混乱码大赛 2012国际C语言混乱代码大赛冠军代码 膜拜,第 25 届国际 C 语言混乱代码大 ...

  4. 国际C语言混乱代码大赛优胜作品详解之“A clock in one line

    国际C语言混乱代码大赛优胜作品详解之"A clock in one line" 发表于2013-04-11 17:22| 9419次阅读| 来源StackOverflow| 53  ...

  5. 第21届国际C语言混乱代码大赛获奖作品

    小行踪 2012-10-22 14:10 第21届国际C语言混乱代码大赛(IOCCC)正式发布了获奖源代码.IOCCC要求参赛者写出最有创意且最让人难以理解的C语言代码,大小限制在4 kb以内,因此每 ...

  6. c语言获奖程序,1987年国际C语言混乱代码大赛获奖的一行代码

    最近CoolShell博主做了一个很有意思的在线puzzle,这些谜题很有趣同时也有一定的难度.由于水平有限,我并没有通关,我觉得这些题还是很值得一做的,从中可以学到很多东西. 例如其中的第二题: 题 ...

  7. 第二十一届国际C语言混乱代码大赛结果公布

    摘要:国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项著名的国际编程赛事,从1984年开始到2006年,每年举办一次 ...

  8. 国际C语言混乱代码大赛结果公布

    国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项国际编程赛事,从1984年开始,每年举办一次(1997年.1999年 ...

  9. C专家编程 第8章 为什么程序员无法分清万圣节和圣诞节 8.10 轻松一下---国际C语言混乱代码大赛

    轻松一下---国际C语言混乱代码大赛     C语言结合了汇编语言的所有威力和汇编语言的所有易用性. 国际C语言混乱代码大赛(IOCCC)是一项年度竞赛,自1984年以来一直延续至今.它源于Lande ...

最新文章

  1. WIndows 下安装mysql (non-install版本,即绿色版,或称为 源码包)
  2. 将一个string左移N位置
  3. 双频无线网安装设置(5g ) for linux
  4. 坡度土方计算案例_土石方工程造价中的细节解析(案例+计算式)
  5. 组件的生命周期钩子函数
  6. 华为年度旗舰Mate 30 Pro真机现身,既惊喜又失望...
  7. java 减法基础_java基础之运算符
  8. 交通灯程序设计C语言,单片机C语言程序设计:LED 模拟交通灯
  9. Java实现简易文本编辑器
  10. Java 3D期末复习第三章——Java 3D 基本图形功能
  11. android 半透明色值_Android应用中设置alpha值来制作透明与渐变效果的实例
  12. 程序员每天自动填写周报日报工时脚本完整脚本(附源码)
  13. Ubuntu下的快捷键截图
  14. ESP32 系统篇: 优化系统启动时间
  15. has an unsupported return type
  16. 如何以身作则,做孩子的榜样
  17. WZOI-272友谊
  18. 【2021-04-02】JS逆向之某查查pe端cookie分析
  19. AutoCAD 2019 怎么设置经典模式(经典界面)?
  20. 《第一行代码Android》笔记

热门文章

  1. Spring 如何读取properties文件内容
  2. 网站使用微信扫码登录流程
  3. 正确理解hibernate的inverse属性
  4. redis 使用管道pipeline和不使用管道的性能对比
  5. C语言运行界面字体,C语言实现图形界面登陆窗口.docx
  6. mysql实现动态查询_mysql 实现动态查询
  7. Mac解决终端显示乱码
  8. 对mysql日志进行操作的总结包括 启用,过期自动删除 等
  9. ant4 多个form 验证_ant-design表单处理和常用方法及自定义验证操作
  10. java testng 优化_java+testNG测试框架搭建----jenkins自动化执行