如何仅使用 "a-z"、"A-Z"、"."、"\n" 和 " " 编写 Ruby 程序

How to write a Ruby program using only "a-z", "A-Z", ".", "\n" and " "

我正在尝试解决一些 Ruby 挑战,但我遇到了一些低级别(我想?)数字字符转换的大问题。

Just imagine, that you need to write program, that prints on your screen sentence ex.:

"Jon Doe was born in 2017!"

using only following characters [a-zA-Z.\n ] (small & big letters, dot, space and new line)

事实上,我什至不知道应该如何开始寻找答案。

它是某种使用 pack / unpack 的方法吗?还是有什么我找不到的简单解决方案?

"write program" 加粗是有原因的。问题是,Ruby中program最简单的定义是什么?

编写一个仅使用字母、点、space 和换行符来打印字符串的程序乍一看似乎是不可能的,但实际上并不难。

小写和大写字母允许您调用 Kernel methods (like print and puts) as well as keywords,如 nilfalsetrue。点允许您使用显式接收器调用方法。 Space 允许您将参数传递给方法。换行符分隔命令。

让我们试着得到一个 "a":

false                            #=> false
false.inspect                    #=> "false"
false.inspect.chars              #=> ["f", "a", "l", "s", "e"]
false.inspect.chars.rotate       #=> ["a", "l", "s", "e", "f"]
false.inspect.chars.rotate.first #=> "a"

现在打印 "abc":

print false.inspect.chars.rotate.first
print false.inspect.chars.rotate.first.succ
print false.inspect.chars.rotate.first.succ.succ
puts

输出:

abc

你懂的。

是的,也可以使用类似的方法打印 spaces、标点符号和数字。但我把它留给你。查看可用的方法并发挥创意。

关于如何在不使用 space 的情况下打印字符串的额外要点,只是 [a-zA-Z.\n].