Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
Dialogues solution in Creative category for Dialogues by tssrkt777
from abc import ABC
import itertools as it
class Mediator(ABC):
def notify(self, sender: object, event: str) -> None:
pass
class Chat(Mediator):
def __init__(self):
self.dialogue = ''
self.iniciator = ''
def notify(self, sender, text):
if self.dialogue=='':
if type(sender)==Human:
self.iniciator = 'human'
elif type(sender)==Robot:
self.iniciator = 'robot'
if type(sender)==Human:
self.dialogue += text + '\n'
elif type(sender)==Robot:
self.dialogue += text + '\n'
def connect_human(self, member):
if type(member)==Human:
self._human = member
self._human.mediator = self
def connect_robot(self, member):
if type(member) == Robot:
self._robot = member
self._robot.mediator = self
def show_human_dialogue(self):
chat = self.dialogue.split('\n')
chat = list(it.filterfalse(lambda x: x == '', chat))
members = [f'{self._human.name} said: ', f'{self._robot.serial_number} said: ']
i = 0 if self.iniciator == 'human' else 1
res = ''
for x in chat:
fin = '' if chat.index(x) == len(chat) - 1 else '\n'
res += members[i] + x + fin
i = 0 if i==1 else 1
return res
def show_robot_dialogue(self):
chat = self.dialogue.split('\n')
chat = list(it.filterfalse(lambda x: x == '', chat))
members = [f'{self._human.name} said: ', f'{self._robot.serial_number} said: ']
i = 0 if self.iniciator == 'human' else 1
res = ''
for x in chat:
fin = '' if chat.index(x)==len(chat)-1 else '\n'
x = ''.join(['0' if y in "aeiouAEIOU" else '1' for y in x])
res += members[i] + x + fin
i = 0 if i == 1 else 1
return res
class Member:
def __init__(self, mediator: Mediator = None) -> None:
self._mediator = mediator
@property
def mediator(self) -> Mediator:
return self._mediator
@mediator.setter
def mediator(self, mediator: Mediator) -> None:
self._mediator = mediator
class Human(Member):
def __init__(self, name):
super().__init__()
self.name = name
def send(self, text):
self.mediator.notify(self, text)
class Robot(Member):
def __init__(self, serial_number):
super().__init__()
self.serial_number = serial_number
def send(self, text):
self.mediator.notify(self, text)
if __name__ == '__main__':
#These "asserts" using only for self-checking and not necessary for auto-testing
chat = Chat()
karl = Human("Karl")
bot = Robot("R2D2")
chat.connect_human(karl)
chat.connect_robot(bot)
karl.send("Hi! What's new?")
bot.send("Hello, human. Could we speak later about it?")
assert chat.show_human_dialogue() == """Karl said: Hi! What's new?
R2D2 said: Hello, human. Could we speak later about it?"""
assert chat.show_robot_dialogue() == """Karl said: 101111011111011
R2D2 said: 10110111010111100111101110011101011010011011"""
print("Coding complete? Let's try tests!")
Sept. 19, 2021