设置场景:
这是一个平均的下午,在忙碌了一天之后,您会通过参加自己喜欢的消遣来放松:回答有关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