1987年国际C语言混乱代码大赛获奖的一行代码
macb() ?
lpcbyu(&gbcq/_\021%ocq\012\0_=w(gbcq)/_dak._=}_ugb_[0q60)s+
这是CoolShell博主之前做了一个非常有意思的在线puzzle,仿照一些前端过关的游戏,做了几个和程序猿有关的迷题,一个通关游戏。这个事測试的第二题。并为通关的前十名送上《Unix环境高级编程(第三版)》(感谢@出版圈郭志敏 赞助)或一个马克杯(感谢@linux命令行精选网 赞助))这些谜题非常有趣同一时候也有一定的难度。因为水平有限,我并没有通关。但我感觉这些东西确实非常有意思非常值得一做。还是能够从中学到不少东西的。
这个是原游戏測试的链接http://fun.coolshell.cn/。
这个測试我认为还是蛮有趣的。刚一进去看到页面就懵了无从下手啊。限于个人能力及知识面狭窄,在作者的提示下了解到这是一段与Brainfuck编程语言有关的字段。网上一番搜索查看资料后,求解答到答案是“welcome.html”。
详细求解实现过程看Brainfuck——让你脑子凌乱的程序语言
一看到这个键盘就发现跟我们寻常键盘布局不一样。于是就想到,这个题就是将图中键盘的字符与我们电脑键盘上对应位置的字符替换。于是我非常快的做了。结果例如以下
main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
看到这里有点傻眼了,难道这就是传说中的C语言混乱代码。这是4th International Obfuscated C Code Contest (1987),由AT&T Bell Labs的David Korn所写。
历届国际C语言混乱代码大赛作品赞赏
。将代码COPY后粘贴到IDE里面。编译提示"unix was notdeclared in this scope"。
好吧,没有声明。那果断的用#define宏定义个值呗
#define unix 1
尼玛,竟然执行出结果unix。
这结果真是令人意向不到,混乱代码就是一个字“乱”的有才。
通过查看相关资料。最后算是弄清了它的真面目了。
首先复习一点知识:
字符型常量和ASCII字符集。每一个字符在内存中占用一个字节,用来存储它的ASCII码值。因此。C语言的字符具有数值特征。能够像整数一样參加运算。
转义字符:有一些字符,如回车符('\r'),换行符('\n')等控制符号,它们不能在屏幕上显示。也无法从键盘输入,仅仅能用转义字符表示。转义字符由反斜杠加上一个字符或数字组成,它将反斜杠后面的字符或数字转换成别的意义。
\ddd 1-3位八进制字符所代表的字符,如\102='B'
\xhh 1-2位十六进制字符所代表的字符。如\x41='A'
printf("%x",'\n');printf("%x",'\r');//换行符。回车符的ASCII码值分别为a,d,即十进制的10。13
最后。非常重要的一点啦
int a[3]={1,2,3};
printf("%d %d\n",a[2], 2[a]);
//没错,你的眼睛却是没有看错。他竟然真的都输出是3</span>
以上翻阅自《C和指针》,arry[2]和2[arry]是等价的,这个诡异技巧之所以可行,源于C语言实现下表的方法。
尽管两者并无区别但毫无疑问这样影响程序的可阅读性啦。不建议大面积推广造成不必要的杀伤!
看到这里,我们能够将上面的翻译过的那段代码再度转换一下,例如以下:
main(){printf(&unix["\021%six\n"],(unix)["have"]+"fun"-0x60);}
//\021=17,ASCII字符为DC1。它是一个字符 ;\012=10=0xa='\n',\0='0'。则
main(){printf(&"DC1%six\n\0"[unix],"have"[unix]+"fun"-0x60);}
//令unix=1。则
main(){printf(&"DC1%six\n"[1],"have"[1]+"fun"-0x60);}
//&"DC1%six\n",去字符串中下标1处的地址,则
main(){printf("%six\n",'a'-0x60+"fun");}
//a的ASCII仅仅为97=0x61,则
main(){printf("%six\n","fun"+1);}
以上等同main(){printf("%six\n","un");}
写到这里。整个过程应该非常清晰明确了。
OK,接着看下一题去
转载于:https://www.cnblogs.com/wzzkaifa/p/7182671.html
1987年国际C语言混乱代码大赛获奖的一行代码相关推荐
- c语言获奖程序,1987年国际C语言混乱代码大赛获奖的一行代码
最近CoolShell博主做了一个很有意思的在线puzzle,这些谜题很有趣同时也有一定的难度.由于水平有限,我并没有通关,我觉得这些题还是很值得一做的,从中可以学到很多东西. 例如其中的第二题: 题 ...
- 国际c语言混乱编码大赛,国际C语言混乱代码大赛代码赏析(一)【转】
国际C语言混乱代码大赛代码赏析(一) 近段时间在看<C专家编程>,里面提到国际C语言混乱代码大赛(The International Obfuscated C Code Contest I ...
- 国际c语言混乱编码大赛,国际C语言混乱代码大赛优胜作品详解之“A clock in one line”...
下面这段代码即为第19届 IOCCC(国际混乱C语言代码大赛)优胜作品:"A clock in one line". 1 main(_){_^448&&main(- ...
- c语言国际编码标准统一编码,88、国际C语言混乱代码大赛-2020.03.11
国际C语言混乱代码大赛 国际C语言混乱代码大赛官网 1987年国际C语言混乱代码大赛获奖的一行代码 国际C混乱码大赛 2012国际C语言混乱代码大赛冠军代码 膜拜,第 25 届国际 C 语言混乱代码大 ...
- 第21届国际C语言混乱代码大赛获奖作品
小行踪 2012-10-22 14:10 第21届国际C语言混乱代码大赛(IOCCC)正式发布了获奖源代码.IOCCC要求参赛者写出最有创意且最让人难以理解的C语言代码,大小限制在4 kb以内,因此每 ...
- 第二十一届国际C语言混乱代码大赛结果公布
摘要:国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项著名的国际编程赛事,从1984年开始到2006年,每年举办一次 ...
- 国际C语言混乱代码大赛结果公布
国际C语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项国际编程赛事,从1984年开始,每年举办一次(1997年.1999年 ...
- 国际C语言混乱代码大赛优胜作品详解之“A clock in one line
国际C语言混乱代码大赛优胜作品详解之"A clock in one line" 发表于2013-04-11 17:22| 9419次阅读| 来源StackOverflow| 53 ...
- C专家编程 第8章 为什么程序员无法分清万圣节和圣诞节 8.10 轻松一下---国际C语言混乱代码大赛
轻松一下---国际C语言混乱代码大赛 C语言结合了汇编语言的所有威力和汇编语言的所有易用性. 国际C语言混乱代码大赛(IOCCC)是一项年度竞赛,自1984年以来一直延续至今.它源于Lande ...
- 国际C语言混乱代码大赛
最混乱C语言代码大赛了解一下 2018第一的作品:http://www.ioccc.org/years.html#2018 #include<stdio.h> #include<st ...
最新文章
- Makefile_03:Makefile介绍(作用、例子、原理)
- 大话设计模式C++版——装饰模式
- JS-立即执行函数(function(){...})() amp;amp; (function(){...})()
- 如何给远程计算机添加用户,如何访问远程计算机以添加/删除/管理用户帐户?...
- 区块链交易所接单_区块链交易所源码开发,交易所系统解决方案
- Sharepoin学习笔记—架构系列—Sharepoint服务(Services)与服务应用程序框架(Service Application Framework) 1
- tensor backward_Pytorch中的backward函数
- 2729: [HNOI2012]排队
- 项目管理的前路怎么样?PMP证书作用如何?
- VS中依赖库相对路径的配置及项目间依赖项
- 创建一个 scrapy 爬虫项目
- S3 api 断点下载
- Java练习习题,百钱买百鸡问题,用100文钱买鸡,公鸡5文钱一只,母鸡3文钱一只,小鸡3只1文钱
- 3999 元起,小米 13 正式发布:骁龙 8 Gen 2、IP68、超窄边框直屏、徕卡三摄
- Ubuntu 18.04 锁屏 快捷键 无效
- JS创建26个小写字母数组
- ajax换头像,ajax切换明星头像!
- 保险业未来生态的起点与三条演化路径 | 李有龙生态矩阵
- linux中license路径,Elasticsearch安装过程中的license问题解决办法
- Kaggle Cassava Leaf Disease Classification 木薯叶疾病分类竞赛
热门文章
- Barefoot P4加速SDN
- JSON、AJAX、Maven
- 【Word】去掉“项目符号/编号”之后的制表符
- 计算机软件高级职称有啥用,计算机软考高级职称有什么用
- 干货满满:一位博士在华为的22年
- springboot疫情防控下基于微信小程序的食堂订餐系统毕业设计源码261620
- 美国阿肯色州闪电彩虹共享一片天空(组图)
- 计算机机房动环系属于什么分项,动环监控系统
- 自己做语料——Python爬取新闻联播文字版
- Win10+1050Ti配置tensorflow-gpu教程 (解决1050ti配置cuda失败的问题)