Autor Tema: Mini-Concurso de programacion 2. Las 8 reinas.  (Leído 20119 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado jgpeiro06

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 276
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #30 en: 14 de Mayo de 2009, 11:29:24 »
Citar
Yo tengo algo pensado para descartar todas las posibilidades donde las reinas se atacan por filas o columnas
Pues creo que seria interesante que participases. De momento los dos algoritmos que hay publicados solo "eliminan" la posibilidad de que dos reinas estén en la misma fila, o columna, según se mire. Pero si tu algoritmo evita ambos casos a la vez sera mucho más rápido...

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #31 en: 15 de Mayo de 2009, 17:10:14 »
Hola Jgpeiro

Quise probar tu código en mplab con ccs pero no lo pude compilar. CCS me envía un error de que falta agregar #device al código. Elegí un PIC24 y puse el reloj a 120MHz pero aún así no me dejó compilar, ¿qué me está faltando?

Yo estoy probando mi programa pero el pic16f877a corriendo a 120MHz (overclocked) está en plena desventaja frente a tu PIC24  :D

Quiero compilarlo para PIC24 pero no tengo idea de cómo lo lograste.  :( Nunca he usado PIC24.

Edito: Te adelanto que mi PIC16 logra barrer las casi 17 millones de combinaciones en 18 minutos aproximadamente corriendo a 120MHz. No ha terminado la simulación porque mi pc es lenta, pero es un estimado a partir de una pausa que hice en la simulación...

« Última modificación: 15 de Mayo de 2009, 17:22:54 por migsantiago »

Desconectado gera

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2188
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #32 en: 15 de Mayo de 2009, 19:05:21 »
Citar
Yo tengo algo pensado para descartar todas las posibilidades donde las reinas se atacan por filas o columnas
Pues creo que seria interesante que participases. De momento los dos algoritmos que hay publicados solo "eliminan" la posibilidad de que dos reinas estén en la misma fila, o columna, según se mire. Pero si tu algoritmo evita ambos casos a la vez sera mucho más rápido...


Me encantaria participar, pero estoy muy corto de tiempos. Estoy preparando 2 materias de la facu bastante pesaditas y no tengo tiempo para sentarme a codear. Me hago ratos para pasar por el foro y tirar una q otra idea, pero de verdad se me complica.
Y hablando de tirar ideas, les comento rapidito un par de ideas que se me ocurrieron a ver si las pueden aplicar en sus algoritmos. La primera es la que ya mencione:
Cada reina tiene asignada una columna y una fila (de primera podrian estar posicionadas ocupando la diagonal principal). Y para encontrar una nueva posicion donde no se ataquen por filas o columnas, basta con permutar dos filas (o columnas). Entonces de cada permutacion obtendriamos un nuevo tablero donde las reinas no se atacan por filas ni por columnas.
Ademas para descartar una q otra posibilidad, podriamos chequear que en los casilleros adyacentes donde haya una reina, no haya otra. Ningun ser humano colocaria dos reinas pegadas mientras resuelve el problema.. por q nuestro algoritmo tendria q hacerlo? :wink:

Saludos!!!

"conozco dos cosas infinitas: el universo y la estupidez humana. Y no estoy muy seguro del primero." A.Einstein

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #33 en: 18 de Mayo de 2009, 16:39:40 »
Hola a todos,
espero no llegar tarde, he conseguido sacar un ratillo libre para realizar la implementación del algoritmo, lo adjunto para quien quiera echarle un vistazo.
Para buscar las soluciones he usado la tecnica de programación de backtraking, el algoritmo está realizado en C para CCS en un PIC18F, en concreto lo he hecho para el 18F4520@20Mhz. He realizado la simulación con proteus y las 92 soluciones las encuentra en aproximadamente 24 segundos imprimiendo el tablero con la solución por la usart, sin imprimir nada tarda aproximadamente 8 segundos.

Un saludo.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #34 en: 18 de Mayo de 2009, 17:27:05 »
Wow, creo que ya hay un ganador.

Oye Omix, ¿dónde puedo investigar sobre el algoritmo backtracking y árboles? Tu tiempo de búsqueda es excelente.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #35 en: 18 de Mayo de 2009, 17:39:05 »
¡Mierda!, ya ha salido y no me ha dado tiempo  :D

Estaba convencido que una solución con recursividad era la solución más rápida y de hecho la tengo medio implementada. Pero no me ha dado tiempo a terminarla.

Felicidades por la implementación Omix. De todas formas no voy a mirar cómo lo has hecho por si me da tiempo a publicar la mía mañana.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #36 en: 18 de Mayo de 2009, 17:43:38 »
¿Recursividad en CCS? ¿Se puede?  :shock:

Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #37 en: 18 de Mayo de 2009, 17:46:09 »
Hola migsantiago,
en la wikipedia puedes encontrar algo más de información sobre como funciona los algoritmos de backtracking (vuelta atras), te dejo el enlace:
http://es.wikipedia.org/wiki/Backtracking

Tambien puedes encontrar información, en la web del profesor que me dio clases de algoritmos y estructuras de datos en su dia.

http://dis.um.es/~nmarin/index07-08.html

Busca el apartado de teoria de algoritmos y estructuras de datos, ahi podras encontrar información sobre las diferentes tecnicas de programación, entre otras la de backtracking.

Un saludo.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #38 en: 18 de Mayo de 2009, 18:27:03 »
Enterado Omix, gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #39 en: 19 de Mayo de 2009, 02:32:35 »
No soy capaz de simular mi programa en MPLAB para ver cuánto tarda con el Stopwatch. Lo compila bien, pero cuando le doy al Play del debugger me sale esto:
CORE-E0003: Trap due to unimplemented RAM memory access, occurred from instruction at 0x00020a
CORE-E0003: Trap due to unimplemented RAM memory access, occurred from instruction at 0x0002de

El debugger se queda clavado con ese error en la primera línea del programa:
#device PIC24FJ256GA110

¿Sabéis cómo se resuelve?

EDITADO
Ya lo he resuelto. Por alguna razón no es capaz de simular programas con el 24F; lo he cambiado por un 18F y ya veo los printf en la ventana del debugger.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #40 en: 19 de Mayo de 2009, 08:03:10 »
¡Buahhhhhhhhhhhhhhhh  :( :( :( :( !

Mi gozo en un pozo.

Acabo de terminar el algoritmo en DEV-C para PC y funciona que te cagas.
Cuando me he ido a CCS  a compilarlo me dice: "Error 69: Recursion not permited"

¡Me cago en su puta madre, después de tanto curro  :5] :5] :5] !. Y mira que ya andaba con la mosca tras la oreja después del mensaje de Migsantiago.

En fin, aquí no tengo C30 para probarlo, así que esta noche lo probaré en casa a ver si consigo que funcione en C30 al menos.

Os dejo aquí el programa por si alguien quiere probarlo y puede medir el tiempo que tarda.

Dejo también el programa REINAS.EXE que funciona en un PC con Windows y obtiene todas las soluciones a velocidad de vértigo.

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #41 en: 19 de Mayo de 2009, 14:53:38 »
:D :D

Lástima Mano..El CCS es un compilador que no permite recursividad. El C18 y C30 sí lo hacen. Vas a tener que migrar código o encontrar la forma de hacerlo sin recursividad...:)

Me gustó el algoritmo. Está sencillo.

Saludos.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #42 en: 19 de Mayo de 2009, 15:25:38 »
Ahora ya soy feliz  :-/ :-/ :-/

El C30 es completamente compatible con el programa que había escrito en DEV-C para Windows y ha compilado a la primera.

Y mi felicidad ha crecido exponencialmente cuando he podido comprobar el tiempo que tarda mi rutina: ¡¡¡ sólo tarda 152ms en encontrar las 92 soluciones!!!, para ello necesita ejecutar un total de 9.134.399 ciclos de instrucción.

Aquí una captura de un PIC24 corriendo a 120MHz.


Os adjunto el proyecto en MPLAB y el fuente con un while(1) al final para poder probarlo tal y como yo lo he probado.

 :-/ :-/ :-/ :-/



Desconectado omix

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 244
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #43 en: 19 de Mayo de 2009, 15:35:24 »
Enhorabuena nocturno!!

tendre que probar mi algoritmo en C30 con un PIC24 a ver cuanto tarda en ejecutarse, que como es logico deberia de ejecutarse mucho más rapido a ser un micro de 16bits y tener que ejecutar menos instrucciones.

Un saludo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Mini-Concurso de programacion 2. Las 8 reinas.
« Respuesta #44 en: 19 de Mayo de 2009, 15:41:46 »
Pues sí, pruébalo, que me come la curiosidad por saber el tiempo que tarda.


 

anything