Форум сайта python.su
Булева функция XOR (сложение по модулю два) задаётся следующей таблицей истинности:
xor(0,0)=0
xor(0,1)=1
xor(1,0)=1
xor(1,1)=0
На вход подаются две последовательности (a₁,…,an) и (b₁,…,bn) из 0 и 1.
Вычислите последовательность из (c₁,…,cn), где каждая cᵢ=xor(aᵢ,bᵢ).
Формат ввода
На вход подаются две строки из 0 и 1, разделённых пробелами.
Первая строка — это последовательность (a₁,…,an).
Вторая строка — это последовательность (b₁,…,bn).
Формат вывода
Выведите последовательность (c₁,…,cn), разделяя каждый элемент пробелом
Примечания
Для решения задачи можете использовать функцию zip.
Пример:Тест 1
Входные данные:
0 0 1 1
0 1 0 1
Вывод программы:
0 1 1 0
Отредактировано n293 (Ноя. 11, 2017 21:52:09)
Офлайн
a = '0 0 1 1' b = '0 1 0 1' c = ' '.join(map(lambda a, b : str(int(a != b)), a.split(), b.split())) print(c)
Офлайн
Romissevd, спасибо!
Можете пояснить, что делает лямбда-функция?
Я ее даже в отдельную функцию вынес, чтобы продебажиться и понять как она работает, но все равно не очень понятно.
def aorb(a, b): return str(int(a != b)) a = '0 0 1 1' b = '0 1 0 1' c = ' '.join(map(aorb(a, b), a.split(), b.split())) print(c)
Отредактировано n293 (Ноя. 11, 2017 22:17:52)
Офлайн
lambda a, b : str(int(a != b))
def aorb(a, b): return str(int(a != b))
Отредактировано Romissevd (Ноя. 11, 2017 22:28:39)
Офлайн
Romissevd, видимо я неверно выразился
В функцию подается два параметра, если параметр1 не равен параметр2, то возвращается…?
Офлайн
n293возвращается True-истина это что то существующее то есть int(True) == 1 а False это ничего то есть 0 int(False) == 0 более наглядно
если параметр1 не равен параметр2, то возвращается…?
def aorb(a,b): if a != b: return 1 else: return 0 a = '0 0 1 1' b = '0 1 0 1' print(*list(map(aorb,a.split(),b.split())))
Отредактировано marvellik (Ноя. 12, 2017 12:39:29)
Офлайн
marvellik, спасибо!
Офлайн
print(*map(int, map(lambda a, b: a != b, map(int, input().split()), map(int, input().split()))))
Отредактировано BreakX (Дек. 5, 2017 21:34:43)
Офлайн
Чисто функциональное решение на Haskell-е. Я надеюсь что оно будет более понятнее чем решения на Python-е.
xor '0' '0' = '0' xor '0' '1' = '1' xor '1' '0' = '1' xor '1' '1' = '0' xor _ _ = ' ' a = "0 0 1 1" b = "0 1 0 1" main = print(zipWith xor a b)
Отредактировано Rodegast (Дек. 6, 2017 22:27:44)
Офлайн