制作无限链


16

让我们定义一类功能。这些函数将从正整数映射到正整数,并且必须满足以下要求:

  • 该函数必须是双射的,这意味着每个值都映射到一个值,并被一个值恰好映射到。

  • 您必须能够通过重复应用该函数或其反函数来从任何正整数到任何其他正整数。

现在,编写一些代码,在其输入上执行该类中的任何一个功能。

这是一个问题,因此答案将以字节计分,字节越少越好。


1
你能给我举个例子吗?
杰克

1
@Jack当然,考虑到1映射功能- > 2,映射每隔奇数到数减去2,和每个偶数到数加2
后摇滚Garf亨特

1
不确定我是否理解。f(x):= x + 1是此类的函数吗?在这种情况下,1+普通的Lisp应该可以解决问题。
MONODA43

2
@ MONODA43考虑所有整数时,该函数是双射。但是这个问题要求在正整数上有一个双射。您的建议将无法输出1,因为没有x + 1 = 1的正x。
kasperd

1
@Cowsquack 您必须能够通过重复应用该函数或其反函数来从任何正整数到任何其他正整数。无论重复多少次,都无法通过应用身份从1到2。
卡巴斯德(Kasperd)'17年

Answers:



6

Python,22个字节

lambda n:n+n%2*4-2or 1

偶数下降到前一个偶数,奇数上升到下一个奇数,并且映射2-> 1连接这两个。


等待...所以5或8可以得出6?那是无效的吗?
破坏的柠檬

@DestructibleLemon不,在我的解释中只是个偶数。
Orlp

5

JavaScript(ES6),20个字节

n=>n>1?n%2?n-2:n+2:2

地图... -> 5 -> 3 -> 1 -> 2 -> 4 -> ...,我认为是有效的。如果我错了纠正我...


9
相同的人认为很棒。我正在使用反演。
丹尼斯

@Dennis Heh,我刚刚意识到反演的时间缩短了1个字节:n=>n%2?n+2:n-2||1:2
ETHproductions's

@Dennis您已确认是Yoda:o(StepHen的聊天帖
HyperNeutrino

@HyperNeutrino太棒了,大家的想法都一样
Pavel


4

果冻,6个字节

-*Ḥạo1

在线尝试!

怎么运行的

-*Ḥạo1  Main link. Argument: n

-*      Compute (-1)**n, yielding 1 for even n and -1 for odd n.
  Ḥ     Unhalve; multipliy the result by 2.
   ạ    Compute the absolute difference of the result and n.
    o1  If the difference is 0, yield 1.

13
我们真的要让丹尼斯摆脱“半分”吗?哈哈。
orlp

2

Python 3,43个字节

lambda n,a=(1,3,-3,-1):n+a[n%4]if n-2else 1

在线尝试!

反之,也是43个字节:

lambda n,a=(-3,-1,1,3):n+a[n%4]if n-1else 2

在线尝试!

TIO链接使用Dennis的测试页脚代码。

由于每个人都在使用一种方法,所以我决定与众不同,因此我创建了自己的(虽然我可能不是第一个发现它的人)函数。该功能映射如... 10 -> 7 -> 6 -> 3 -> 2 -> 1 -> 4 -> 5 -> 8 -> 9 -> ...,如果您愿意,我可以向您展示为测试此功能而制作的手绘图。

我的高尔夫算法可能是可高尔夫的-技巧将不胜感激。

非高尔夫版本:在线尝试!




By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.