thegoodfellas/blogset-br huggingface dataset:
{1: 1}def solucionar(a, b): maior = 0 while a <= b: num = calc_seq(a) if num > maior: maior = num a += 1 return maiordef calc_seq(a): if a in resolvidos: return resolvidos[a] if (a % 2) == 0: new_a = a / 2 else: new_a = 3 * a + 1 passos = 1 + calc_seq(new_a) resolvidos[a] = passos return passos if __name__ == '__main__': maior = solucionar(1, 10) print "A maior sequencia gerado por um numero entre 1 e 10 tem tamanho:", maior maior = solucionar(100, 200) print "A maior sequencia gerado por um numero entre 100 e 200 tem tamanho:", maior maior = solucionar(201, 210) print "A maior sequencia gerado por um numero entre 201 e 210 tem tamanho:", maior maior = solucionar(900, 1000) print "A maior sequencia gerado por um numero entre 900 e 1000 tem tamanho:", maior Note que, para calcular a sequencia, utilizo uma funcao recursiva. Esta funcao primeiro verifica se ja sabemos o tamanho da cadeia para o numero que estamos procurando no dicionario "resolvidos". Caso este valor nao esteja presente, calculamos o proximo elemento da sequencia e atribuimos o tamanho da sequencia como sendo o tamanho da sequencia do proximo elemente acrescido de 1, salvando este tamanho no dicionario.Voce pode estar se perguntando qual a razao de utilizarmos este dicionario, mas a razao e de simplesmente evitar calculos repetidos. Inevitavelmente, quando estivermos calculando todas as sequencias de 100 a 200, por exemplo, iremos nos encontrar recalculando a mesma sequencia inumeras vezes. Mas, se ja tivermos calculado uma sequencia anteriormente, podemos simplesmente consultar o tamanho da sequencia gerada no dicionario, o que nos salvara um tempo precioso.Bom, e isto. Como voces podem notar, a solucao e bastante simples e, com a ajuda de um dicionario, uma estrutura de dados valiosa que temos presente na linguagem Python, foi possivel evitar um problema que frequentemente nos deparamos ao utilizar funcoes recursivas, que e a repeticao de calculos.Espero ter sido claro na minha explicacao e, como sempre, se tiverem duvidas fiquem a vontade para enviar comentarios. Ate o proximo post!
fatorial * k k -= 1 return fatorialif __name__ == '__main__': print fatorial_recursivo(5) print fatorial_linear(5) Nao tem muito misterio na solucao acima. Apenas quero destacar um ponto: na versao linear, temos um comando que em Python pode ser reescrito de forma simplificada: "fatorial = fatorial * k". Isto pode ser reescrito como "fatorial *= k". Tal operacao significa que a variavel "fatorial" ira receber o resultado do seu valor atual multiplicado pelo valor da variavel "k". Esta forma do comando tambem e valida para outras operacoes, tais como soma, subtracao e divisao. Agora a solucao do desafio: o problema das Torres de Hanoi. Para resolver este problema utilizamos o principio da inducao, fazendo algumas suposicao que assumiremos como verdade. Como chegamos a resolucao do problema para "n" aneis? Vamos simplificar: Suponha que voce sabe solucionar o problema para "n - 1" aneis. Para solucionar o problema com "n" aneis, solucione o problema com "n - 1" aneis primeiro, mas movendo estes "n - 1" aneis para o pino temporario. Sendo assim, ao final desta etapa voce tera "n - 1" aneis no pino temporario e o maior anel ainda estara no pino inicial. O pino destino estara, entao, vazio, e voce podera mover o maior anel para ele diretamente. Agora, basta solucionar novamente o problema para "n - 1" aneis, movendo os "n - 1" aneis to pino temporario para o pino destino, utilizando o pino inicial como pino temporario. Calma, se voce ainda nao entendeu nao se preocupe, isto e normal. Leva um certo tempo para se acostumar com toda essa maluquice! Mas com a pratica isto se tornara tao natural como se levantar pela manha ao acordar. Vejamos como ficaria o codigo: # coding: utf-8# hanoi.pydef hanoi(n, inicial, destino, temporario): if n == 1: print 'Mova um anel do pino', inicial, 'para o pino', destino else: hanoi(n - 1, inicial, temporario, destino) print 'Mova um anel do pino', inicial, 'para o pino', destino hanoi(n - 1, temporario, destino, inicial)if __name__ == '__main__': # executar o procedimento para 5 aneis, sendo o pino 1 o inicial, o pino 2 o destino # e o pino 3 e o temporario hanoi(5, 1, 2, 3) Executem o codigo acima e verifiquem que o resultado esta correto! Estudem um pouco o seu funcionamento ate que tenham entendido como ele funciona. Caso ainda tenham duvidas, enviem um comentario que irei tentar ajudar a compreender melhor a solucao. Ate a proxima!
else: self.screen.fill(0) for actor in self.list.values(): actor.draw(self.screen) def act_actors(self): pass def manage(self): pass def handle_events(self): player = self.player for event in pygame.event.get(): t = event.type if t in (KEYDOWN, KEYUP): k = event.key if t == QUIT: self.run = False elif t == KEYDOWN and k == K_ESCAPE: self.run = False elif t == KEYUP: pass def loop(self): clock = pygame.time.Clock() while self.run: clock.tick(1000) self.handle_events() self.manage() self.act_actors() self.update_actors() self.draw_actors() pygame.display.flip()if __name__ == '__main__': game = Game( (640, 480) ) game.loop() Como voce pode observar, com poucas linhas de codigo criamos um fundo de tela animado bem legal. No proximo post vou adicionar algumas naves. Ate!
Ola! Esta semana vou tentar explicar um pouco sobre algoritmos. Um algoritmo nada mais e que uma sequencia de passos logicos que, ao serem seguidos, levam a solucao de um determinado problema. Nos posts anteriores nos ja utilizamos alguns algoritmos para resolver os problemas da sequencia de Fibonacci e do fatorial. Estes sao algoritmos simples, faceis de entender e de se desenvolver. No entanto, alguns problemas exigem algoritmos bastante complexos para sua solucao e, em alguns casos, nao sera possivel encontrar um algoritmo para solucionar um problema em tempo habil. Vou explicar esta ultima sentenca mais adiante. Para exemplificar, vou sugerir que o leitor faca um exercicio. Abra o bloco de notas ou o seu editor favorito, ou mesmo apanhe um pedaco de papel e um lapis, e escreva em ordem numerada os passos que voce efetua para ir ao trabalho pela manha ao acordar, ou, se voce e estudante, os passos que voce efetua para chegar a escola ou universidade ou onde quer que voce estude. Isto que voce fez tambem e um algoritmo, que soluciona o problema de ir a um local ao acordar pela manha. Alguns irao escrever uma longa lista, bem detalhada. Outros irao escrever uma lista mais curta e simples. Cada lista e valida. Para esta semana, nao irei escrever nenhum codigo no post, mas irei propor um exercicio, que consiste em desenvolver um algoritmo para solucionar um problema computacional, e entao escrever um modulo Python que implemente tal algoritmo. A seguir descrevo o problema: Considere que, para um determinado numero inteiro n existe uma sequencia de numeros a partir de n que leva ao numero 1. Tal sequencia sera definida da seguinte forma: se n for impar, multiplique n por 3 e some 1 para obter o proximo numero da sequenciacaso contrario, ou seja, se n for par, divida o por 2 para obter o proximo numeroPara determinar se um numero e impar ou par utilize o operador "%". Este operador retorna o resto da divisao, logo, se "n % 2 == 1" significa que o numero e impar, pois o resto da divisao por 2 foi igual a um.Vejamos um exemplo, para n igual a 22 teremos a seguinte sequencia:22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1O tamanho da sequencia, neste caso, e 16. O problema que proponho e, dados dois numeros, a e b, determinar qual o tamanho da maior sequencia gerada por todos os numeros entre estes, incluindo os proprios a e b.Para solucionar estes problema, escreva um modulo "seq_3n1.py" com tera uma funcao "solucionar(a, b)" que retornara o tamanho da maior cadeia geradaPublicarei uma solucao para o exercicio mais tarde esta semana no blog. Hoje vou entrar num assunto que costuma espantar algumas pessoas, mas que pode ser bastante util na criacao de algoritmos para a resolucao de problemas computacionais: as funcoes recursivas. Funcoes recursivas sao funcoes que chamam a si mesma de forma que, para resolver um problema maior, utiliza a recursao para chegar as unidades basicas do problema em questao e entao
calcular o resultado final. Hmm... Ainda parece dificil de entender, certo? Bom, vamos ver como isto se aplica na pratica. Voltamos ao nosso primeiro problema: a sequencia de Fibonacci. Nela nos temos dois casos base: O primeiro elemento da sequencia sempre e 1, assim como o segundo elemento da sequencia tambem e sempre 1. Temos entao o caso base. Para calcular os demais, utilizamos o seguinte parametro: o valor "i" da sequencia sera o valor "i-1" da sequencia somado ao valor "i-2" da sequencia. Ou seja: fibonacci(i) = fibonacci(i - 1) + fibonacci(i - 2). Perceberam como podemos recorrer a propria funcao para calcular o valor de um elemento da sequencia? Vejamos como isto se traduz em codigo Python: # coding: utf-8# fib_recursivo.pydef fibonacci(indice): if indice == 1 or indice == 2: return 1 return fibonacci(indice - 1) + fibonacci(i - 2) A funcao agora ficou bem mais simples de entender que as versoes anteriores com "for" e "while", certo? Pelo menos para mim esta forma e bem mais legivel e podemos perceber diretamente como e o seu funcionamento. No entanto, as funcoes recursivas embutem alguns problemas. Pois e! Nem tudo e maravilhas no mundo de Alice! A esta altura, voce ja sabe de algum problema que acontecera com esta funcao? Bom, o primeiro problema esta na repeticao do calculo do mesmo valor. Vejamos um exemplo: calcular o quinto valor da sequencia. 1 => x = fibonacci(5) / \2 => x = fibonacci(4) + fibonacci(3) / \ / \3 => x = fibonacci(3) + fibonacci(2) + fibonacci(2) + fibonacci(1)...... Perceba que, no passo 2 precisamos calcular o fibonacci(4) e o fibonacci(3). Entao, no passo 3, precisamos calcular novamente o fibonacci(3) para encontrar o valor do fibonacci(4) do passo 2. Mas existem outro problema com as funcoes recursivas. A pilha de chamadas nao pode ser infinita, e alguns compiladores ou interpretadores limita o numero maximo de chamadas a funcoes na pilha. Explico: Quando chamamos fibonacci(5), esta chamada ira chamar primeiramente fibonacci(4), sendo assim, a primeria chamada e colocada numa pilha e o controle passa para a segunda chamada. Entao, fibonacci(4) chama fibonacci(3), sendo colocada tambem na pilha enquanto fibonacci(3) assume o controle. Agora imagine que voce chamou fibonacci(1000). Quando a chamada chegar a fibonacci(2) serao 998 chamadas de funcao na pilha, sem contar que cada chamada ainda ira chamar uma segunda ramificacao. Se voce tentar desenhar uma arvove com as chamadas, vera que a coisa fica bem complexa. Entao meu conselho e o seguinte: use funcoes recursivas com cautela. Elas sao otimas para solucionar varios tipos de problemas, mas se voce notar que a funcao esta duplicando o trabalho ou que a pilha de chamadas sera muito grande de acordo com o grau de recursividade, tente uma nova estrategia, como utilizar um algoritmo linear, sem recursao. Para o exercicio hoje vou fazer um pouco diferente. Vou propor um exercicio simples e um desafio, um pouco mais complexo. O exercicio e escrever um modulo com duas funcoes: a primeira calcula o fatorial de um numero de forma recursiva e a segunda efetua o mesmo
calculo de forma linear, sem recursao. O desafio e escrever um modulo que calcula a solucao do problema da Torre de Hanoi. Tal solucao pode ser encontrada de forma simples mas engenhosa utilizando recursao. Para quem nao conhece, a Torre de Hanoi consiste em ter 3 pinos onde no primeiro pino sao postos "n" aneis de tamanhos decrescente. O problema e mover todos os "n" aneis para um pino destino, utilizando o terceiro pino como auxiliar, movendo sempre apenas um anel por vez e com a restricao de que num pino nao se pode ter um anel menor abaixo de um anel maior. E isto! Ainda nesta semana post a solucao dos exercicios e do desafio. Ate a proxima!
se adicionamos mais inimigos ou nao dependendo do estado do jogo. Por enquanto nao irei mostrar o codigo desta parte tambem. Em "handle_events" nos perguntamos ao pygame quais eventos ocorreram e entao os tratamos. Por enquanto so temos interesse nos eventos do tipo "QUIT" e "KEYDOWN". Caso o evento "QUIT" aconteca ou no caso de "KEYDOWN" com a tecla "ESC" sendo pressionada, nos ajustamos a variavel "run" para "False", o que fara que o loop principal de nosso jogo termine. Chegamos, entao, ao loop principal do jogo. Aqui criamos a variavel "clock". Esta variavel ira controlar a velocidade do jogo, de forma que o jogo nao fique demasiado lento em maquinas menos potentes nem demasiado rapido em maquinas mais potentes. Entao temos nosso loop. Nos primeiros tratamos os possiveis eventos, depois atualizamos o estado do jogo para so entao desenharmos os objetos na tela. A ultima linha deste loop: "pygame.display.flip()" e bem interessante. Lembram do parametro "DOUBLEBUF" que utilizamos anteriormente na inicializacao da tela? Pois aquele parametro informa ao pygame que, quando escrevermos os pixels na tela, na verdade estaremos escrevendo pixels numa especie de buffer, que nao e mostrado imediatamente na tela. Sendo assim, quando chamamos a funcao "pygame.display.flip()" este buffer e inteiramente copiado para a tela e a superficies que estava sendo mostrada se tornara o novo buffer. Esse e o motivo da funcao se chamar "flip", pois ela "troca" as superficie atual com a temporaria. O "double buffering" como chamamos esta tecnica e utilizado para evitar que durante o processo de desenho dos pixels o usuario veja imagens aparecendo uma apos a outra na tela, causando um efeito indeseavel e ate mesmo problemas como o de sprites que sao desenhados sobre outros sprites. Bom, e isso! Em breve trarei mais um post com a classe "Background" que ira mostrar estrelas no plano de fundo, movimentandos no estilo dos famosos "vertical scrollers".
ama, luta, tudo ao mesmo tempo agora...grande referencia e companheira de muita estrada neste ultimos 15 anos da minha vida.'un regalo' della vita!!! (a musica e o video, assim como a amiga). Calle 13 - Latinoamerica [Video Oficial]Quase morri de emocao, uma nostalgia de futuro, de projeto de conhecer, viver, trabalhar, lutar, sonhar nestas paisagens, pertencendo a este territorio, e um sentimento meio caotico, confuso, mas tao intenso e potente, que me falta racionalidade e objetividade para expressar-me...e muita emocao, mas me falta razao para expressao, ainda.Mas esta aqui, esta em mim, sinto o movimento interno e externo, com os encontros, como com esta musica, estas imagens, este coracao a bater e explodir.Ha uns dois meses atras, amigas compartilharam o filme sobre Violeta Parra, fiquei a morrer, sentindo o chamado de um mundo que faz meu coracao vibrar e minha alma cantar...e um sentimento muito especial, que me esta nascendo nesta condicao estrangeira, de passagem, em viagem.Inclui na minha tese (em construcao) esta passagem da Clarice Lispector... "Um amigo meu, medico, assegurou-me que desde o berco a crianca sente o ambiente, a crianca quer: nela o ser humano no berco mesmo ja comecou. Tenho certeza de que no berco a minha primeira vontade foi a de pertencer. Por motivos que aqui nao importam, eu de algum modo devia estar sentindo que nao pertencia a nada e a ninguem."(Fragmento da cronica Pertencer, publicada em 15.06.68. In A descoberta do mundo, pp. 110-111).Acho que quero peterncer a algo e descobrir meu mundo.E tudo isto descobri aqui...aqui na Italia, neste velho mundo, que contraditoriamente tem-se a sensacao de que nada se descobre, se inventa, se constroi, esta tudo ai, aqui, voce escava, pois sao camadas e camadas de ruinas, tradicoes, historias...o passado pesa e conserva-se muito mais do que se renova em novas imagens, o presente vive entre o glamour de conquistas memoraveis e a decadencia do tempo em movimento, e desintonizado...e o futuro e nebuloso, como se o exercicio de projeta-lo e imagina-lo sempre deve acompanhar-se de uma boa dose de nevoa, e estranho e sinto uma tristeza, pois aqui voce escava e adapta-se, ou no maximo forja algum lugar para pertencer e viver.Eu estrangeira de mim mesma, de passagem, sem pertencer a nada e a ninguem, aqui me descubri assim e a vontade de descobrir um mundo para pertencer nasceu em mim, ou despertou e esta a explodir...Mas meu tempo acabou...e ate aqui tudo bem, rs...Baci a tutti (nessuno!!! rsrsrrsrs...)Adri.
simplicidade sublime...me inspira, tambem a buscar amar e escrever, compartilhar, expressar-se...segue acima imagens do Joao, meu amor e abaixo a cronica da minha amada Clarice."Ha tres coisas para as quais eu nasci e para as quais eu dou a minha vida. Nasci para amar os outros, nasci para escrever, e nasci para criar meus filhos. "O amar os outros" e tao vasto que inclui ate o perdao para mim mesma com o que sobra. As tres coisas sao tao importantes que minha vida e curta para tanto. Tenho que me apressar, o tempo urge. Nao posso perder um minuto do tempo que faz minha vida . Amar os outros e a unica salvacao individual que conheco: ninguem estara perdido se der amor e as vezes receber amor em troca. E nasci para escrever. A palavra e meu dominio sobre o mundo. Eu tive desde a infancia varias vocacoes que me chamavam ardentemente. Uma das vocacoes era escrever. E nao sei por que, foi esta que eu segui. Talvez porque para outras vocacoes eu precisaria de um longo aprendizado, enquanto que para escrever o aprendizado e a propria vida se vivendo em nos e ao redor de nos. E que nao sei estudar. E, para escrever, o unico estudo e mesmo escrever. Adestrei-me desde os sete anos de idade para que um dia eu tivesse a lingua em meu poder. E no entanto cada vez que eu vou escrever, e como se fosse a primeira vez. Cada livro meu e uma estreia penosa e feliz. Essa capacidade de me renovar toda a medida que o tempo passa e o que eu chamo de viver e escrever. Quanto aos meus filhos, o nascimento deles nao foi casual. Eu quis ser mae. Meus dois filhos foram gerados voluntariamente. Os dois meninos estao aqui, ao meu lado. Eu me orgulho deles, eu me renovo neles, eu acompanho seus sofrimentos e angustias, eu lhes dou o que e possivel dar. Se eu nao fosse mae, seria sozinha no mundo. Mas tenho uma descendencia, e para eles no futuro eu preparo meu nome dia a dia. Sei que um dia abrirao as asas para o voo necessario, e eu ficarei sozinha: E fatal, porque a gente nao cria os filhos para a gente, nos os criamos para eles mesmos. Quando eu ficar sozinha, estarei seguindo o destino de todas as mulheres. Sempre me restara amar. Escrever e alguma coisa extremamente forte mas que pode me trair e me abandonar: posso um dia sentir que ja escrevi o que e meu lote neste mundo e que eu devo aprender tambem a parar. Em escrever eu nao tenho nenhuma garantia. Ao passo que amar eu posso ate a hora de morrer. Amar nao acaba. E como se o mundo estivesse a minha espera. E eu vou ao encontro"" do que me espera."Clarice Lispector
Muito bom!!!!Respiro... Os momentos de encontro sao vividos no pico da intensidade e do desejo. Parece que todos os anjos e demonios pairam no teto da casa e a todo momento fazem visitas espontaneas a cama, determinando momentos de calmaria e agressividade. Hora ou outra o desejo ultrapassa a barreira do interno e e saciado quando os dentes sentem o gosto da carne ou quando os olhos e ouvidos veem e ouvem os gritos desconcertantes de dor que afugentam os sutis anjos e fazer sorrir os demonios que ali estao. A briga entre os corpos acontece a todo momento, nela ha uma mistura de suor, desejo, forca e agressividade. Com outros corpos esse desejo hora ou outra era inibido, julgado com prejudicial a parte desfavorecida, tido como louco... Mas com ela e diferente, com ela a loucura e completada, nao ha gritos de dor, nao ha repulsa, com ela o animal e instigado, ela clama pela dor e expele desejo o que em outros corpos o resultado e a dor e a repulsa. Nada cativa mais a voracidade do animal que o seu desejo realizado. E no final de toda essa briga de desejo, loucura e saciedade ficam as marcas de um bicho voraz que encontrou a presa certa disposta a reder-se aos seus devaneios, a harmonia entre anjos e demonios e a vontade marcada do querer mais ... Eu odeio voce pelos ataques repentinosde loucura que voce tem Pelas situacoes reais da vida que vocetransforma em brincadeira o tempo todoPelos sorrisos em horas inconvenientesPor nao dar-me as resposta que euqueria ouvir, mesmo quando voce as temPor me dizer a verdade mesmo quando eunao estava preparado para ouvi-las Odeio-lhe por nao ter feito as minhasescolhas ou marcado os caminhos para que eu pudesse lhe seguirOdeio por nunca ter visto uma lagrimacair dos teus olhos no momento em que isso seria normal a todosTalvez eu quisesse ser voce o tempotodo, em alguns momentos tive medo de fazer minhas escolhas em outros reprimi omeu sorriso e nem sei o motivo, por tantos momentos fui sano demais e acabeiouvindo tantas mentiras que os loucos costumavam questionar antes de acreditare chorei tantas vezes mesmo quando precisava demonstrar forcaTalvez eu nao deva lhe odiar, mas quemsabe lhe agradecer... Entaoela saiu, deixou pra tras todas as incertezas e antigos amores que o passadofazia questao de guardar e o presente tentava de todas as formas esquecer,alguns desses tentavam ate perturbar o futuro, porem sem sucesso...Paraela o amor tinha sido uma experiencia prazerosa e passageira, de alguns dias ede varias noites, nada que aconteceu foi por acaso, sempre tinha um olhar, umcheiro, um toque diferente e com isso ela percebeu que nao estava perdida nomundo e suas escolhas nao eram a sorte, por algumas vezes ela misturava decenciacom alcool ou paixao com lagrimas, mas nunca misturou correntes com o amor...As amarrasque a prendiam tinham outras formas, o desejo, o proibido, o perigoso isso aprendia mais do que qualquer corda ou corrente amarrada nos pes, na verdade elapercebeu que nao tinha pes e que por toda vida flutuo, por isso era
taodiferente, por isso nao se apaixonava, por isso nao conseguia terminar o seusuco ... nao tinha outra parte da sua laranja e pra ser sincera nem ela sabiase era laranja ou nao, mas tambem do que importava, os sabores das coisas foramcriados com as experiencias que ela teve e nao com o que ela ouvia das pessoas.Com umsorriso no rosto ela nunca foi de ser uma so, sempre teve planos, loucuras eescolhas que por ventura poderiam ser mal feitas, mas que na verdade sempre a levavam para algum lugar, nem que fosse a uma cama de um motel barato, pra ela naoimportava o luxo das paredes e sim o prazer, o suor e o gozo que os dois corpospoderiam proporcionar-se...