在一个简单的映射函数中避免IF



我试图在以下映射函数中避免IF:

 X  Y
 1  11
 2  10
 3  9
 4  8
 5  7
 6  6
 7  5
 8  4
 9  3
10  2
11  1
12  12

基本上是Y = (12 - X),除了X = 12。在这种情况下,Y = 12

Y矢量是偏移了一个位置的X矢量的反向。有没有一种方法可以使用minmax或类似的东西来编写这个函数,以避免条件?

  • 我不喜欢这里的任何编程语言
y = 12 - x%12;

适用于从1到12(含)的所有x%是C型模算子,给出x除以12的余数。如果x是12,则为零,对于1到11,则为x

Ruby答案:

x = (1..12).to_a
#=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
y = x.map{|n| 12 - n % 12}
#=> [11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 12]

这可以通过使用n.max而不是12来扩展到任何长度。

最新更新