Мой ответ на Java, я только вхожу в Python, поэтому я обновлю этот ответ, когда доберусь до него.
boolean nand(boolean[] a) {
boolean b = true
if (a.length > 1) {
b = a[0] && a[1];
if (a.length > 2)
for (int i = 2; i < a.length; i++)
b &= a[i];
}
return !b;
}
Использование (должно возвращать true):
nand(training_set[i][0]) == training_set[i][1]
Редактировать
Через два года я вернулся к этому вопросу, чтобы добавить к своему ответу ...
Я создал итеративное и рекурсивное решение в python.Я также попытался закодировать гольф рекурсивно.Я получил его до 106 байт.
Реализации
Итеративный
def nand(*a):
if len(a) > 1:
b = a[0] and a[1]
if len(a) > 2:
for i in range(2, len(a)):
b = b and a[i]
return not b
return None
Рекурсивный
def nand(*a):
if len(a) < 2:
return None
elif len(a) == 2:
return not (a[0] and a[1])
else:
return nand(*([a[0] and a[1]] + list(a[2:])))
Рекурсивный (лямбда)
nand=lambda*a:None if len(a)<2 else not(a[0]and a[1])if len(a)==2 else nand(*([a[0]and a[1]]+list(a[2:])))
Результаты
print nand(True, True, True) # ¬(1 ∧ 1 ∧ 1) == 0
print nand(True, True, False) # ¬(1 ∧ 1 ∧ 0) == 1
print nand(True, False, True) # ¬(1 ∧ 0 ∧ 1) == 1
print nand(True, False, False) # ¬(1 ∧ 0 ∧ 0) == 1
print nand(False, True, True) # ¬(0 ∧ 1 ∧ 1) == 1
print nand(False, True, False) # ¬(0 ∧ 1 ∧ 0) == 1
print nand(False, False, True) # ¬(0 ∧ 0 ∧ 1) == 1
print nand(False, False, False) # ¬(0 ∧ 0 ∧ 0) == 1