gpt4 book ai didi

ruby - 这个使用不可打印的 unicode 字符的混淆的 hello world 程序是如何工作的

转载 作者:数据小太阳 更新时间:2023-10-29 07:41:34 26 4
gpt4 key购买 nike

A cartoonthis hello world program作为 Ruby 代码的示例。

代码如下所示;但有许多不可打印的 unicode 字符,我无法进入 Stack Overflow 代码编辑器。

      = 1
= +
= * +
= *
=
[ *( + )+ ,
= * + ,
= * + - ,
,
= + ,
* + + ,
* - * + + ,
,
+ + ,
,
* , + + ,
]
puts .map(&:chr).join

我想看看它是如何工作的,但是当我最初尝试在几个在线 IDE 中运行它时,它们都报告语法错误,因为 GitHub 没有将 unicode 字符放入网络版本中。任何试图从此处或 GitHub 页面复制代码而不是下载 zip 版本(以获取特殊字符)的人都会遇到同样的问题。弄清楚让它运行的问题后,它是如何工作的?

最佳答案

在压缩文件中,使用了一个类似于下划线的字符。用下划线替换这些字符不会改变程序的行为,所以我会在这里这样做:

_     = 1
__ = _+_
___ = __*__+_
____ = ___*__
_____ =
[____ *(___+__)+__,
_______ = ____*____+_,
________ = ____*____+____-__,
________,
_______ = _______+____,
____*__+____+__,
____*____-__*____+___+__,
_______,
_______+_+__,
________,
____*____, ____+_+__,
____]
puts _____.map(&:chr).join

注意一到八(不包括六)的序列_被用作不同的变量,所以让我们将它们替换为ab , ... 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]

它的每一个元素都是"Hello World\r\n"中字符的ASCII码。通过将 chr 应用于该数字,您将获得:

["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d", "\r", "\n"]

当你join它们并puts时,你会得到输出:

Hello World

关于ruby - 这个使用不可打印的 unicode 字符的混淆的 hello world 程序是如何工作的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34455427/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com