Este post surge inicialmente à partir do Project Euler: Diversão com programação e matemática, calculando números primos. Guardei a notícia no google reader e hoje estive lendo o site do José Lopes de Oliveira Júnior mais especificamente neste link sobre calculo de numeros primos, no exemplo é citado o "Crivo de Eratóstenes".
Fuçando na web achei um código que quero melhorar com a ajuda dos nobres leitores e saber se ele se enquadra na definição do Crivo de Eratóstens. Segue o código:
Obs: Nos comentários do post original -->>; Dica: use o crivo de eratóstenes. Dá pra fazer a solução rodar em menos de 1 segundo.
Veja este post.
Site sobre software livre, cultura, arte, gimp, inkscape, wallpapers, vim, firefox, python, e-books, algoritmos, openoffice, ubuntu, debian, gnome, inkscape, bash, shell script, música, arte, mpb, dicas em geral, Geopolítica, politica, brasil, blogsfera, ativismo, rock, english
Mostrando postagens com marcador algoritmos. Mostrar todas as postagens
Mostrando postagens com marcador algoritmos. Mostrar todas as postagens
3*+1 em python
Há tempos atráz foi publicado no grupo de usuários python do Ceará um desafio que consiste no seguinte:
------------------
PROBLEMINHA
------------------
Considere que, para um determinado número inteiro n existe uma
sequencia de números a partir de n que leva ao número 1. Tal
sequencia será definida da seguinte forma:
* se n for ímpar, multiplique n por 3 e some 1 para obter o próximo número da sequencia
* caso contrário, ou seja, se n for par, divida o por 2 para obter o próximo número
Para determinar se um número é ímpar ou par utilize o operador "%".
Este operador retorna o resto da divisão, logo, se "n % 2 == 1"
significa que o número é ímpar, pois o resto da divisão 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 1
A princípio eu não entendi a solução final postada pelo Nicholas Amorin (vou postar no código abaixo 2 soluções).
Mas finalmente, me debruçando com um pouco mais de atenção sobre a solução do Nicholas percebi a elegância do algoritmo postado por ele
------------------
PROBLEMINHA
------------------
Considere que, para um determinado número inteiro n existe uma
sequencia de números a partir de n que leva ao número 1. Tal
sequencia será definida da seguinte forma:
* se n for ímpar, multiplique n por 3 e some 1 para obter o próximo número da sequencia
* caso contrário, ou seja, se n for par, divida o por 2 para obter o próximo número
Para determinar se um número é ímpar ou par utilize o operador "%".
Este operador retorna o resto da divisão, logo, se "n % 2 == 1"
significa que o número é ímpar, pois o resto da divisão 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 1
A princípio eu não entendi a solução final postada pelo Nicholas Amorin (vou postar no código abaixo 2 soluções).
Mas finalmente, me debruçando com um pouco mais de atenção sobre a solução do Nicholas percebi a elegância do algoritmo postado por ele
- Ele cria uma lista - observe o input dentro de colchetes, isso permite que ele use mais adiante o método apend da classe list.
- Ele cria um função lambda que trabalha com a lógica de semáforo do python, quando ele usa o and aqui: ((x % 2) and x * 3 + 1) or x / 2
ele só executa o x*3+1 se o número for impar, pois o resultado de x%2 para um número par é zero, que para o python é falso, como falso e verdadeiro não é válido para uma cláusula "and" ele passa direto para o x/1 - No final ele usa de forma elegante o slicing (fatiamento) de listas com a opção -1
python - instalando o dreampie rapidinho no ubuntu karmic
O dreampie é um shell com mais firulas para o pythoh, ele tem por exemplo o auto-complemento comun às IDEs super pesadas.
Veja este screenshot:
sudo add-apt-repository ppa:dreampie-devel/ppa
sudo apt-get update
sudo apt-get install dreampie
Veja este screenshot:
Quantos porcos e quantas galinhas?
Um fazendeiro tem um bando de porcos e um bando de galinhas.
Ele sai para o terreiro e observa 20 cabeças e 56 pernas.
Quantos porcos e quantas galinhas que ele tem?
Observando o algoritmo você vai pareceber que ele trabalha por força bruta, tentando cada opção até chegar ao equilíbrio das igualdades.
Não deixe de ler a solução do Mangnun Leno neste link
Obs: este conteúdo chegou aqui graças a esta aula de Ciência da computação do MIT disponível no youtube.
Ele sai para o terreiro e observa 20 cabeças e 56 pernas.
Quantos porcos e quantas galinhas que ele tem?
Observando o algoritmo você vai pareceber que ele trabalha por força bruta, tentando cada opção até chegar ao equilíbrio das igualdades.
Não deixe de ler a solução do Mangnun Leno neste link
Obs: este conteúdo chegou aqui graças a esta aula de Ciência da computação do MIT disponível no youtube.
python - atribuição condicional
x = 3 if (y == 1) else 2
Na linux.conf.au que está rolando na Austrália, Anthony Baxter (python release manager e engenheiro de software do google austrália) confirmou o que muitos já sabiam: o uso em massa de python nas plataformas e aplicativos do google. Estima-se, segundo ele, que cerca de 15% da base de código atual do google é em python. [...]
from: http://cavedon.net/blog/category/python/
Python no ensino de lógica de programação
Este artigo mostra de forma clara porque o python é melhor até mesmo do que o portugol para o ensino de lógica de programação.
http://enlabs.net/blog/2008/08/15/ensino-de-programacao-com-python/
http://enlabs.net/blog/2008/08/15/ensino-de-programacao-com-python/
Algoritmos Genéticos em Python
Algoritmos Genéticos em Python Desenvolvimento de algorítmos de otimização
Nível da Palestra: Intermediário
Nível da Palestra: Intermediário
Assinar:
Postagens (Atom)
linux-cookbook
|
|
| Participe do grupo linux-cookbook |
| Visitar este grupo |