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