LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1205|回复: 11

不可思意的程序

[复制链接]
发表于 2006-4-27 21:58:18 | 显示全部楼层 |阅读模式
http://www.cublog.cn/u/4455/?u=h ... howart.php?id=14129
[php]
float s = 1944, x[5], y[5], z[5], r[5], j, h, a, b, d, e;
int i = 33, c, l, f = 1;
int
g ()
{
  return f = (f * 6478 + 1) % 65346;
}

m ()
{
  x = g () - l;
  y = (g () - l) / 4;
  r = g () >> 4;
}

main ()
{
  char t[1948] = " `MYmtw%FFlj%Jqig~%`jqig~Etsqnsj3stb", *p = t + 3, *k =
    "3tjlq9TX";
  l = s * 20;
  while (i < s)
    p[i++] = ' ' + 5;
  for (i = 0; i < 5; i++)
    z = (i ? z[i - 1] : 0) + l / 3 + !m ();
  while (1) {
    for (c = 33; c < s; c++) {
      c += !((c + 1) % 81);
      j = c / s - .5;
      h = c % 81 / 40.0 - 1;
      p[c] = 37;
      for (i = 4; i + 1; i--)
        if ((b = (a = h * x
                   + j * y + z) * a - (d =
                                                1 + j * j +
                                                h * h) * (-r * r +
                                                          x * x +
                                                          y * y +
                                                          z * z)) > 0) {
          for (e = b; e * e > b * 1.01 || e * e < b * .99;
               e -= .5 * (e * e - b) / e);
          p[c] = k[(int) (8 * e / d / r)];
        }
    } for (i = 4; i + 1; z -= s / 2, i--)
      z = z < 0 ? l * 2 + !m () : z;
    while (i < s)
      putchar (t[i++] - 5);
  }
}
[/php]
谁能解释一下其中的原理?
发表于 2006-4-28 11:10:43 | 显示全部楼层
没有一点注释,说明,你以为大伙都是机器,谁有心思看这种东西。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-4-28 12:09:06 | 显示全部楼层
gcc 编译通过。在终端(如xterm,mrxvt)下运行。显示有动态图形效果。
原文没有注释。
回复 支持 反对

使用道具 举报

发表于 2006-4-28 16:36:51 | 显示全部楼层
Post by dyte200
gcc 编译通过。在终端(如xterm,mrxvt)下运行。显示有动态图形效果。
原文没有注释。

那估计就是用了terminal的控制字符来实现的
这也没有什么太特别的

没运行过,纯粹猜测
回复 支持 反对

使用道具 举报

发表于 2006-4-28 23:26:28 | 显示全部楼层
dyte200:  你是怎么编译通过的? 我不知道怎么加选项对这种非标准程序.
回复 支持 反对

使用道具 举报

发表于 2006-4-29 10:30:15 | 显示全部楼层
我试了一下,直接编译就可以了

gcc -Wall test.c

是挺有趣的,有个小问题,终端必须是80x24的,改了大小显示效果就不好。
回复 支持 反对

使用道具 举报

发表于 2006-4-29 10:48:41 | 显示全部楼层
原来是我cat到文件时复制有误, 现在行了

没什么意思啊.
回复 支持 反对

使用道具 举报

发表于 2006-5-3 23:00:55 | 显示全部楼层
如果记得 不错的话,是像windows 上屏保中,星星一样的东西,
是控制终端下的光标位置,再显示字符来达成这种效果 的。
控制终端光标用 vt100 。
显示用 printf 就行
至于行列数,是程序定的,当然可以改了,
不过那样就影响显示的效果 了。如果在加上改变显示字符的颜色。
就可以做游戏了。
回复 支持 反对

使用道具 举报

发表于 2006-5-4 05:02:31 | 显示全部楼层
感觉各位的讨论没有说到重点. 这个程序实现的效果确实很简单, 但是用这么简短的代码来实现这种效果就不是那么简单的了.

虽然我不是楼主, 但还是想说一下, 最好不要把别人假设成一个白痴, 这是不礼貌的.
回复 支持 反对

使用道具 举报

发表于 2006-5-4 09:13:31 | 显示全部楼层
这段程序原出处,可能是一个比赛,
比赛的内容是写出的可运行的程序让人看不懂。
原文是把空行,回车全去掉的,可程序还能运行。
很乱的。
呵呵
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表