有没有一段代码,让你觉得人类的智慧也可以璀璨无比?
2016-03-25 14:48
387 查看
原文地址https://www.zhihu.com/question/30262900
Kyle McCormick 在 StackExchange 上发起了一个叫做 Tweetable
Mathematical Art 的比赛,参赛者需要用三条推这么长的代码来生成一张图片。
具体地说,参赛者需要用 C++ 语言编写 RD 、 GR 、 BL 三个函数,每个函数都不能超过 140 个字符。每个函数都会接到 i 和 j 两个整型参数(0 ≤ i, j ≤ 1023),然后需要返回一个 0 到 255 之间的整数,表示位于 (i, j) 的像素点的颜色值。举个例子,如果 RD(0, 0) 和 GR(0, 0) 返回的都是 0 ,但 BL(0, 0) 返回的是 255 ,那么图像的最左上角那个像素就是蓝色。
参赛者编写的代码会被插进下面这段程序当中(我做了一些细微的改动),最终会生成一个大小为 1024×1024 的图片。
我选了一些自己比较喜欢的作品,放在下面和大家分享。
首先是一个来自 Martin Büttner 的作品:
它的代码如下:
同样是来自 Martin Büttner 的作品:
这是目前暂时排名第一的作品。它的代码如下:
下面这张图片仍然出自 Martin Büttner 之手:
难以想象, Mandelbrot 分形图形居然可以只用这么一点代码画出:
Manuel Kasten 也制作了一个 Mandelbrot 集的图片,与刚才不同的是,该图描绘的是 Mandelbrot 集在某处局部放大后的结果:
它的代码如下:
这是 Manuel Kasten 的另一作品:
生成这张图片的代码很有意思:函数依靠 static 变量来控制绘画的进程,完全没有用到 i 和 j 这两个参数!
这是来自 githubphagocyte 的作品:
它的代码如下:
这是来自 githubphagocyte 的另一个作品:
这是一张使用 diffusion-limited aggregation 模型得到的图片,程序运行起来要耗费不少时间。代码很有意思:巧妙地利用宏定义,打破了函数与函数之间的界限,三段代码的字数限制便能合在一起使用了。
最后这张图来自 Eric Tressler :
这是由 logistic 映射得到的 Feigenbaum 分岔图。和刚才一样,对应的代码也巧妙地利用了宏定义来节省字符:
Kyle McCormick 在 StackExchange 上发起了一个叫做 Tweetable
Mathematical Art 的比赛,参赛者需要用三条推这么长的代码来生成一张图片。
具体地说,参赛者需要用 C++ 语言编写 RD 、 GR 、 BL 三个函数,每个函数都不能超过 140 个字符。每个函数都会接到 i 和 j 两个整型参数(0 ≤ i, j ≤ 1023),然后需要返回一个 0 到 255 之间的整数,表示位于 (i, j) 的像素点的颜色值。举个例子,如果 RD(0, 0) 和 GR(0, 0) 返回的都是 0 ,但 BL(0, 0) 返回的是 255 ,那么图像的最左上角那个像素就是蓝色。
参赛者编写的代码会被插进下面这段程序当中(我做了一些细微的改动),最终会生成一个大小为 1024×1024 的图片。
首先是一个来自 Martin Büttner 的作品:
它的代码如下:
这是目前暂时排名第一的作品。它的代码如下:
难以想象, Mandelbrot 分形图形居然可以只用这么一点代码画出:
它的代码如下:
生成这张图片的代码很有意思:函数依靠 static 变量来控制绘画的进程,完全没有用到 i 和 j 这两个参数!
它的代码如下:
这是一张使用 diffusion-limited aggregation 模型得到的图片,程序运行起来要耗费不少时间。代码很有意思:巧妙地利用宏定义,打破了函数与函数之间的界限,三段代码的字数限制便能合在一起使用了。
这是由 logistic 映射得到的 Feigenbaum 分岔图。和刚才一样,对应的代码也巧妙地利用了宏定义来节省字符:
相关文章推荐
- Asp.Net 关于FindControl方法使用
- 码农小汪-struts2学习3-struts2 配置文件说明
- Django框架利用ajax实现批量导入数据功能
- 简学LINGO(三)——实例篇
- 【C++】析构函数的作用和用法
- eclipse 启动时候弹出框。。。
- 从 github 执行 git clone 一个大的项目时提示 error: RPC failed
- Matlab-猜数游戏
- Spring JdbcTemplate 简化 JDBC
- Qt5设置背景图片
- JavaBean中的get/set 的命名规范
- C++ 枚举进程信息,并结束指定进程
- 正则表达式匹配与查找
- Django Url编码问题
- 做一个合格的程序猿之浅析Spring AOP源码(十六) 分析ProxyFactory
- VS2012 Qt5 winpcap win64 抓包工具 编写与设计 http协议解析
- 【Spring五】AOP之使用注解配置
- spring mvc 多数据源配置
- java的Runtime的exec
- pom控制java项目的打包方式