国际C语言混乱代码大赛优胜作品详解之“A clock in one line
2013-04-15 13:05
211 查看
国际C语言混乱代码大赛优胜作品详解之“A clock in one line”
发表于2013-04-11 17:22| 9419次阅读| 来源StackOverflow| 53 条评论|
作者nneonneo
IOCCCC代码大赛是一项著名的国际编程赛事迄今已举办22届,比赛的目的在于写出最富创意、最让人难以理解的C语言代码。本文解读了19届IOCCC优胜作品“A clock in one line”的工作原理,望对您有益。
下面这段代码即为第19届 IOCCC(国际混乱C语言代码大赛)优胜作品:“A clock in one line”。
首先,将这段代码格式化:
另外,它还使用数据表来设定输出形式,决定输出的是字符32(即字符空格)还是字符33(即字符 ! )。第一个表“>'txiZ^(~z?”是一组10位图,描述每个字符的外观;第二个表 “;;;====~$::199”的作用是,从位图中选择合适的位元来展示。
[b]第二个表
我们先检查一下第二个表,“int shift = ";;;====~$::199"[(i*2&8) | (i/64)];”其中 i/64 是行数(从6到0);而 i*2&8 当且仅当i为4、5、6、7mod8时为8。
“if((i & 2) == 0) shift /= 8; shift = shift % 8”选择表的高8位(i%8=0、1、4、5)或者低8位(i=2、3、6、7)值。因此转换表最终看起来是这个样子:
第一个表
__TIME__是预处理器定义的特殊的宏,它能扩展为一个字符串,内容为预处理器运行的时间,格式为“HH:MM:SS”,刚好占8个字符。注意:数字0-9的ASCII值为48-57,“:”的ASCII值为58。而每行输出64个字符,因此
__TIME__ 的每个字符有8个字符的空间。
“7 - i/8%8”是当前正在输出的 __TIME__ 的索引(其中“7-”是必须的,因为我们从 i 开始向下遍历)。因此 t 即 __TIME__ 要输出的字符。
a的值取决于t,对应关系如下:
出于美观考虑,我们把对64位做一些修改(因为输出仅使用低6位,所以不会受到影响),于是就变成了“?{{?}}?gg::799G”(注意:第8位并没有被使用,因此我们还可以做更多的衍生创作)。
现在代码就变成了:
相关文章推荐
- 国际C语言混乱代码大赛优胜作品详解之“A clock in one line”
- 国际C语言混乱代码大赛优胜作品详解之“A clock in one line”
- 国际C语言混乱代码大赛优胜作品详解之“A clock in one line”
- one-line conditional & switch statements in python
- 关于display:inline-block 的详解
- [CSS]详解display:inline | block |inline-block的区别
- css display:inline block详解
- LintCode:875. Longest Line of Consecutive One in Matrix
- 嵌套错误Inline markup blocks (@<p>Content</p>) cannot be nested. Only one level of inline markup is allowed
- [CSS]详解display:inline | block |inline-block的区别
- LaTeX: two figures in one line (两个图片置于同一行)
- How To Set a Status Flag in One Clock Domain, Clear It in Another
- Longest Line of Consecutive One in Matrix
- How To Import A Sales Order With One Line In Booked Status
- One Line Command to Install Adobe Flash Player in Ubuntu
- 详解CSS display:inline-block的应用
- CSS 中 display:inline-block 属性使用详解
- 详解CSS display:inline-block的应用
- Openstack最新版本Newton-AllInOne免费安装视频详解
- [Leetcode] 562. Longest Line of Consecutive One in Matrix 解题报告