Найти - Пользователи
Полная версия: Задание по программированию: XOR. Решить в функциональном стиле.
Начало » Центр помощи » Задание по программированию: XOR. Решить в функциональном стиле.
1
n293
Булева функция 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


Если с этим еще с горем-пополам справились, то вот тут я вообще не вкуриваю. Помогите пожалуйста!
Romissevd
 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)
n293
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)
Romissevd
lambda
 lambda a, b : str(int(a != b))
эквивалентна
 def aorb(a, b):
    return str(int(a != b))
только короче и не имеет имени
n293
Romissevd, видимо я неверно выразился

В функцию подается два параметра, если параметр1 не равен параметр2, то возвращается…?
marvellik
n293
если параметр1 не равен параметр2, то возвращается…?
возвращается True-истина это что то существующее то есть int(True) == 1 а False это ничего то есть 0 int(False) == 0 более наглядно
 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())))
n293
marvellik, спасибо!
BreakX
print(*map(int, map(lambda a, b: a != b, map(int, input().split()), map(int, input().split()))))
Rodegast
Чисто функциональное решение на 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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB