Programación y Matemáticas

Que tal comunidad, quiero compartirles una página muy interesante sobre ejercicios de programación. Esta página ya es tercer recomendación, en mi antigüo trabajo el Arquitecto de Software (uno de los mejores desarrolladores que conozco, y por mejor me refiero a más completo) resolvía problemas en esta página, paso a recomendarlo a un integrante de javaMéxico @Jvan y por asares del destino el me la recomendó a mi desde hace ya bastante tiempo, pero había quedado en el olvido. Ahora recordé esa página y vengo a compartirselas.
La finalidad de la página es resolver problemas de Prgramación/Matemática e ir avanzando en niveles, y en realidad sólo se evalúa el resultado del problema no el tiempo en que lo resuelves ni qué tan optimizado lo hiciste, simplemente evalúa que hayas podido resolverlo en el lenguaje o herramienta que prefieras. Puedes postear tu código una vez resuelto cualquier problema y ver el código que los demás usaron en los distintos lenguajes en los que los resolvieron. Lo interesante es la estadística por país que obtienen y sobre los lenguajes, el más usado es JAVA y creo yo por mucho y el país con más suscritos es USA le siguen Alemania, Inglaterra, India etc... varios. Dentro de los niveles más altos solo se encuentra 1 mexicano. Ahí ustedes revisen las estadísticas y sobre todo resuelvan problemas para ir incrementando su nivel. Como todo los primeros problemas son muy sencillos y van incrementando en dificultad.
Por lo pronto yo ya resolví mi primer problema y soy nivel 1 jiji xD es muy sencillo el ejercicio pero vale la pena seguir.
Suerte!
Project Euler

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Había oído del Project Euler

Había oído del Project Euler muchas veces pero hasta el día de hoy no le había dado siquiera click en el link. Será que nunca me pareció atractivo.

:)

+1 :)

Imagen de CesarAlducin

Muy interesante pagina ya vi

Muy interesante pagina ya vi algunos ejercicios y son interesantes, todo va a depender del nivel que tengamos
en programación y matemáticas, pero en definitiva es un buen complemento.

@Cesar Para mí sobre todo en

@Cesar Para mí sobre todo en matemáticas.

Por lo pronto ya hice le primer ejercicio :)

Eee!! ya hice el segundo,

Eee!! ya hice el segundo, pero la verdad es que veo que esta cosa se va a poner difícil muy rápido.

Un pequeño interludio sobre la función fibonacci, la programación funcional y Java.

La programación funcional fue diseñada para ser una especie de matemáticas programables. De ahí viene eso del "pattern matching" que resulta tan atractivo.

Por ejemplo en matemáticas la función fibonacci ( f ) se define más o menos así

Que se lee:
"fib de 0 es 0,
fib de 1 es 1,
fib de n es fib n - 1 más fib n - 2"

En Haskell ( un lenguaje de programación funcional puro ) puede escribirse así:

fib :: Integer -> Integer
fib 0 = 0
fib 1 = 1
fib n = fib (n-1) + fib (n-2)

Que se ve extraordinariamente similar a la versión matemática. Ahí el código que dice: fib 0 = 0 etc, es el pattern matching en acción.

O en Scala ( un lenguaje de programación funcional híbrido ) se podría escribir así:

 def fib( n: Int): Int = n match {
    case 0 => 0
    case 1 => 1
    case _ => fib( n -1) + fib( n-2)
  }

Que sigue pareciedose mucho a la versión matemática gracias al pattern matching.

En Java, que es un lenguaje de programación orientada a objetos influenciado por la programación procedural ( C ) se escribe típicamente así:

 
int fib( int n ) {
    if ( n == 0 ) return 0;
    if ( n == 1 ) return 1;
   return fib( n - 1 ) + fib ( n - 2 );
}

Que, ya no se parece tanto. Los if's, el return, etc. lo hacen ver más procedural.

Pues bueeeeno el dato curioso que encontré haciendo este ejercicio es que se puede escribir una versión que luzca como la matemática incluso con Java mismo, claro no es pattern matching ni nada, pero se ve curioso.

    int fib( int n ) {return  
         n == 0 ? 0
       : n == 1 ? 1
       : fib( n - 1 ) + fib( n - 2 )
   ;}
Imagen de ezamudio

Bien!

Qué chido, yo nunca había visto esta página y creo que sirve muy bien para practicar en lenguajes nuevos y ejercitar la solución de problemas matemáticos (todos los problemas de programación al final son problemas matemáticos, pero no siempre se presentan directamente como tales).

Imagen de Marce

Noté un cosa y es que en

Noté un cosa y es que en realidad soy nivel "0" (cero) :p tengo que resolver mínimo 25 problemas antes de avanzar al nivel 1 :p jaja me emocioné al pensar que ya estaba en nivel 1, pero eso no importa, ya me motive a alcanzar pronto mi nivel 1 :p yeah yeah!! Suerte a todOs y disfrutar de los ratos libres poniendo a trabajar al cerebro :)

Imagen de ezamudio

Fibo en Scala

Oscar, de hecho con dos casos la haces, porque puedes usar OR en pattern matching:

def fibo(x:Int):Int = x match {
  case 0|1 => x
  case _ => fibo(x-1) + fibo(x-2)
}

Y qué username tienen en project Euler? Yo ahí sí pude usar chochos.

Imagen de Jvan

Retomé mi cuenta en

Retomé mi cuenta en projectEuler, mi username es: "Jvanito", acabo de resolver el problema 13 en Groovy ;)

Imagen de benek

Project Euler

Se ve bastante bien, ya tengo mi cuenta, sí alcancé el 'benek'.

Imagen de Marce

username

Pues yo soy el usuario: marce y apenas llevo los 2 primeros =D

Imagen de ezamudio

en orden

Yo empecé en orden pero ya me los empecé a saltar. Una manera de saber qué tan difícil está un problema es ver cuánta gente lo ha resuelto. Por ejemplo el problema 44 es el que menos gente ha resuelto (cuando lo consulté, sólo 14169 lo habían resuelto). El primer problema lo han resuelto 167mil personas. Se puede usar como indicador para ver cuáles son los más fáciles de resolver.

Yo por necio ya me di cuenta de por qué el problema 44 tiene tan pocas soluciones, no está nada fácil, y por fuerza bruta parece que va a tomar bastante tiempo. Algunos problemas que parecen tardarse mucho, se pueden optimizar los algoritmos para que se resuelvan muy rápido, pero la optimización no es en código sino en el mismo algoritmo; yo pude optimizar algunos haciendo algo de investigación para reducir ciertos rangos y cosas así.

Voy a ponerme a hacer de 2 en

Voy a ponerme a hacer de 2 en 2 en el trabajo. Hoy empecé.

Yo me voy a aventar a hacerlos con Python ;), bueno ya me aventé.

Por cierto, en Euler yo soy orenteriab ;)

Inglés precario

Que tal, mi ingles no es muy bueno, no logro entender que es lo que se requiere en el problema numero dos (apenas voy en ese :P), si alguien me pudiera decir cual es la finalidad del problema se lo agradecere.

Descripción del problema:

Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

Imagen de ezamudio

Fibo

Debes encontrar la suma de todos los números de Fibonacci que sean pares y menores a 4 millones.

Imagen de Jvan

Estoy en el ejercicio 25 y me

Estoy en el ejercicio 25 y me he dado cuenta que es necesario un algoritmo más optimo que el que puso @OscarRyz para obtener los números Fibo. Encontré un algoritmo supuestamente más eficiente, lo probaré y les comento.

Gracias

Vientos, gracias @ezamudio, la parte de los numeros fibonacci pares no lo pudé entender y no lo estaba tomando en cuenta.

Imagen de ezamudio

iterativo

Para el 25 es mejor que calcules fibo de manera iterativa, te están dando hasta el número de iteraciones...

Imagen de ezamudio

Euler

Bueno pues nomás regresé a este post para presumirles que ya soy el mexicano que más problemas ha resuelto usando Scala...

http://projecteuler.net/index.php?section=scores&country=Mexico

Imagen de meztor

Euler en español