Random IRC quote :      <ash> no sera el aceite lo que se te escapa?

Siguen los retos

Para no perder el ritmo seguimos proponiendo nuevos retos en 48bits, y esta vez no se trata de ingeniería inversa, se trata de un reto de programación, porque un buen reverser tiene que ser además un buen programador. Para este reto haremos lo mismo que antes, las soluciones me las envían por correo a plusvic[at]yahoo[dot]com, y dentro de una semana más o menos publicaremos las soluciones recibidas y eligiremos la mejor. Se admite cualquier lenguaje de programación razonablemente usado en el siglo XXI, ya sabéis: C y familia, incluyendo al primo sharp, Java, Python, Perl — que sé que hay algún fan de Perl por ahí 😉 — , Pascal, Ruby, ensamblador si hay algún valiente –pero nada de MASM que Mario se pone de mala leche–, y que hostias…. el que les de la gana, a ver si hay huevos y alguien manda el programa para la máquina de Turing. Pero al grano, el problema es este:

Dada una lista de N números enteros (positivos y negativos), encontrar el mayor valor que es posible obtener sumando cualquier grupo de números consecutivos dentro de la lista. Por ejemplo, si la lista fuera: 1,-2,5,3,-4,5,0,2,-2,3,-7,5,1. La mayor suma que se puede obtener es 12, resultado de sumar los valores 5,3,-4,5,0,2,-2,3. No hay otra suma de números consecutivos dentro de la lista que sea mayor que 12. El programa naturalmente recibirá como entrada una lista con una cantidad arbitraria de números (en un fichero, por teclado, o como se prefiera) y retornará el valor de la suma máxima, y si es posible, también la secuencia de números que forman parte de la suma. Se valorará la eficiencia en cuanto a tiempo de ejecución para valores grandes de N.

9 Comentarios para “Siguen los retos”

  1. Comment por madalenasbuenas | 08/02/07 at 10:25 pm

    Los números de la sucesión tiene algún rango predefinido? o puede ser cualquier int?

  2. Comment por Victor Manuel Alvarez | 08/03/07 at 8:05 am

    Sí, cualquier int es permitido, no hay ningún rango predefinido, excepto el propio rango del int naturalmente.

  3. Comment por svch0st | 08/03/07 at 8:19 am

    Se incluye el caso de que un solo número de la lista sea, él mismo, la suma mas alta o es preciso al menos sumar dos números???

  4. Comment por Amian | 08/03/07 at 9:04 am

    Hey man, Lupita contome que haciendo una chingada matematica se puede sacar, me va a costar el orto implemental eso en C

  5. Comment por Miguel | 08/03/07 at 10:09 am

    Buenos dias!!!

    Joder, Victor, vas a acabar con nosotros, jajajajaja…. Bueno, como al final creo que este fin de semana no me ire de viaje, si consigo un poco de tiempo libre, intentare hecharle un vistazo a este reto.

    Venga, un saludo a tod@s ;o)

  6. Comment por Victor Manuel Alvarez | 08/03/07 at 10:49 am

    Pues sí, la lista puede tener un solo número y en ese caso sería él mismo la suma más alta, también podrían ser todos positivos o todos negativos y en ese caso la suma sería la de todos los números de la lista. Pero estos casos extremos no son los interesantes, lo bueno aparece al mezclar números positivos y negativos arbitrariamente.

    Ánimo, que no es tan difícil 🙂

  7. Rod
    Comment por Rod | 08/07/07 at 4:57 pm

    Hola Victor, a lo que comentas ‘también podrían ser todos positivos o todos negativos y en ese caso la suma sería la de todos los números de la lista’, y si no me equivoco, en el caso de que todos negativos, la mayor suma seria cero. Es decir, ningun numero se sumaria, no?

    Un saludo.

    Rod

  8. Comment por erg0t | 08/07/07 at 7:02 pm

    mmm, yo en mi implementacion, cuando son todos negativos tome como valor el numero con menor valor absoluto de la lista :S

  9. Comment por Victor Manuel Alvarez | 08/08/07 at 7:41 am

    Hola Rod, es un error mío. Si todos los números fueran negativos el resultado debería ser el mayor de ellos, o sea, el de menor valor absoluto como dice erg0t. Si todos fueran positivos entonces sí sería la suma de todos.

Se han cerrado los comentarios