在此挑战中,您将编写一个程序或函数,该程序或函数将字符串作为输入并输出两个可能值之一。我们将这些价值之一称为真实,将其称为虚假。他们实际上并不需要诚实或虚假。为了使答案有效,它必须满足四个附加条件
当您将程序传递给自身时,它将输出真实值。
如果将程序作为输入传递给任何较旧的答案,则应输出(传递给的程序的)真实输出。
如果将任何较旧的答案作为输入传递给它,则应输出(程序的)虚假输出。
在挑战的所有答案(包括您的新答案)中,必须有无限数量的字符串评估为真实输出。
这样做会慢慢建立一个答案链,每个答案都可以确定该链中的其他程序是在其之前还是之后。
这项挑战的目的是要建立一系列源限制,这些源限制将应用于后续答案,从而使每个答案都比上一个更具挑战性。
例
一条链(用Haskell编写)可以开始:
f _ = True
由于没有较旧的程序,因此条件不适用于该答案,它仅需要输出两个可能值之一,在这种情况下,它始终输出True
。
以下可能是答案:
f x=or$zipWith(==)x$tail x
它断言字符串中某处连续两次出现一个字符。第一个答案没有此属性,而第二个答案则具有(==
)。因此,这是一个有效的下一个答案。
特殊规定
您可以随意使用任意一种语言(具有免费的实现)。
如果您是最后一个回答的人,则必须等待至少7天才能发布新答案。
您的程序可能无法读取其自身的源代码。
由于第四规则很难验证是否涉及密码功能,因此不允许使用此类功能。
评分标准
每次添加答案时,您得到的分数与其在链中的位置一样多。例如,第5个答案将使作家获得5分。目标是获得尽可能多的积分。最后一个答案的答题者得分为-∞分。如果您尝试最大化自己的得分而不是“赢得”挑战,这可能会更有趣。我不会接受答案。