我经常访问一个编程博客,激发了这一挑战。请在此处查看原始帖子:编程难题
挑战
定义一个函数f:Q->Q
,以便f(f(n)) = -n
对所有非零整数n
,其中,Q
是有理数的集合。
细节
请使用您喜欢的任何语言定义一个函数或程序f
,该函数或程序接受一个数字作为参数n
并返回或输出一个数字f(n)
。
可以通过最适合您的语言的机制来提供输入:函数自变量,从STDIN读取,命令行自变量,堆栈位置,语音输入,帮派标志等。
输出应该是功能/程序的返回值或打印到STDOUT。
我想将答案限制为不利用程序状态或从函数外部可见的全局内存/数据的函数f
。例如,将计数器保留在该计数之外将对调用f
次数f
进行计数,并且仅基于此计数进行否定对任何人来说都不是挑战或有趣的事情。做出的决定f
应仅依赖f
词法范围内的数据。
但是,此限制可能不适用于某些面向堆栈的语言或其他无法区分这些类型的数据或范围的语言。请运用您最好的判断力来迎接挑战的精神。
计分
通用代码高尔夫规则适用-您的得分是源代码中的字节数。
最小答案要求的域和共域是f
有理数的子集Q
。如果将的域和共域限制f
为整数Z
,则分数是源代码中字节数的90%的上限。
抢七
如果出现平局,将按以下顺序使用:
- 源代码中可打印的非空白符号数量最少
- 最早提交答案的日期和时间
编辑
您不需要支持任意大小的数字。请使用您选择的语言(通常分别为整数和浮点)解释集合Z
和Q
数据类型。
如果您的解决方案完全依赖于数据类型的基础结构或位模式,请描述其局限性以及如何使用它。
f:Q->Q
意思吗?
f
是一个函数,将Q
(有理数)个成员映射到的其他成员(可能相同)Q
。参见en.wikipedia.org/wiki/Function_(mathematics)#Notation