Você está na página 1de 4

Desafio Murano Investimentos:

As questões podem ser resolvidas da forma que o candidato julgar mais conveniente.
As respostas devem ser enviadas para: felipe.assis@muranoinvest.com. Questões que
envolvam programação deverão ser, preferencialmente, submetidas no Github do
candidato em um repositório público a ser compartilhado no email.Não é necessário
resolver tudo, faça apenas o que conseguir.

Computação e Programação:
1. Dadas duas variáveis A e B, escreva um código, sem utilizar uma terceira
variável, capaz de trocar o valor entre elas. Exemplo: se inicialmente A = 3 e B =
5, ao final do código A deverá ser igual a 5 e B deverá ser igual a 3 (OBS: não é
válida como solução a sintaxe A,B = B,A, nem nenhum tipo de notação
vetorial/matricial).

2. Implemente os algoritmos de ordenação a seguir:


a. Merge sort
b. Quick sort
c. Bubble sort
Qual dos três possui menor complexidade computacional? Utilize um array
contendo N números gerados aleatoriamente e calcule o tempo necessário para
realizar a ordenação. Gere um gráfico e comente os resultados.
* Utilize N = 105, 107 e 109

3. Desenvolva uma função que deverá calcular o quanto um indivíduo precisará


depositar mensalmente de modo que possua uma determinada quantia no
futuro.
A função receberá a idade atual, idade em que o indivíduo irá retirar o dinheiro da
aplicação, a quantia desejada no final e a taxa de juros (que é fixa).
Ex: Uma pessoa possui 18 anos hoje e deseja ter R$ 3.000.000,00 quando tiver 50 anos, quantos
reais ela precisa aplicar por mês? Assuma que o rendimento do investimento é fixo e desconsidere
a inflação.

4. Desenvolva uma aplicação ou conjunto de funções que permita ao usuário final


realizar o cadastro de alunos e obtenção de dados estatísticos sobre os
registros. As informações inseridas deverão ser persistentes (ou seja, deverão
permanecer após o fechamento da aplicação). É possível escrever em um
arquivo .txt, .csv ou .xlsx para armazenar os dados ou até mesmo utilizar de fato

1
um banco de dados.

As estatísticas incluem informações como contagem (ex: quantos alunos são


mulheres), média de CRA dos alunos do curso Engenharia, desvio padrão, etc.
Implemente apenas o que julgar relevante! A forma de inserir os dados pode ser
através de uma interface, linha de comando, API ou até mesmo editando
manualmente um arquivo que será lido pela aplicação.
A entidade aluno possui os seguintes atributos:
DRE Curso Nome Gênero Data de Nascimento Altura Peso CRA Créditos Obtidos Renda

5. Desenvolva um programa multithread que resolva o problema de somar uma


grande quantidade de números. Seu programa receberá como entrada um vetor
contendo N números gerados aleatoriamente e contidos no intervalo [-50, 50] e
deverá retornar a soma de todos os elementos do vetor.
O programa deve ter um parâmetro K que indica o número de threads que irão
trabalhar simultaneamente. Assim, é possível reduzirmos o tempo de execução.
Utilize N = 105, 107 e 109 e K = 1, 2, 4, 8, 16 e depois faça um gráfico mostrando o tempo médio
em função do número de threads para cada valor de N. É recomendável realizar múltiplas
execuções para cada par de (N, K) e depois calcular a média desses valores e evitar outliers.

6. Implemente uma aplicação capaz de representar e manipular grafos


não-direcionados que possuam pesos nas arestas. Os pesos, que serão
representados por valores reais, devem estar associados às arestas. O arquivo
contendo os grafos é “Questão 6 - Grafos.zip”.
O arquivo de entrada será um .txt contendo três colunas:
- Primeira linha indica a quantidade de vértices
- As linhas seguintes representam uma aresta [vértice A, vértice B, peso Aresta]

A) A aplicação deve ser capaz de encontrar a distância entre qualquer par de vértices assim
como um caminho que possui essa distância.
a) Deverá ser utilizado o algoritmo de Dijkstra.
B) A aplicação deve ser capaz de calcular a distância e o caminho mínimo entre um dado
vértice e todos os outros vértices do grafo.
a) Deverá ser utilizado o algoritmo de Dijkstra.
C) A aplicação deve ser capaz de encontrar uma árvore geradora mínima (minimum
spanning tree) de um grafo. Você deve escolher o algoritmo mais adequado para resolver
este problema.

2
D) A aplicação deve calcular a excentricidade de um vértice x qualquer. A excentricidade de
um vértice x é a maior distância entre o vértice e qualquer outro vértice do grafo.

Para cada grafo, execute as seguintes tarefas:


A) Calcule a distância e o caminho mínimo entre o vértice 1 e os vértices 10, 20, 30, 40 e 50.
B) Obtenha uma árvore geradora mínima para cada grafo, informando o peso. Obtenha
também o tempo de execução para resolver este problema.
C) Calcule a excentricidade dos vértices 10, 20, 30, 40 e 50.

*Calcule também o tempo para executar cada uma das tarefas descritas acima

Figura 2: Exemplo de um grafo não-direcionado com pesos nas arestas

7. Utilize o dataset “Huge Stock Market Dataset” (disponível em


https://www.kaggle.com/borismarjanovic/price-volume-data-for-all-us-stocks-etfs) para
resolver os seguintes itens:
A) Desenvolva uma função que calcule a média móvel das ações e ETFs. Utilize
como janela de tempo os valores 10, 20, 50 e 200. Selecione 10 ações para gerar
gráficos das médias móveis e comente o resultado.

B) Calcule a correlação entre os preços de fechamento (Close) entre todas as ações


e destaque os 5 pares que possuem maior e menor correlação. Comente o
resultado.

C) Desenvolva um modelo preditivo para obter o preço de fechamento das ações da


Google (goog.us.txt e googl.us.txt), Apple (aapl.us.txt) e Microsoft (msft.us.txt).
Gere um gráfico e comente os resultados.

3
Referências:

1. https://www.kaggle.com/borismarjanovic/price-volume-data-for-all-us-stocks-etfs
2. https://www.cos.ufrj.br/

Você também pode gostar