8
广义奎因发生器
挑战 在此挑战中,您将指定源语言 S和目标语言 T。您的任务是P用该语言编写以下程序S。如果输入了有效Q语言的程序T作为输入P,它将以有效R语言T输出没有输入和输出的有效程序Q(R),即Q应用于的源代码的程序R。此外,您应该在答案中提供一个简单的示例程序Q(越有趣,越好,尽管您对此没有得分),结果程序R以及的输出R。这是代码高尔夫球,因此是P获胜的最短代码。 换句话说,这对于编写一个可以创建任意类型的广义quines的“通用quine构造函数”是一个挑战。 澄清说明 您的源语言和目标语言可能相同。 程序P应采用一个字符串作为输入(来自STDIN或等效的字符串),并输出一个字符串(至STDOUT或等效字符串),每个输出程序也应如此R。 输入程序Q还应该将一个字符串转换为另一个字符串,但是它们的形式更加灵活:它们可以是字符串到字符串的函数,可以使用特定名称修改变量的代码段,可以使用目标语言来修改数据堆栈的代码段有一个,等等。您还可以Q通过声明例如可能不包含任何注释来进一步限制的形式。但是,您必须能够将任何可计算的字符串到字符串函数实现为输入程序Q,并且必须明确说明它们的功能以及对它们施加的进一步约束。 输出程序R实际上应该是一个(通用的)quine,所以除非Q这样做,否则它不得读取任何输入(用户输入,文件等)。 不允许出现标准漏洞。 一个例子 假设我选择Python作为源语言,选择Haskell作为目标语言,并且进一步要求输入程序应该是String -> String名为的函数的单行定义f。如果我提供反向字符串程序 f x = reverse x 作为我的Python程序的输入P,它将输出另一个Haskell程序的源代码R。该程序将的源代码打印到STDOUT R,但相反。如果P赋予身份功能 f x = x 作为输入,输出程序R是一个quine。