在所有数学中,总会有一些定理超越所有常识。其中之一是无穷大大小不同的事实。另一个有趣的事实是这样的想法,即许多看起来大小不同的无穷大实际上是相同大小的。偶数和整数一样多,有理数也一样。
这个问题的一般概念是面对无穷无尽的现实。在这个挑战中,您的程序将输出一个列表,该列表将:
- 在任何特定时间,总有大量条目
- 最终在整个列表中恰好包含一次(如果可以运行足够长的时间)任何特定的(非零)有理数
- 包含无数个空插槽(列表中的条目不必要地设置为0)
- 空插槽比例接近100%的限制
- 对于每个正整数N,具有无限数量的位置,具有N个连续的空槽
挑战
您面临的挑战是编写尽可能短的程序,该程序将输出具有以下规则的特殊列表:
- 索引不是平方数的所有条目都应设置为零。因此,第一个条目将为非零,第二个和第三个条目将为零,第四个条目将为非零,依此类推。
- 所有有理数将采用不正确分数(例如4/5或144/13)的形式进行简化。唯一的例外是零
0
。 - 如果您的程序运行足够长时间且具有足够的内存,则所有(正负)有理数最终应出现在列表中。对于任何特定的有理数,所需时间可能是任意大,但始终是有限的时间。
- 如果运行无限长的时间,则任何非零有理数都不会出现两次。
规则3确实允许某些变化,因为存在无限数量的不同可能的合法输出。
输出将是一行流。每行将具有以下一般形式:5: 2/3
第一个数字是条目号,然后是有理数。请注意,1: 0
它将始终是输出的第一行。
输出示例片段:
1: 1/1
2: 0
3: 0
4: 2/1
5: 0
6: 0
7: 0
8: 0
9: -2/1
10: 0
etc...
规则,规定和注释
这是代码高尔夫。适用标准代码高尔夫规则。同样,由于输出中允许的变化,您至少需要说明为什么您相信列表将一次包含所有可能的有理数,并且您的解决方案是正确的。
编辑:由于质数确实分散了挑战,因此我将其更改为平方数。这实现了相同的目的,并且缩短了解决方案。
1: 0
它将始终是输出的第一行。–这与您的榜样矛盾,对我也没有意义。