Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 11, 2017 21:45:06

n293
Зарегистрирован: 2017-11-11
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Задание по программированию: XOR. Решить в функциональном стиле.

Булева функция 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)

Офлайн

#2 Ноя. 11, 2017 22:03:25

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Задание по программированию: XOR. Решить в функциональном стиле.

 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)

Офлайн

#3 Ноя. 11, 2017 22:15:42

n293
Зарегистрирован: 2017-11-11
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Задание по программированию: XOR. Решить в функциональном стиле.

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)

Офлайн

#4 Ноя. 11, 2017 22:28:03

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Задание по программированию: XOR. Решить в функциональном стиле.

lambda

 lambda a, b : str(int(a != b))
эквивалентна
 def aorb(a, b):
    return str(int(a != b))
только короче и не имеет имени

Отредактировано Romissevd (Ноя. 11, 2017 22:28:39)

Офлайн

#5 Ноя. 12, 2017 12:05:59

n293
Зарегистрирован: 2017-11-11
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Задание по программированию: XOR. Решить в функциональном стиле.

Romissevd, видимо я неверно выразился

В функцию подается два параметра, если параметр1 не равен параметр2, то возвращается…?

Офлайн

#6 Ноя. 12, 2017 12:35:15

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Задание по программированию: XOR. Решить в функциональном стиле.

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())))

Отредактировано marvellik (Ноя. 12, 2017 12:39:29)

Офлайн

#7 Ноя. 14, 2017 21:50:52

n293
Зарегистрирован: 2017-11-11
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Задание по программированию: XOR. Решить в функциональном стиле.

marvellik, спасибо!

Офлайн

#8 Дек. 5, 2017 21:33:28

BreakX
Зарегистрирован: 2017-12-05
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Задание по программированию: XOR. Решить в функциональном стиле.

print(*map(int, map(lambda a, b: a != b, map(int, input().split()), map(int, input().split()))))

Отредактировано BreakX (Дек. 5, 2017 21:34:43)

Офлайн

#9 Дек. 6, 2017 15:14:04

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

Задание по программированию: XOR. Решить в функциональном стиле.

Чисто функциональное решение на 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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version