设置场景:
这是一个平均的下午,在忙碌了一天之后,您会通过参加自己喜欢的消遣来放松:回答有关PPCG的许多令人着迷的问题。今天对您而言不是好日子;那些该死的Pyth程序员不断获得最佳答案,这正在杀死您的氛围。突然,您发现一个新问题已发布!你下定决心;这次不是CJammers。奇怪的是,您开始打字,产生了一系列字符。最终产品将成为辉煌的BrainFuck循环的胎儿。您键入并键入。快点!还快!您太专心了,甚至没有注意到屏幕上的灯光开始闪烁。突然,显示器发出绿色光,桌面上印有外星人般的符号。使用无可挑剔的技能,您cat ~/Desktop/aliensymbol并得到一堆数字,一条消息!作为您精明的PPCG程序员,您会注意到它看起来像ASCII。无论您是什么,您都可以print(chr(i) for i in file)解密消息。您首先想到的是:“我需要与社区分享!”。
...
谁会想到的?最早接触外星人的人将是PPCG谦虚的程序员。为什么是我们?也许是因为我们是人类智慧的缩影。也许是因为BrainFuck与我们使用外语差不多。尽管如此,外星人-他们是超智能的生活形式-想要测试他们是否应该将人类归类为聪明人。为了检验我们的智力,外星人要求我们向他们发送一些计算机程序,以证明我们在技术上得到了培养。问题是,他们唯一能理解的人类语言是数字ASCII!
帮助人类向那些生物展示真正的智力阿尔法。我们需要向他们发送一个脚本,该脚本会将基于文本的源代码转换为数字ASCII版本。不幸的是,由于我们的技术不发达(感谢奥巴马),我们必须发送尽可能小的翻译程序。他们选择联系PPCG的好事!
挑战:
挑战的前提很简单:您将编写一个程序,该程序将使用任何程序的源代码(或与此相关的任何常规文本文件),并在每行下方输出带有ASCII转换的空格分隔版本。也就是说,给定一个文本文件的输入,您需要输出该文件的每一行,然后输出一行,该行包含其上方一行中每个字符的ASCII表示(每个数字与其所表示的字符对齐)。
一个例子将大大阐明这一点。以臭名昭著的源代码hello world作为输入:
#include <stdio.h>
int main() {
    printf("hello, world\n");
    return 0;
}
您的程序应输出:
#   i   n   c   l   u   d   e       <   s   t   d   i   o   .   h   >
35  105 110 99  108 117 100 101 32  60  115 116 100 105 111 46  104 62  10
10
i   n   t       m   a   i   n   (   )       {
105 110 116 32  109 97  105 110 40  41  32  123 10
                p   r   i   n   t   f   (   "   h   e   l   l   o   ,       w   o   r   l   d   \   n   "   )   ;
32  32  32  32  112 114 105 110 116 102 40  34  104 101 108 108 111 44  32  119 111 114 108 100 92  110 34  41  59  10
                r   e   t   u   r   n       0   ;
32  32  32  32  114 101 116 117 114 110 32  48  59  10
}
125 10
实施细节:
您可以选择以所需的任何形式输入(打开文件,命令行管道,函数参数等),并且应将其输出到stdout或从函数返回输出。
注意事项
- 输出中的每个字符都由一个'\ t'分隔,以允许下面一行中的3位数字对齐(我们假定您的制表符设置为4个或更多)。
- 换行符显示在按下返回键的行上(请注意示例中的10)
- '\ t'和'\ n'打印要求不严格。一般而言,您的输出必须看起来令人愉悦(需要向我们展示那些具有美感的外星人),并且如果您可以在保持视觉完整性的同时弯曲前两点,那么您会被原谅。
- 您可以选择假设最后一行的末尾是否有换行符。
计分
这是代码高尔夫球,因此最短的程序获胜。请注意,即使您的程序不是最短的,但相对于您所使用的语言而言,它却使用了真正巧妙的技巧,许多+1都给您!
祝好运。人类在银河系之间的情报排名取决于您。
注意:请原谅绘图孔。我不是作家:D