2014-09-03 1 views
2

Я пытаюсь избежать, если в следующие функции отображения:избежать 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 вектор, сдвинутый на одну позицию. Есть ли способ написать эту функцию, используя min и max или что-то вроде этого, чтобы избежать условного?

  • Я не привязан к какому-либо языку программирования здесь
+1

'Y = (X == 12)? 12: (12 - X); ' – juanchopanza

+2

Простите, если я нарушил правила. Почему отрицательные голоса? –

ответ

6

рубина ответ:

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.

8
y = 12 - x%12; 

работает для всех x от 1 до 12 включительно. % является оператором модуля С-типа, что дает остаток от деления x на 12. Это ноль, если x 12 и x для 1 до 11.

+0

+1 для приятного и простого подхода – Bala

+2

То же, что и мое, кроме моего в синтаксисе Ruby ... –

+1

В 'R' было бы' Y <- 12 - X %% 12' –

Смежные вопросы