在简单的映射函数中避免使用IF

Joã*_*iel 2 c++ ruby r function

我试图在以下映射函数中避免使用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
Run Code Online (Sandbox Code Playgroud)

它基本上是Y = (12 - X),除非X = 12.在这种情况下,Y = 12.

Y矢量是相反X移动一个位置矢量.有没有办法使用min和/ max或类似的东西编写这个函数,以避免条件?

  • 我不喜欢这里的任何编程语言

Mik*_*our 8

y = 12 - x%12;
Run Code Online (Sandbox Code Playgroud)

适用于所有人x,包括1至12人.%是C风格模数运算符,给出余数除以x12.如果x是12,x则为0 ,对于1到11.


Mar*_*mas 6

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]
Run Code Online (Sandbox Code Playgroud)

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