-
-
Save vitormazzi/f8016edf4bc3b29e0582547cf3a1d52d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- | |
from __future__ import unicode_literals | |
# Considere um modelo de informação, onde um registro é representado por uma "tupla". | |
# Uma tupla (ou lista) nesse contexto é chamado de fato. | |
# Exemplo de um fato: | |
# ('joão', 'idade', 18, True) | |
# Nessa representação, a entidade (E) 'joão' tem o atributo (A) 'idade' com o valor (V) '18'. | |
# Para indicar a remoção (ou retração) de uma informação, o quarto elemento da tupla pode ser 'False' | |
# para representar que a entidade não tem mais aquele valor associado aquele atributo. | |
# Como é comum em um modelo de entidades, os atributos de uma entidade pode ter cardinalidade 1 ou N (muitos). | |
# Segue um exemplo de fatos no formato de tuplas (i.e. E, A, V, added?) | |
facts = [ | |
('gabriel', 'endereço', 'av rio branco, 109', True), | |
('joão', 'endereço', 'rua alice, 10', True), | |
('joão', 'endereço', 'rua bob, 88', True), | |
('joão', 'telefone', '234-5678', True), | |
('joão', 'telefone', '91234-5555', True), | |
('joão', 'telefone', '234-5678', False), | |
('gabriel', 'telefone', '98888-1111', True), | |
('gabriel', 'telefone', '56789-1010', True), | |
] | |
# Vamos assumir que essa lista de fatos está ordenada dos mais antigos para os mais recentes. | |
# Nesse schema, | |
# o atributo 'telefone' tem cardinalidade 'muitos' (one-to-many), e 'endereço' é 'one-to-one'. | |
schema = [ | |
('endereço', 'cardinality', 'one'), | |
('telefone', 'cardinality', 'many') | |
] | |
# Nesse exemplo, os seguintes registros representam o histórico de endereços que joão já teve: | |
# ( | |
# ('joão', 'endereço', 'rua alice, 10', True) | |
# ('joão', 'endereço', 'rua bob, 88', True), | |
#) | |
# E o fato considerado vigente (ou ativo) é o último. | |
# O objetivo desse desafio é escrever uma função que retorne quais são os fatos vigentes sobre essas entidades. | |
# Ou seja, quais são as informações que estão valendo no momento atual. | |
# A função deve receber `facts` (todos fatos conhecidos) e `schema` como argumentos. | |
# Resultado esperado para este exemplo (mas não precisa ser nessa ordem): | |
[ | |
('gabriel', 'endereço', 'av rio branco, 109', True), | |
('joão', 'endereço', 'rua bob, 88', True), | |
('joão', 'telefone', '91234-5555', True), | |
('gabriel', 'telefone', '98888-1111', True), | |
('gabriel', 'telefone', '56789-1010', True) | |
] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
O resultado esperado para o exemplo deveria incluir a tupla
('joão', 'telefone', '234-5678', True)
, já que a cardinalidade do atributo "telefone" é "many".