Que #trabalho #divertido. #GO #AED1

DUCKTER - AED22CP - 2016/2

Bruno César Ribas
Notória ajuda de Cristian Pastro e Marcus Antunius
http://brunoribas.com.br/aed1/2016-2/trabalho1/" data-send="false" data-show-faces="true">

Atenção - Este documento ainda se encontra em desenvolvimento. Atualizações serão constantes.

Prólogo

O mundo não é mais como antigamente. As notícias, agora, são lidas pelo computador e ordenadas de acordo com algum algoritmo que identifica o que é de maior interesse para algum grupo de usuários.

Antigamente as notícias eram lidas em jornais impressos que eram gerados no dia anterior. Em resumo, líamos notícias defasadas mas podíamos decidir por nossa conta qual notícia achávamos mais pertinente para o nosso dia.

O mecanismo de utilização de um algoritmo para a escolha de notícias é muito bacana se não pensarmos muito a respeito, afinal você abre o endereço de notícias e consegue ler o que te interesse, ou ao menos o que você acha que te interessa.

O que percebemos ao longo do tempo é que esses algoritmos tendem a criar uma bolha de notícias. Você acaba ficando preso em uma escolha algorítmica que não permite que você saia. Muitos estudos e até livros foram feitos sobre isso, veja aqui , aqui também, e outra vez aqui.

A busca da salvação

Sabendo de todo esse problema, a empresa mais ética do país - Agrupamento Ético de Dados Duck Duck Computação Pervasiva, ou simplesmente AED22CP, convidou você, um nobre programador e pensador algorítmico para desenvolver uma solução de busca e tageamento.

A AED22CP entende muito bem o problema de bolha algorítmica e precisa de sua ajuda para conseguir realizar operações com o grande site de notícias micro-bloging, o duckter.

O duckter possui um volume de milhares de operações por dia. Algumas dessas operações são:

Agora vamos detalhar mais o que são as operações que você deverá fazer.

A entrada de dados

Como dito anteriormente, a AED22CP é muito ética e por isso você não terá acesso ao conteúdo completo do duckter.

O seu programa irá processar as informações ao longo dos dias, e não será encerrado a cada troca de dia, mas receberá a informação de que um dia passou.

Este trabalho foi dividido em duas etapas. A primeira etapa conta como trabalho 1 e segunda etapa como trabalho 2. Um subconjunto de comandos deverá ser implementado como parte do trabalho 1.

A etapa 2 depende dos comandos da etapa 1, ou seja, a etapa 2 é um incremento dos comandos da etapa 1.

A entrada dos dados será feita por meio de comandos. Os comandos são:

Etapa 1

add key CHAVE: conteudo

exemplo:

add key teste: o dia tem um belo azul no horizonte

tag hit #tag chave

exemplo:

tag hit #belo teste

show tagcontent #tagid

list trending top XX

exemplo:

add key b4d2fc29d0c0bcc5b9e3: NEP Stood silence hesitating This of
add key 3ddf96f836812b6c599d: MON To December. with napping, each
add key 61c28c2d271e75094236: BOT Door. no peering, mortal faintly
add key 8e9fc18900fd7a78a2d1: LBA Gently came of door. there
add key d2685fa13696eae7db0f: SAM Silence nothing each entreating whispered
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #3ddf96f836812b6c599d d2685fa13696eae7db0f
tag hit #b4d2fc29d0c0bcc5b9e3 61c28c2d271e75094236
tag hit #bc92e96068fbe66960de b4d2fc29d0c0bcc5b9e3
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #b4d2fc29d0c0bcc5b9e3 61c28c2d271e75094236
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #75d31a34e4a3c8e2170e 8e9fc18900fd7a78a2d1
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #75d31a34e4a3c8e2170e 8e9fc18900fd7a78a2d1
tag hit #cef71e917f46b85dcdc5 d2685fa13696eae7db0f
tag hit #33d31e1535be3a7cf57c b4d2fc29d0c0bcc5b9e3
tag hit #61c28c2d271e75094236 61c28c2d271e75094236
tag hit #bc92e96068fbe66960de b4d2fc29d0c0bcc5b9e3
tag hit #61c28c2d271e75094236 61c28c2d271e75094236
tag hit #61c28c2d271e75094236 61c28c2d271e75094236
tag hit #75d31a34e4a3c8e2170e 8e9fc18900fd7a78a2d1
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #2bd93b04442d10c772e8 3ddf96f836812b6c599d
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #bc92e96068fbe66960de b4d2fc29d0c0bcc5b9e3
tag hit #33d31e1535be3a7cf57c b4d2fc29d0c0bcc5b9e3
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #33d31e1535be3a7cf57c b4d2fc29d0c0bcc5b9e3
tag hit #3ddf96f836812b6c599d d2685fa13696eae7db0f
tag hit #bc92e96068fbe66960de b4d2fc29d0c0bcc5b9e3
tag hit #cef71e917f46b85dcdc5 d2685fa13696eae7db0f
list trending top 30

saída:

Begin 30% top trending
1   #8e9fc18900fd7a78a2d1 with 5 hits
1   #d2685fa13696eae7db0f with 5 hits
2   #bc92e96068fbe66960de with 4 hits
End Trending

list trending bottom XX

exemplo:

add key b4d2fc29d0c0bcc5b9e3: NEP Stood silence hesitating This of
add key 3ddf96f836812b6c599d: MON To December. with napping, each
add key 61c28c2d271e75094236: BOT Door. no peering, mortal faintly
add key 8e9fc18900fd7a78a2d1: LBA Gently came of door. there
add key d2685fa13696eae7db0f: SAM Silence nothing each entreating whispered
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #3ddf96f836812b6c599d d2685fa13696eae7db0f
tag hit #b4d2fc29d0c0bcc5b9e3 61c28c2d271e75094236
tag hit #bc92e96068fbe66960de b4d2fc29d0c0bcc5b9e3
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #b4d2fc29d0c0bcc5b9e3 61c28c2d271e75094236
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #75d31a34e4a3c8e2170e 8e9fc18900fd7a78a2d1
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #75d31a34e4a3c8e2170e 8e9fc18900fd7a78a2d1
tag hit #cef71e917f46b85dcdc5 d2685fa13696eae7db0f
tag hit #33d31e1535be3a7cf57c b4d2fc29d0c0bcc5b9e3
tag hit #61c28c2d271e75094236 61c28c2d271e75094236
tag hit #bc92e96068fbe66960de b4d2fc29d0c0bcc5b9e3
tag hit #61c28c2d271e75094236 61c28c2d271e75094236
tag hit #61c28c2d271e75094236 61c28c2d271e75094236
tag hit #75d31a34e4a3c8e2170e 8e9fc18900fd7a78a2d1
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #2bd93b04442d10c772e8 3ddf96f836812b6c599d
tag hit #8e9fc18900fd7a78a2d1 3ddf96f836812b6c599d
tag hit #bc92e96068fbe66960de b4d2fc29d0c0bcc5b9e3
tag hit #33d31e1535be3a7cf57c b4d2fc29d0c0bcc5b9e3
tag hit #d2685fa13696eae7db0f 61c28c2d271e75094236
tag hit #33d31e1535be3a7cf57c b4d2fc29d0c0bcc5b9e3
tag hit #3ddf96f836812b6c599d d2685fa13696eae7db0f
tag hit #bc92e96068fbe66960de b4d2fc29d0c0bcc5b9e3
tag hit #cef71e917f46b85dcdc5 d2685fa13696eae7db0f
list trending bottom 40

saída:

Begin 40% bottom trending
10  #2bd93b04442d10c772e8 with 1 hits
9   #cef71e917f46b85dcdc5 with 2 hits
9   #b4d2fc29d0c0bcc5b9e3 with 2 hits
9   #3ddf96f836812b6c599d with 2 hits
End Trending

dump tags

dump keys

new day

Etapa 2

rm key CHAVE

exemplo:

rm key teste

rm tag #tag

exemplo:

rm tag #belo

rm brokentagref

new day

rm orphankey

Ranking

O ranking será feito por disputas diárias. Para participar basta enviar o código que o sistema compilará e executará.

Para participar do Ranking o seu código deve funcionar no UBUNTU dos laboratórios. Se o sistema não conseguir compilar seu programa apenas será avisado que não conseguiu e nada mais.

A submissão para o Rank é Obrigatória.

No Rank a ordenação será considerada pelo SCORE, definido como:

((Tempo de Execução em segundos)*100 + (Memória Usada em MegaBytes)*10)/110

Compilando o meu programa

Para a execução dos testes as soluções serão compiladas com as seguintes FLAGS:

-static -O2

Exemplo:

gcc -static -O2 simples.c -o simples

Calculando o Score do meu programa

Para calcular o score do seu programa instale o pacote "time" (nas máquinas do DAInf ele já está instalado), e execute o seu programa da seguinte forma:

/usr/bin/time -f "%M %e" ./meuprograma < arquivo-de-entrada > resposta-do-meuprograma

Exemplo:

$ /usr/bin/time -f "%M %e" ./simples < 05-sample5-hugeforasample.in > 05-sample5-hugeforasample.sol
2520 1.64

O primeiro número que saiu impresso é a quantidade de memória em KBytes e o segundo número é o tempo em segundos. Logo o score para esse exemplo é:

(1.64*100 + (2520/1024)*10)/110 = 1.71

Exemplos de Entrada

Prazos

Critérios da Correção