Код, который возвращает True, если только один или два из трех параметров верны - PullRequest
12 голосов
/ 17 марта 2011

Мне нужен код, который возвращает True, если только один или два из трех параметров верны

какой самый короткий / лучший способ?

Ответы [ 15 ]

1 голос
/ 17 марта 2011

Поскольку мой предыдущий ответ был слишком длинным, я попробую еще раз:

bool MySecondAnswer(params bool[] list)
{
   return list.GroupBy(x => x).Count() == 2;
}
0 голосов
/ 24 февраля 2015

69 символов в bash

x (){ test "$(echo $@|sed 's/ /\n/g'|sort|uniq|grep -c .)" == "2"; }

32 символа в питоне

def x(a,b,c):return a!=b or b!=c
0 голосов
/ 11 июня 2011

Хороший вопросМой ответ:

return (a||b||c) != (a&&b&&c)
0 голосов
/ 17 марта 2011
bool result = !(a && b && c) && (a || b || c)
0 голосов
/ 17 марта 2011

Поместите логические значения в список, а затем отфильтруйте с помощью linq:

var options = new List<bool>() { true, true, false };
var trueOptions = options.Where( opt => opt };
var count = trueOptions.Count();

return count == 1 || count == 2;
...