• Miércoles 20 de Noviembre de 2024, 16:33

Autor Tema:  El Rey Y Sus Caballos  (Leído 14164 veces)

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
El Rey Y Sus Caballos
« en: Jueves 5 de Agosto de 2004, 06:50 »
0
NIVEL: MEDIO

Introduccion:
En este juego de ajedrez, el caballo cumple un rol un poco mas importante que solo moverse. Tiene como objetivo, juntarse con el rey, y/o llevarlo hacia algun casillero del tablero.

Descripción:
Crear un programa, que dado un tablero cuadrado de N (5 <= N <= 20) cuadraditos de lado,  K (1 <= K <= 400) caballos, su posición y la posición del rey en el tablero, determine el menor numero posible de movimientos, que permitirian a todos los caballos, juntarse con el rey.

El rey se mueve en las 8 direcciones, 4 casilleros adyacentes y los 4 diagonales.
El caballo se mueve a 8 direcciones: cada una es diferente de la inicial con 2 unidades y 1 unidad de (x, y) o (y, x). (Movimiento clasico!!)

Mas de una figura puede estar en el mismo cuadradito en un instante dado.
Estando uno o mas caballos en el casillero del rey, este puede viajar con el caballo (como se mueve el caballo).
El rey, no necesariamente tiene que viajar con caballo, eso es solo una posibilidad.
Las piezas se pueden juntar en cualquier casilla, el problema es encontrar la que menos movimientos necesitara, e imprimir en la salida esa cantidad.

Entrada (caballo.in):
En la primera linea: 2 enteros: N y K
En la segunda linea: x y (la posición del rey al inicio del juego)
Lineas 3…3+K-1: x y (la posición de cada caballo)

Salida (caballo.out):
Un solo entero: el numero de movimientos minimos que hay que realizar para lograr juntar todas las piezas del tablero en un solo casillero.

Ejemplo:

Entrada:
8 4
4 4
1 3
1 8
8 1
8 8

Salida:
10

Explicacion de la salida:
Se juntan en (2,5).
Caballo 1: 1,3 – 2,5 (1 movimiento)
Caballo 2: 1,8 – 3,7 – 2,5 (2)
Caballo 3: 8,1 – 7,3 – 6,5 – 4,4 (se lleva el rey y..) – 2,5 (4 movimientos)
Caballo 4: 8,8 – 6,7 – 4,6 – 2,5 (3)
1 + 2 + 4 + 3 = 10 moves.


P.D.1: Denle, no es tan dificil, cosa de una horita.
P.D.2: Este reto lo tengo programado para un par de semanas, pero la verdad me da lo mismo cuando se quita... depende del interes que hay hacia el.
P.D.3: Cualquier pregunta, por favor, no se la aguanten.

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #1 en: Jueves 5 de Agosto de 2004, 06:52 »
0
?! 1 dia sin que nadie lo haya resolvido?  :blink:

REDD

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #2 en: Viernes 6 de Agosto de 2004, 01:55 »
0
oye ya tengo la solucion y voy a programarla pero como el la primera vez que participo en esta seccion de retos, tengo una duda que yo creo mas bien es para juanK (el moderador). eso de salida y entrada, o sea caballo.in y caballo.out, significa que los datos para el problema deben de ser leidos de un archivo(llamado caballo.in) y la salida debe ir a dar a otro(caballo.out).

Perdon si es una pregunta boba pero como te digo es la primera vez que intento participar

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #3 en: Viernes 6 de Agosto de 2004, 03:12 »
0
Por favor, REDD, tu pregunta esta bien puesta.
Efectivamente....

Los datos te vendran en el archivo "caballo.in", de donde los leeras, los procesaras y luego escribiras tu salida en "caballo.out".

xxx.in y xxx.out es igual que manipular xxx.txt (por si las dudas)

Saludos.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: El Rey Y Sus Caballos
« Respuesta #4 en: Viernes 6 de Agosto de 2004, 03:42 »
0
hola..
aprovecho para aclarar que no es no quiera participar en los retos y que me parezcan simples..
por el conmtrario yo seria feliz haciendo todas estas cosas, pero a diferencia del año pasado hoy en dia no tengo de nada... y me toc< conformame con leer lo quie ustedes hacen.. animo!!!
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Blag

  • Moderador
  • ******
  • Mensajes: 697
    • Ver Perfil
    • http://atejada.blogspot.com
Re: El Rey Y Sus Caballos
« Respuesta #5 en: Viernes 6 de Agosto de 2004, 05:03 »
0
Citar
?! 1 dia sin que nadie lo haya resolvido?  :huh:


¿¿¿resolvido???  :huh:  Si no me equivoco....se dice Resuelto :lol:

A mi también me gustaria resolver los retos.....pero la verdad es que no tengo tiempo para nada :(

Saludos,

Blag  :devil:

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #6 en: Viernes 6 de Agosto de 2004, 21:56 »
0
Blaq, me tomo nota. Gracias.

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #7 en: Sábado 7 de Agosto de 2004, 02:20 »
0
Realmente todavia no puedo sacar la sintaxis de Pascal de la cabeza, y tu reto si que es un RETO (por lo menos para mi) . Mi problema es que estoy con C hace 2 semanas y aprendí demasiado, más de lo que podría soportar y creo esto hice que me estresara un poquittitito. Estoy confusio :blink: . Aunque no fue tan dificil como supuse. Tengo que decirlo en algun lado, C es de lo mejor (no para todo) :rolleyes: .

Bueno, nos veremos el domingo para más noticias ya que mi unico tiempo para programar es el sabado a la noche o mejor dicho domingo a la mañana(01:00 hs).

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #8 en: Sábado 7 de Agosto de 2004, 05:24 »
0
Eso del cambio de Pascal a C, es verdad eh....
Yo programaba en Pascal, pero luego se me vino esto de las competencias de programacion, y el Pascal no esta al nivel asi que me tuve que cambiar. La verdad es que una vez que te acostumbres al C no vas a querer ni escuchar de pascal.

Lo que mas me faltaba eran los arrays con indices negativos, pero con el tiempo se supera :D
La verdad es que el C es mucho mas ordenado, y la sintaxis es mas facil de seguir, ademas que es mas amistoso que Pascal (ese sentimiento me dio cuando me familiarize con el)... como se le dice... user friendly :D

Hay un chistesito por alli de eso:
"Los programadores intentan crear mas y mas software user friendly y facil de usar. La naturaleza, por el otro lado, esta creando cada vez idiotas superiores. Por lo visto hasta ahora, la naturaleza esta ganando" :D --> Eso va dedicado a los programadores, todos sabemos que tienen hartos problemitas con el cliente, porque es dificil que una persona que no programe pueda entender las dificultades, como sea... me fui hacia otro cuento.

Para lo del reto... es bonito no? A mi personalmente me gusta mucho este en especial, es de las olimpiadas internacionales para alumnos de ensenianza media (secundaria). Lo que no significa que sea facil, pero tiene una solucion facil bastante trivial y facil de implementar. Eso si, el conocimiento de un algoritmo es fundamental: XXXXX XXXX. :D (alli les digo cual) :D

Saludos!

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #9 en: Sábado 7 de Agosto de 2004, 07:49 »
0
Waaaaaaaaaaaaaa!! Es un reto bastante curioso cuando menos... Por lo menos se sale de la clasica vuelta del caballo (Knigth's Tour creo que se le llama en ingles).

Tengo una duda. El rey puede moverse tambien?? Digo solo y por si mismo con el movimiento clasico del rey (una casilla en cualquier direccion). Y otra mas... Si el rey se mueve con caballo, cuenta solo un movimiento, no??

Si puedo me pondre con el, aunque no creo por que tengo mucho que estudiar (9 para Septiembre y encima trabajo de 14:00 a 21:00) T__T Mi gcc me hecha de menos.... Aunque me vendria bien para el concurso de programacion de Octubre...

See ya!!
   

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #10 en: Sábado 7 de Agosto de 2004, 15:04 »
0
EL rey se puede mover por si solo.
El movimiento del rey con el caballo cuenta como 1 movimiento.
(Ver ejemplo de entrada y salida + explicacion)

La cosa es que hay que optimizar todos los movimientos, si eso requiere por ejemplo que el rey se mueve un cuadradito, luego se junte con un caballo y se mueva un poco mas, y luego se mueva por su cuenta, entonces eso es totalmente valido.

Espero que nadie se vaya por el backtracking, porque el tablero es bastante grande, y las restricciones son bastante limitadas :D

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #11 en: Lunes 9 de Agosto de 2004, 23:43 »
0
La verdad que mi primera (y lamento decir que unica) idea gue backtracking... Pero pronto descubri que era demasiado mala!! Asi que ahora mismo estoy asi:  :alien:

esperare a que postees la solucion para reirme de lo tonto que he sido :lol: , o no....
   

REDD

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #12 en: Lunes 9 de Agosto de 2004, 23:56 »
0
:P  a mi me paso igual nagisa......... asi que ahora estoy buscando otra solucion

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #13 en: Miércoles 11 de Agosto de 2004, 02:46 »
0
Pues... la solucion no es sencilla, requiere saber un algoritmo en especial, por algo dice nivel medio y no facil...

A ver, dejenme dejarles una pista que se me murieron con este reto:

Es cosa de buscar soluciones chicas, como para poder armar todo el cuento despues. Por ejemplo: calcular la cantidad de movimientos que tomaria el rey en llegar a todos los cuadraditos, calcular la cantidad de movimientos que le tomaria a cada caballo llegar a cada cuadradito, y teniento eso, empezar a armar la respuesta de alguna manera.

Lo que pasa es que este problema puede ser separado en sub-problemas y de alli sacar una solucion. La idea va por el denominado dinamic-programming, que tiene como base la creacion de una solucion a partir de soluciones mas chicas.

Vayanlo pensando asi.
Saludos!

REDD

  • Miembro activo
  • **
  • Mensajes: 40
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #14 en: Miércoles 11 de Agosto de 2004, 03:17 »
0
Algo asi estaba planeando pero me fui mal por que yo comprobaba la posicion de todas las piezas casilla por casilla(yo creo por eso no me salio), pero bueno asi como dices se ve mas logico. Lo dificil creo que consistiria en el Rey por la forma en que se puede mover.

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #15 en: Miércoles 11 de Agosto de 2004, 16:59 »
0
Claro, eso seria la mayor parte del reto...
REDD, te dare otra pista... crea 400 tableros 20x20 (para cada caballo) y 400 tableros 20x20 mas para almacenar lo que le tomaria al rey ir a cada cuadradito, con ayuda de un caballo.

Miremoslo asi... el maximo caballos que pueden haber en el tablero son 400 (20x20) (Full house :D). No tiene sentido que el rey, una vez subido a un caballo, se baje y tome otro, porque igual el caballo que lo llevaba tendra que ir al punto de encuentro, asi que no le cuesta nada llevar el rey tambien.

Ahora.... hagamos asi:

int d[400][20][20]
int k[400][20][20]

d[c][j] nos da la cantidad de movimientos que le tomaria al caballo 'c' llegar a la pocision (i, j)

k[c][j] nos da la cantidad de movimientos que le tomaria al 'REY' y el caballo 'c', llegar a la posicion (i, j)

Una vez calculado todo eso... la respuesta seria:

min( para cada x, y -->  min( para cada 'c' != c2 --> Suma( d[c][y]
  • ) + k[c2][y]
  • ))


En palabras, eso seria, que comprobemos para cada cuadrito (y, x), cuanto le tomaria a cada caballo 'c' (excepto el caballo c2) llegar a (y, x) , sumarlos, y sumar la cantidad de movimientos que le tomaria al caballo c2 llegar trayendo el rey.

Por alli va la solucion.
Todavia me imagino que esta algo borrosa, pero la vamos a ir aclarando... :D

QliX=D!

  • Miembro MUY activo
  • ***
  • Mensajes: 214
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #16 en: Jueves 19 de Agosto de 2004, 05:16 »
0
Hey esto no tiene nada que ver con el tema, pero....
En lso post que lei tuyos de retos... vi.. o me parecio, que son los de la ACM, no?

Saludos.
QliX=D! - From the top of Tsunami

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #17 en: Jueves 19 de Agosto de 2004, 14:27 »
0
No te capto...
Si te refieres a los problemas, son de olimpiadas para alumnos de secundaria.
Son de olimpiadas como la IOI.

The Black Boy

  • Miembro de PLATA
  • *****
  • Mensajes: 1043
  • Nacionalidad: co
    • Ver Perfil
    • http://www.mslatam.com/latam/technet/mva2/Microsite.aspx?alias=JairoDiaz
Re: El Rey Y Sus Caballos
« Respuesta #18 en: Viernes 3 de Septiembre de 2004, 17:10 »
0
he leido todo el foro y el reto no se ve complicado , pero como ya dijeron algunos de los foreros el problema es de tiempo... si me queda alguito se lo dedicare al reto...   pero lo que nocreoes que el reto sea solo para desarrollarlo en dos horas..

Saludos
El inteligente no es aquel que lo sabe todo
sino aquel que   sabe utilizar lo poco que sabe.


Espacio Personal

si necesitas algo de programacion click aqui, si no esta aqui no existe

Programacion]

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: El Rey Y Sus Caballos
« Respuesta #19 en: Viernes 3 de Septiembre de 2004, 20:43 »
0
tampoco lo creo.

solo se desarrolla en 2 horas si entregan ya el algoritmo o los algoritmos que hay que usar , es decir si es solo hacer el programa..
porque si toca deducior el algoritmo o buscarlo y luego entenderlo.,.. nadie lo puede hacer en ese tiempo.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #20 en: Sábado 4 de Septiembre de 2004, 16:26 »
0
Este problema es sacado de IOI 1998 (International Olympiad in Informatics) que es para jovenes de secundaria. Las reglas de la IOI son 5 horas para 3 problemas, lo que impondria un limite de menos de 2 horas para cada problema.

Los problemas nunca se repiten y nunca seran de aplicar un algoritmo conocido y ya, porque eso no es la idea, sino, combinaciones y modificaciones de algoritmos, que lo harian mas dificil...

Hay personas que resuelven los 3 problemas en ese tiempo, pero la mayoria estan capaces de hacer 2 de 3, que tampoco es malo...

Yo participo en esta competencia, y en una semana estare participando en la IOI 2004 en Grecia, asi que por favor no me digan que no se pueden resolver, porque hay muchas personas que lo hacen.

10 mins para leer y entender el problema
20 mins para inventar algoritmo
30 mins para codificarlo
10 mins para depurarlo

Eso seria un tiempo normal para cualquier problema...
Saludos!

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: El Rey Y Sus Caballos
« Respuesta #21 en: Lunes 6 de Septiembre de 2004, 21:16 »
0
:( Siempre lo he dicho...

 soy un completo tonto  :(

Yo tambien he participado en competencias de programacion y es cierto los tiempos que dan por lo general son esos, aunque yo nunca he estado en competencias internacionales.

Creo que hace falta ser un genio o tener mucho de genio para sacar muchos de esos algoritmos en el tiempo que se piden, conozco algunos de la universidad de los andes que si lo hacen... pero yo.. por lo menos en el momento no tengo la fortuna de poder deducir y entender un algoritmo tan rapido como se requiere en esta prueba que has posteado.  :adios:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Binary

  • Miembro activo
  • **
  • Mensajes: 66
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #22 en: Lunes 6 de Septiembre de 2004, 22:12 »
0
Pues, no creo que se trate de saber o no, sino que esas competencias requieren tener una practica bastante activa los ultimos 5-6 meses antes de la competencia de modo que  se te vengan ideas a la cabeza de inmediato...

En los ultimos 8 meses yo resolvi 500-600 problemas por el estilo, con eso, al ver un problema se me ocurren muchas formas de trabajarlo y asi puedo tener algoritmos entre los cuales elegir el mas apropiado...

El otro dia hice copy *.cpp y me sorprendi al ver 500 archivos copiados, que son todo mi empenio de los ultimos meses. Aun asi... creo que uno nunca esta lo suficientemente preparado para lo que viene, porque en las internacionales no dan problemas que ya se hayan visto o publicado, sino que los inventan y los dejan de modo tal que el algoritmo que hay que usar sean irreconosible... o hay que modificarlo demasiado para que se ajuste al problema.

Como sea... deseanme suerte para el 10 de sept que tengo la olimpiada y esoty nervioso :) Adios a todos!! Estare un buen tiempo sin posts por aqui...

Saludos desde Chile...

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: El Rey Y Sus Caballos
« Respuesta #23 en: Martes 7 de Septiembre de 2004, 16:10 »
0
Buena suerte bynary!!!

recuerda que con el simple hecho de asistir a un evento de esos tu ya eres un ganador!!!.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: El Rey Y Sus Caballos
« Respuesta #24 en: Jueves 21 de Octubre de 2004, 18:00 »
0
Cita de: "Binary"
La verdad es que el C es mucho mas ordenado, y la sintaxis es mas facil de seguir, ademas que es mas amistoso que Pascal (ese sentimiento me dio cuando me familiarize con el)... como se le dice... user friendly :D
:huh: