一个漫画将这个hello world程序作为Ruby代码的一个例子.
代码看起来像这样; 但有一些不可打印的unicode字符,我无法进入Stack Overflow代码编辑器.
= 1 = + = * + = * = [ *( + )+ , = * + , = * + - , , = + , * + + , * - * + + , , + + , , * , + + , ] puts .map(&:chr).join
我想看看它是如何工作的,但是当我最初尝试在几个在线IDE中运行时,它们都报告了语法错误,因为GitHub没有将unicode字符放在Web版本中.任何人试图从这里或GitHub页面复制代码而不是下载zip版本(以获取特殊字符)将有同样的问题.找到了让它运行的问题,它是如何工作的?
在压缩文件中,使用类似于下划线的字符.用下划线替换这些字符不会改变程序的行为,所以我将在这里这样做:
_ = 1 __ = _+_ ___ = __*__+_ ____ = ___*__ _____ = [____ *(___+__)+__, _______ = ____*____+_, ________ = ____*____+____-__, ________, _______ = _______+____, ____*__+____+__, ____*____-__*____+___+__, _______, _______+_+__, ________, ____*____, ____+_+__, ____] puts _____.map(&:chr).join
请注意,一到八个序列(不包括六个)_
被用作不同的变量,所以让我们用a
,替换它们b
,...... h
(不包括f
)以使它们更容易阅读:
a = 1 b = a+a c = b*b+a d = c*b e = [d *(c+b)+b, g = d*d+a, h = d*d+d-b, h, g = g+d, d*b+d+b, d*d-b*d+c+b, g, g+a+b, h, d*d, d+a+b, d] puts e.map(&:chr).join
通常格式化后,您会得到:
a = 1 b = a + a c = b * b + a d = c * b e = [ d * (c + b) + b, g = d * d + a, h = d * d + d - b, h, g = g + d, d * b + d + b, d * d - b * d + c + b, g, g + a + b, h, d * d, d + a + b, d ] puts e.map(&:chr).join
这一切都始于a = 1
,并最终定义数组e
,这是:
e # => [72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 13, 10]
并且它的每个元素都是字符的ASCII码"Hello World\r\n"
.通过申请chr
该号码,您将获得:
["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d", "\r", "\n"]
当你join
和他们puts
,你得到输出:
Hello World