Can you get the loop? #Codewars

No final do ano passado meu namorado me mandou esse site super legal para treinar Algoritmos (sempre bom): Code Wars. Porque eu curti? É mais amigável, a comunidade é mais ativa e você cria um clã com seus amigos. Ainda que você seja iniciante, ele te sugere problemas mais difíceis para você ir treinando, além de mostrar as soluções de outros participantes para você analisar e aprender boas práticas depois de submeter sua solução. E já que falamos de clãs, quem quiser entrar no meu, aí vai o link: entre no meu clã! =D

Semestre passado, vimos algumas Estruturas de Dados e dentre elas, listas encadeadas. Daí resolvi resolver um Kata para revisar nas férias e postar aqui para discutir com vocês.

O problema

Pode ser acessado aqui e a seguir a descrição:

You are given a node that is the beginning of a linked list. This list always contains a tail and a loop.
Your objective is to determine the length of the loop.
For example in the following picture the tail’s size is 3 and the loop size is 11.

Portanto, a solução requer descobrir a posição do tail (que será o nó cujo conteúdo se repete) para retornar o tamanho do loop. O que eu fiz foi criar um dicionário e armazenar os conteúdos dos nós até encontrar um que se repete – o tail. A partir daí, rodei outro while para retornar o tamanho do loop. O código em Python pode ser visto a seguir:


def loop_size(node):
    my_dict = {} 
    p = node // node é o head que foi passado como argumento
    my_dict[node] = p //inicializando dicionário com o conteúdo de node
    
    while p.next not in my_dict: 
        p = p.next
     
    my_dict[p] = p
    tail = p // ao sair do loop eu acho o tail, pois é ele que repete
    
    t = tail
    size = 1 
    while t.next != tail: 
        t = t.next
        size +=1
        
    return size

Sei que é possível resolver esse problema sem utilizar dois whiles, mas por enquanto fica essa solução e depois eu posto novamente o código refatorado, pois ainda preciso estudar mais sobre dicionários. Curtiram? =P

“Mais rápido e melhor”: como alcançar seus objetivos

Em Mais rápido e melhor, Charles Duhigg faz um exploração inovadora da ciência da produtividade e por que, no mundo de hoje, como você pensa é muito mais importante do que o que você pensa. Com base nas últimas descobertas da neurociência, psicologia e economia comportamental Duhigg explica que as pessoas, empresas e organizações mais produtivas não apenas agem diferente, elas veem o mundo de modos profundamente diferentes. Elas sabem que produtividade tem a ver com fazer escolhas. A maneira como tomamos decisões; as grandes ambições que colocamos em primeiro lugar e as metas fáceis que ignoramos; a cultura que estabelecemos para estimular a inovação; o modo como interagimos com as informações que temos diante de nós: é isso que separa os simplesmente ocupados dos genuinamente produtivos.

Sempre achei interessante aquelas pesquisas da Psicologia e Neurociência sobre comportamento humano e acredito que esse conhecimento seja algo essencial para saber lidar com as pessoas de forma eficiente e produtiva nos dias de hoje. Você já se perguntou porque algumas conseguem alcançar seus objetivos e outras não? O que pessoas bem-sucedidas têm em comum e o que você pode aprender com elas? Eu sim e sempre quis saber mais sobre a vida delas (aka Beyoncé).

Tudo isso me fez começar a ler esse livro. Nesse post vou falar sobre alguns pontos que achei mais interessantes.

1 – Mapas mentais

Não há como negar: auto-motivação, foco e produtividade estão ligados. Para ter foco é preciso ter automotivação, para se automotivar é preciso ter controle das suas ações, para ter controle das suas ações é necessário ser produtivo. Uma forma de juntar tudo isso é praticar mapas mentais no dia a dia:

Pessoas que sabem administrar a própria atenção e que têm o hábito de construir modelos mentais robustos tendem a ganhar mais dinheiro e tirar notas melhores. Além do mais, experimentos demonstram que qualquer um pode aprender a desenvolver o costume de construir modelos mentais. Quando criamos o hábito de contar para nós mesmos histórias sobre o que acontece à nossa volta, aprendemos a aguçar a nossa atenção. Esses momentos de narração podem ser simples, como, a caminho do trabalho, tentar imaginar uma reunião iminente — fazer esforço para imaginar como ela começará, quais questões você levantará se o chefe pedir algum comentário, que objeções seus colegas talvez façam —, ou podem ser complexos, como uma enfermeira que diz a si mesma que aspecto um bebê deve ter enquanto atravessa uma UTI neonatal. Se você quer aprimorar sua sensibilidade para os detalhes no trabalho, cultive o hábito de imaginar, com o maior grau de especificidade possível, o que espera ver e fazer quando chegar à sua mesa […] Se você precisa melhorar a concentração e aprender a evitar distrações, tire um instante para imaginar, com o máximo possível de detalhes, o que está prestes a fazer. É mais fácil saber o que vem adiante quando temos um roteiro bem formulado dentro da cabeça.

Achei essa parte super interessante, pois é uma prática facilmente aplicável! Vou implementar esse ano e creio que ajudará a diminuir a ansiedade. Esse capítulo ainda fala sobre o mito de sermos multitarefas (nunca fomos xD).

2 – Metas SMART

Como ainda estamos no início do ano (embora algumas pesquisas apontem que quase 80% das pessoas já esquece das metas feitas no fim do ano a partir do dia 15 de Janeiro), você deve lembrar quais metas você prometeu a si mesma(o) que faria esse ano, certo? Acontece que, se você apenas pensou ou só colocou no papel sem detalhar as próximas ações para uma delas, sinto informar que as chances de você alcançá-las são bem mínimas e vai ficar só sendo uma promessa mesmo.

Uma meta para ser alcançada precisa ser uma meta SMART (traduzidas ficam):

Específico
Mensurável
Realista
Atingível
Cronograma

Porquê elas funcionam?

[…] o motivo é que processos de determinação de metas como a metodologia SMART obrigam as pessoas a converter aspirações vagas em planos concretos. O processo de fazer com que um objetivo seja específico e demonstrar que ele é atingível inclui compreender quais são os passos necessários — ou mudar ligeiramente a meta, se os propósitos iniciais se mostram pouco realistas. Formular um cronograma e um modo de estimar o sucesso impõe ao processo uma disciplina que nenhuma boa intenção supera. […] para que essa meta seja mais do que apenas uma aspiração, precisamos de um quadro mental disciplinado que nos mostre como transformar um propósito remoto em uma série de objetivos realistas de curto prazo.

É preciso ter cuidado para não cair na tentação de criar metas pequenas apenas para ter a sensação de estar no controle (sabe aquela sensação boa de riscar uma tarefa da agenda? é disso que to falando)! Você precisa ter ambição, mas aliada a um sistema que te faça detalhar os próximos passos nos próximos dias, na próxima semana, no próximo mês… Tudo isso faz com que suas metas sejam coerentes com seus objetivos de curto, médio e longo prazo. Isso é o que David Allen chama de Horizontes no seu método de produtividade Getting Things Done.

3 – Metodologias Ágeis

A cultura de dedicação da NUMMI simplesmente me deixou sem fôlego. A Toyota transformou uma das piores empresas de automóveis dos EUA em uma empresa bem sucedida, com seus funcionários produtivos e felizes por trabalhar lá. Como conseguiram isso? É resultado do que a cultura de dedicação consiste:

[…] esta é uma das lições mais importantes que lugares como a NUMMI e as filosofias enxutas e ágeis transmitem: os funcionários trabalham melhor e de forma mais inteligente quando acreditam que têm mais autoridade para tomar decisões e quando creem que seus colegas estão dedicados ao sucesso deles. Uma sensação de controle pode impulsionar a motivação, mas, para esse sentimento produzir ideias e inovações, as pessoas precisam saber que suas sugestões não serão ignoradas, que seus erros não serão motivo de retaliação.

Interessante, não?! Já falei um pouco sobre isso neste post aqui. Foi legal de ler sobre esse assunto num livro que não tem aparentemente nada a ver com software (:

4 – Concluindo

Esses foram só alguns casos que quis falar aqui, para deixar vocês com vontade de ler =D
Duhig fala de várias empresas e pesquisas super interessantes e no final do livro, ainda faz um ‘roteiro’ de como aplicar os conhecimentos que ele estudava no nosso dia a dia e como isso o ajudou a terminar o livro. Até a próxima!

Manual de sobrevivência 2016.2

É com muita alegria que vos falo neste post, pois minha meta desse ano em relação à faculdade era passar em todas e consegui!!

ai que alegria e sufoco!

Foi muito puxado, pensei em desistir de uma matéria, maaaaas tem que perseverar e nunca desistir! Essa foi uma lição muito importante que aprendi esse ano e que repasso a quem tiver lendo esse post =D

Bom, aí vão os links que me ajudaram para sobreviver a este semestre, separados por disciplina (olha como sou legal xD):

Algoritmos II

Pois bem, esse semestre a matéria mais legal foi a de Algoritmos, onde estudamos recursão, algoritmos de ordenação, busca binária, análise de algoritmos e algumas estruturas de dados. Links super úteis:

Algorithms, Part I

Curso gratuito online, se joga!

Sorting Algorithms

Playlist muito didática para quem curte aprender por vídeos.

Data Structures

Idem.

Visualising data structures and algorithms through animation

Esse site é muito legal e foi meu amigo Márcio quem me mandou. Bem colorido e didático.

Dica que vale passar sem sufoco: às vezes você acha que entendeu, mas é só praticando que terá certeza e verá os pontos que não compreendeu, portanto, implemente os algoritmos antes das provas!

Cálculo I

Segunda matéria mais legal!! Cálculo é muito legal e vou deixar também alguns links de vídeos e sites que me ajudaram a compreender melhor os conteúdos: limites, derivadas e introdução ao cálculo integral.

LCM Aquino

Segunda vez que esse canal me ajuda, gosto das explicações dele, pois sempre mostra as provas dos teoremas, além de muitos exemplos.

Toda a Matemática

Esse canal também é muito legal e o professor sempre posta vídeos curiosos do mundo da Matemática.

Wolfram

Site para calcular tudo que você imaginar. Tem plano com desconto para estudante, onde você tem acesso à solução e pode verificar suas respostas (:

Organização e Arquitetura de Computadores

Consegui passar de boa, então você também consegue xD Aí vão os links:

Introdução a Arquitetura de Computadores

Livro muito bom e necessário para a matéria. Tem poucos conteúdos online que explicam tão bem quanto este livro e que seguem a mesma ementa do Senac (:

Memória Principal

Vídeo que me salvou na primeira prova =D

Projeto Integrador II – Jogo educacional 2D

Graças a meu professor, pude desenvolver o mesmo jogo do meu projeto de Iniciação Científica em Python. O link tá no meu github e vocês podem conferir o meu =D
Nesse PI não posso ajudar muito aqui, a não ser incentivar a criar um jogo que você goste muito da ideia (:

Álgebra Linear

Playlist salvadora

Khan Academy

É isso, espero que isso seja útil e até mais!