macb() ?

lpcbyu(&gbcq/_\021%ocq\012\0_=w(gbcq)/_dak._=}_ugb_[0q60)s+

这是CoolShell博主之前做了一个非常有意思的在线puzzle,仿照一些前端过关的游戏,做了几个和程序猿有关的迷题,一个通关游戏。这个事測试的第二题。并为通关的前十名送上《Unix环境高级编程(第三版)》(感谢

from=feed&loc=at" style="color:#6c6351">@出版圈郭志敏 赞助)或一个马克杯(感谢@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,接着看下一题去

1987年国际C语言混乱代码大赛获奖的一行代码的更多相关文章

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

    本文转载自:http://blog.csdn.net/ce123_zhouwei/article/details/9073869 国际C语言混乱代码大赛代码赏析(一) 近段时间在看<C专家编程& ...

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

    原文链接:https://blog.csdn.net/herorenme/article/details/8864351 摘要:IOCCC,即国际混乱C语言代码大赛是一项著名的国际编程赛事迄今已举办2 ...

  3. 国际混淆C代码大赛获奖作品部分源码

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

  4. C语言混乱代码大赛

    main() {printf(&unix["\021%six\012\0"], (unix)["have"] + "fun" - 0 ...

  5. 国际C 语言乱码大赛(IOCCC )

    你也许听说过“国际C 语言乱码大赛(IOCCC )”,能获奖的人毫无疑问是世界顶级C 程序员.这是他们利用C 语言的特点极限挖掘的结果.下面这个例子就是网上广为流传的 一个经典作品:// 原始代码如下 ...

  6. 【南阳OJ分类之语言入门】80题题目+AC代码汇总

    小技巧:本文之前由csdn自动生成了一个目录,不必下拉一个一个去找,可通过目录标题直接定位. 本文转载自本人的csdn博客,复制过来的,排版就不弄了,欢迎转载. 声明: 题目部分皆为南阳OJ题目. 代 ...

  7. C 语言代码风格之 Linux 内核代码风格

    GitHub: https://github.com/storagezhang Emai: debugzhang@163.com 华为云社区:https://bbs.huaweicloud.com/b ...

  8. 《明解c语言》已看完,练习代码此奉上

    2016年9月20日至2016年11月12日,从学校图书馆借来的<明解c语言>看完了. 大三第一个学期,前8周,有c语言程序设计的课.课本是学校里的老师编写出版的,为了压缩空间,减少页面, ...

  9. 根据Unicode编码用C#语言把它转换成汉字的代码

    rt 根据所具有的Unicode编码用C#语言把它转换成汉字的代码 var s = System.Web.HttpUtility.HtmlDecode(Utf8Str); var o = Newton ...

随机推荐

  1. WordPress 多语言支持(本地化)

    本博客将介绍WordPress的多语言制作 首先需要在wp-content目录下创建一个languages文件夹,用于存放语言包文件. 然后在模板目录下的functions.php,然后在代码中添加函 ...

  2. 九度oj 题目1096:日期差值

    题目描述: 有两个日期,求两个日期之间的天数,如果两个日期是连续的我们规定他们之间的天数为两天 输入: 有多组数据,每组数据有两行,分别表示两个日期,形式为YYYYMMDD 输出: 每组数据输出一行, ...

  3. iOS学习笔记19-地图(一)定位CoreLocation

    一.定位介绍 现在很多社交.电商.团购应用都引入了地图和定位功能,似乎地图功能不再是地图应用和导航应用所特有的.的确,有了地图和定位功能确实让我们的生活更加丰富多彩,极大的改变了我们的生活方式.要实现 ...

  4. hdfs api读写文写件个人练习

    看下hdfs的读写原理,主要是打开FileSystem,获得InputStream or OutputStream: 那么主要用到的FileSystem类是一个实现了文件系统的抽象类,继承来自org. ...

  5. 【数位DP】bnuoj 52813 J. Deciphering Oracles

    http://acm.bnu.edu.cn/v3/contest_show.php?cid=9208#problem/J [AC] #include<bits/stdc++.h> usin ...

  6. 【译】NCCloud: Applying Network Coding for the Storage Repair in a Cloud-of-Clouds

    NCCloud:多云存储设备下存储修复的网络编码 Yuchong Hu, Henry C. H. Chen, Patrick P. C. Lee, Yang Tang  摘要:近年来的研究提出通过条带 ...

  7. LA 3263 平面划分

    Little Joey invented a scrabble machine that he called Euler, after the great mathematician. In his ...

  8. Longge的问题(bzoj 2705)

    Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一 ...

  9. MySQL-JDBC Loadbalance深入解析

    背景说明 公司的整个电商系统搭建在华为云上,根据老总的估计,上线3个月之后日订单量会达到百万级别,保守估计3个月之后总订单个数预计会有5千万.MySQL单表达到千万级别,就会出现明显的性能问题.根据如 ...

  10. delphi 与 sqlite3

      delphi与sqlite file:0 前言 本文的目的在于采用流水账方式来记录学习delphi访问嵌入式数据库sqlite中的一些点滴.欢迎各位同好共同学习和批评指正. file:1 准备工作 ...