domingo, 31 de agosto de 2014

Proyecto programacion: fin del proyecto y resultados

Queria haberlo hecho con mas calma, pero no habeis querido participar ni comentar, asi que ahi van las soluciones.

Lo primero, he hecho la prueba con los numeros del 1 al 10 intentando alcanzar la suma de 20. Aqui teneis la captura:




En ella podemos ver que hay 31 resultados validos encontrados en 290 intentos. De los 1024 posibles intentos hemos reducido la cuenta a 290. Buen resultado. Ahora veamos cual es el primer resultado. Esto no lo veis en la captura, pero se encontro en el intento numero 10.

Probamos la siguiente. Ordenamos los resultados en orden inverso. El programa nos muestra 31 resultados validos (es logico, buscamos todas las combinaciones) en ¡565 intentos! Aunque no llegue a los 1024 es casi el doble de intentos. Mi afirmacion del post anterior estaba equivocada: parece que el orden si importa. Miramos cuanto tarda en encontrar el primer resultado valido y vemos que aparece en el numero 25. El programa ha tardado mas y ha realizado mas operaciones. En principio, vale la pena ordenarlo.


Por ultimo, tras los cambios correspondientes en el programa, lo lanzamos con los datos originales. El programa tarda unos segundos en funcionar.

Lanzamos la primera prueba, que nos muestra un unico resultado: realiza 67.107.880 intentos y encuentra el resultado correcto en el intento 11.296.414.

La siguiente prueba es con los mismos datos ordenados para ser analizados de mayor a menor: realiza 66.736.656 pruebas y encuentra el resultado a la 2.099.356.

Y por ultimo, con los datos ordenados a la inversa: realiza 67.107.880 pruebas y encuentra el resultado a la 11.296.414. Casualmente, el numero es identico si el orden es "aleatorio" que si esta ordenado en el orden inverso.


De aqui se extrae una moraleja, que ya nos decian nuestras madres: si tuvieras las cosas ordenadas ya verias que rapido encontrabas lo que buscas.

Un saludo y hasta el proximo experimento. ¿Un subtitulo quizas?

sábado, 30 de agosto de 2014

Proyecto programacion: explicacion del algoritmo

Nada, ni una respuesta. Pues toca explicarlo, pero vamos a simplificar un poquito. Vamos a poner que nuestro objetivo es el numero 20 y que tenemos que hallar las combinaciones usando los numeros del 1 al 10.

Pues empezamos. Prefiero empezar de mayor a menor, porque es mas sencillo. El numero de combinaciones original es de 1024, lo que son bastantes.

Empezamos a mirar, cogemos el primer numero, 10. No suma 20, asi que necesitamos mas numeros en el conjunto, entonces sumamos el siguiente numero. Tenemos 10+9, que suma 19 y sigue siendo inferior a 20. Tenemos que seguir probando, por tanto. Sumamos ahora el 8 y nos encontramos que 10+9+8 suman 27. No suma 20 tampoco. Pero si sumasemos mas, todavia nos alejariamos aun mas del numero objetivo, el 20. Podemos por tanto descartar todas las sumas que incluyan 10+9+8, porque siempre superaran 20.

Volvemos atras. El 10+9 era un paso correcto, podemos seguir intentando con el siguiente numero, el 8. No me extendere, sino que lo pondre en la siguiente tabla.

10: NO LLEGA A 20. Continuamos.
10+9 = 19: NO LLEGA A 20. Continuamos.
10+9+8 = 27: SE PASA. No continuamos agregando mas numeros.
10+9+7 = 26: SE PASA. No continuamos.
10+9+6 = 25: SE PASA. No continuamos.
10+9+5 = 24: SE PASA. No continuamos.
10+9+4 = 23: SE PASA. No continuamos.
10+9+3 = 22: SE PASA. No continuamos.
10+9+2 = 21: SE PASA. No continuamos.
10+9+1 = 20: RESULTADO CORRECTO.

Hemos encontrado uno de los resultados correctos, pero queremos encontrar todos los que sumen 20, asi que seguimos avanzando. Intentamos continuar, pero como hemos descartado todas las combinaciones con el 9 al no haber numeros menores que el 1, pasamos al 8.

10+8 = 18: NO LLEGA.
10+8+7 = 25: SE PASA. No continuamos.
10+8+6 = 24: SE PASA. No continuamos.
10+8+5 = 23: SE PASA. No continuamos.
10+8+4 = 22: SE PASA. No continuamos.
10+8+3 = 21: SE PASA. No continuamos.
10+8+2 = 20: RESULTADO CORRECTO.

Despues de este resultado seguimos, y lo hacemos usando el siguiente elemento de la lista.

10+8+1 = 19. NO LLEGA.

Hemos vuelto a llegar a un resultado que no nos permite agregar un numero menor que 1 a la suma. Debemos seguir con la siguiente combinacion:

10+7 = 17. NO LLEGA.
10+7+6 = 23. SE PASA. No continuamos.

Podria seguir, pero es tedioso. Como ya imaginais llegaremos al 10+1, y a ese seguira el 9, y a ese el 9+8, y a ese el 9+8+7, y a ese el 9+8+6...


El algoritmo es bastante simple, por tanto.

Cogemos un conjunto de numeros (empezamos por un conjunto vacio). Se le agrega el numero mas alto disponible. Si la suma es inferior al numero buscado, volvemos a agregar el numero mas alto disponible. Si la suma es mayor, descartamos todas las combinaciones que incluyan esos numeros y sustituimos el ultimo numero agregado por el siguiente numero mayor. Si no nos quedan numeros menores, retiramos el ultimo numero añadido y el anterior lo sustituimos por el siguiente numero menor.

Es un galimatias, ya lo se.

En cuanto a las otras preguntas que hice, el numero de combinaciones es el mismo (lo demostrare con el propio programa) en el orden que sea. Eso si, la velocidad a la hora de encontrar resultados validos si cambiara junto con el orden.

Lo siguiente que toca ya es programacion pura y dura. Pero ire explicandola paso a paso.

Mientras tanto, si quereis seguir este experimento desde casa, podeis ir descargando el JDK (Java Development Kit) y el Eclipse desde estas dos paginas: http://www.oracle.com/technetwork/java/javase/downloads/index.html https://www.eclipse.org/downloads/

Debereis instalar el JDK primero. El Eclipse no requiere instalacion.

viernes, 29 de agosto de 2014

Proyecto programacion: analisis del problema.

Parece que este mes voy a tenerlo muy liado para hacer un post diario, por no decir para desarrollar el proyecto, pero intentare sacar algo de tiempo.

Vamos a analizar el problema a realizar (ahora mismo no puedo realizar una traduccion directa):

Tenemos 26 poblaciones. Cada una tiene un numero de habitantes conocido. Tenemos que juntar varias poblaciones de tal forma que el numero de habitantes sea 100.000.000 exactamente. En esta prueba ademas comprobaremos si existe mas de una combinacion posible.

Hasta aqui vamos bien, podriamos pensar "tenemos un ordenador, el problema se hace probando todas las combinaciones", pero probar 67.108.864 combinaciones es malgastar tiempo y potencia de calculo. ¿Que pasaría si en vez de 26 poblaciones nos hubieran dado 1.000? Vamos a solucionar el problema con cabeza. No es necesario probar todas las combinaciones posibles. Sabemos que si empezamos a sumar y superamos los 100.000.000 no necesitamos seguir sumando y podemos descartar todas las combinaciones que incluyan esos numeros.

Ahi van los enunciados, para que vayais pensando:
1. ¿Como reduciriais el numero de combinaciones posibles?
2. ¿Influiria que los numeros estuvieran ordenados? ¿En que orden es mejor, comenzar por el mayor o por el menor? ¿En el numero de comprobaciones, en la velocidad a la hora de encontrar el primero de los resultados, en las dos o en ninguna?

Me podeis decir en los comentarios lo que pensais, a ver que tal se os da. Dependiendo del tiempo que tenga y de lo que me digais, seguire con los razonamientos o empezare a mostraros como se programaria, o si necesitais mas tiempo os hablare de las herramientas que usare, Java y Eclipse.

Nos vemos, estrujaos un poco el coco. ESPERO COMENTARIOS.

miércoles, 27 de agosto de 2014

Nuevo proyecto: desarrollar y explicar un algoritmo

Vamos a ir planteando un nuevo proyecto. Este va de programacion. Hace unos dias encontraba en una oferta de trabajo de una compañia estadounidense el siguiente problema (como filtro para evitar "reclutadores"):

"The 2010 Census puts populations of 26 largest US metro areas at 18897109, 12828837, 9461105, 6371773, 5965343, 5946800, 5582170, 5564635, 5268860, 4552402, 4335391, 4296250, 4224851, 4192887, 3439809, 3279833, 3095313, 2812896, 2783243, 2710489, 2543482, 2356285, 2226009, 2149127, 2142508, and 2134411.
Can you find a subset of these areas where a total of exactly 100,000,000 people live, assuming the census estimates are exactly right? Provide the answer and code or reasoning used."
En si el programa es sencillo para cualquier programador o matematico, y esto me inspiro para el siguiente proyecto: ser capaz de desarrollar este problema explicandolo debidamente para no-programadores.
Mas datos, en el siguiente post.

jueves, 21 de agosto de 2014

Balance de recuperaciones 21/8/2014

Y por fin terminamos. He descargado las tres de las cuatro series que me quedaban: Bakemonogatari, Recorder to randoseru Do y Fate/Stay night. Me falta la primera temporada de To love ru.

Como extra estoy descargando tambien las dos temporadas siguientes de Recorder to randoseru y To love ru.

Mañana dare por terminada la recuperacion de animes.

Lo siguiente que tengo pendiente es la catalogación de todo lo descargado, pero eso sera otro dia.

Actualizo y me despido.

martes, 19 de agosto de 2014

Balance de recuperaciones 19/8/2014

Soy un descuidado. Anteayer termine de descargar Elfen Lied y se me paso publicarlo, asi que hoy aprovechando que estoy descargando Darker than black actualizo todo.

Un saludo.

domingo, 17 de agosto de 2014

Mantenimiento preventivo

Aunque el uso que le doy al engendro ha descendido bastante, sigo teniendolo en funcionamiento, y lo tengo junto al unico enchufe del que dispongo, al lado de un televisor situado junto a una ventana. Pues resulta que hoy cojo el engendro para conectar el disco duro al ordenador y mirad lo que me encuentro.


En la foto se puede ver la goma elastica de 1.5 cm de ancho (la he estirado para que se vea bien el estado en que esta) que une el hub USB y el disco duro y que los mantiene juntos y los efectos de la luz solar en ella. Estaba tan agrietada en algunos sitios que se podia romper con las manos.

Afortunadamente, tenia otras dos gomas y he podido sustituirla en el momento por una nueva, pero eso llega a saltar, le da en un ojo a alguien y tenemos una desgracia.

Con todo resuelto, me despido. Ya sabeis, si quereis contribuir a los recambios os podeis pasar por la seccion de monetizacion del blog.

viernes, 15 de agosto de 2014

Balance de recuperaciones 15/8/2014

¿Que creiais, que ya no iba a recuperar ninguno mas? Pues resulta que ayer fui a comprobar una cosa en mi disco de copias de seguridad y me fije en que no estaba el anime de Antique. Pues nada, una busqueda y encontre una copia incompleta, pero buscando un poco mas encontre otra fuente que si la tenia completa. Asi que elimino Antique de la lista, y ya de paso pues me he quitado Dance in the vampire bund y Otome youkai Zakuro, aparte de corregir Futakoi alternative que ya habia descargado.

Ya esta actualizado el listado. Un saludo.

lunes, 11 de agosto de 2014

Monetizando

Ahora que he conseguido un poco mas de audiencia me gustaria monetizar el blog. Pero no quiero hacer pagar a la gente, no quiero donaciones directas, ni tampoco forzar a ver publicidad en mi pagina a quien no quiere verla y mucho menos cuando quieren descargar subtitulos.

Por tanto, lo que voy a hacer es incluir un programa de afiliados. Seguro que habeis visto algun anuncio de TV en el que dice "trae a un amigo y te haremos un x% de descuento en tu factura". Basicamente es que si adquiris un producto y lo haceis entrando a traves de mi enlace yo me llevo un porcentaje de lo que le corresponde al vendedor como comision.

¿Significa esto que vais a pagar mas por el producto? NO. Vosotros pagais al vendedor el precio que tiene establecido, y luego reparte sus beneficios entre el y yo. Los beneficios son minimos, de todas formas.

De momento teneis enlaces a Amazon y a Pulsed Media (una empresa de seedboxes), aunque espero poder poner alguna otra empresa en breve. Si estais interesados en contratar algun servicio o adquirir algo online, contactad conmigo para ver si tengo algun tipo de enlace de afiliado. En la epoca de vuelta al cole quizas sea buen momento para usar mis enlaces.

Podeis acceder a la pagina de colaboracion en este enlace o a traves de la barra lateral.

Actualizacion: Tambien teneis promociones de Dropbox y Orange. Ire actualizando con mas servicios, especialmente de almacenamiento de archivos.

Otra actualizacion: Amazon me acaba de dar luz verde. Desde ahora, el link esta operativo.

sábado, 9 de agosto de 2014

Otro engendro

Es de todos sabido que la necesidad agudiza el ingenio, y que ando aburrido, asi que he decidido montar otro engendro. No es quizas el mas elaborado, ni servira para dominar el mundo (hace demasiado calor para eso en estas fechas), pero me apetecia mostrarlo.

Antes que nada, los componentes:

1 cargador portatil de baterias (que consegui con puntos de Travel Club). El mio es rosa, no tenia la opcion de cambiar de color.


1 ventilador USB (que me regalaron hace tiempo) con cable flexible. El mio es igual, pero con el eje que se ve negro en la foto en color blanco.

   
Los combinamos y....


¡TACHAN! Nuevo engendro. Encima en la foto he podido sacar la imagen en que se ve en movimiento, lo unico malo es que no tenia otro sitio mejor para ponerlo que encima de mi teclado.

Si, vale. El otro era mas versatil, pero no da fresquito en verano.