• Domingo 22 de Diciembre de 2024, 22:30

Autor Tema:  18/04/2004 : Braid Theory (dificultad Media)  (Leído 4437 veces)

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
18/04/2004 : Braid Theory (dificultad Media)
« en: Domingo 18 de Abril de 2004, 13:51 »
0
Bien... este problema lo he sacado de un concurso de programacion, y la verdad es que me costo un poco resolverlo (bien por que mi forma no era la mejor o bien por que soy un torpe  :lol: )

El enunciado esta en ingles, aunque la verdad es que tampoco es muy dificil de entender:

A braid is made of one or more loops interlaced in fanciful forms. Surprisingly, every braid can be represented graphically using just four characters: blanks, dashes, bars and the plus sign.
The goal of this simple programming exercise is to find the number of loops thet integrate a given braid.

INPUT DESCRIPTION

Several braid descriptions, separated by empty lines. Each braid is given using the four characters as explained above, is well formed and is representated unambiguosly. The input is finished by the end of file.

OUTPUT DESCRIPTION

For each braid, a line with the numbre of loops contained in it.

SAMPLE IMPUT

Código: Text
  1.  
  2.    +----+
  3.    |       |
  4. +----+  |
  5. |  |   |  |
  6. +--|----+
  7.    |   |
  8.    +-+
  9.  
  10. +--+  +--+  +--+
  11. |  |  |  |  |  |
  12. +-----|--|-----+
  13.    |  |  |  |
  14.    +--+  +--+
  15.  
  16.       +--------+
  17.       |        |
  18.    +--------+  |
  19.    |  |     |  |
  20.    |  +--------+
  21.    |        |
  22. +--------+  |
  23. |  |     |  |
  24. +--|-----+  |
  25.    +--------+
  26.  
  27.  

SAMPLE OUTPUT
Código: Text
  1.  
  2. 1
  3. 1
  4. 3
  5.  
  6.  
   

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: 18/04/2004 : Braid Theory (dificultad Media)
« Respuesta #1 en: Domingo 18 de Abril de 2004, 13:56 »
0
Uhm... Por culpa de las fuentes :angry:  la entrada del ejemplo no se ve bien...  Lo siento  :(  De todos modos si veis las salidas y entendeis mas o menos el problema no sera dificil reconstruirla  ;)


Suerte con ello!!  :)
   

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: 18/04/2004 : Braid Theory (dificultad Media)
« Respuesta #2 en: Domingo 18 de Abril de 2004, 15:10 »
0
1 - nagisa por favor trata de corregir el fuente de entrada... es mas facil si lo editas primero en algo como el block de notas y luego lo pegas aca en el foro..

2- Por favor traducelo al español pues no todos los miembros saben ingles.
3- en lo posible debes poner una fecfha limite para el reto ya que pasado un tiempo tu misma deberas publicar la solucion.

Gracias
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: 18/04/2004 : Braid Theory (dificultad Media)
« Respuesta #3 en: Lunes 19 de Abril de 2004, 20:08 »
0
Lo siento muchisimo, pero la verdad es que la entrada YA estaba editada en un archivo de texto plano y no me deja T__T Lo mas que puedo hacer es colgar el fichero, y para ver si vuestros programas van pues redirigis la entrada standard. Para quien no sepa como hacerlo, basta con añadir al final de la linea de comandos lo siguiente:

< entrada

donde entrada es el archivo de texto.

Es decir, si llamais al ejecutable braids.exe, y el fichero se llama lazos.txt podeis escribir:

C:\.....\> braids < lazos.txt

Asi todo lo que tuviera que leer del teclado lo lee del fichero en su lugar. A nivel de codigo del programa no hace falta hacer nada!! Debeis de leer como si fuera desde "teclado" (de hecho, debeis de leer como si se tratara de la entrada standard, que suele ser el teclado ^__^).

Sobre lo de la fecha de caducidad... pues no habia pensado en ello. Digamos que... para dentro de dos semanas?? Por lo tanto EL RETO CADUCA EL DIA 3 de Mayo. De todas formas espero no tener que ser yo el unico quien cuelgue una solucion correcta  :lightsabre:

Traduccion al español del enunciado (no es del todo literal):


Un lazo esta hecho de uno o mas bucle entrelazados de formas fantasticas. Sorprendentemente, cada lazo puede ser representado graficamente usando solo cuatro caracteres:  espacios en blanco (' '), guiones('-'), barras('|') y signos de suma (+).

El objetivo de este sencillo ejercicio de programacion es encontrar el numero de bucles que componen un lazo dado.


DESCRIPCION DE LA ENTRADA


Varias descripciones de lazos separadas por lineas vacias. Cada lazo es dado usando los cuatro caracteres como se explico anteriormente, esta bien formado y representado de manera no ambigua. La entrada es finalizada por el fin de fichero.

(Nota: La entrada es la entrada standard!!)


DESCRIPCION DE LA SALIDA

Para cada lazo, una linea con el numero de bucles que contiene.



Si quereis que añada o rectifique algo mas, solo teneis que decirlo. Tendre en cuenta las cosas anteriores para la proxima vez  :)


Pues eso, poneos a ello, que no es tan facil como parece ni tan dificil como imaginais!! :suerte:
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.
   

patitofeo

  • Miembro MUY activo
  • ***
  • Mensajes: 145
    • Ver Perfil
Re: 18/04/2004 : Braid Theory (dificultad Media)
« Respuesta #4 en: Lunes 26 de Abril de 2004, 17:38 »
0
Bueno, he estado mirando el reto.

Aun no se si me pondre a programarlo pero me parece curioso.


Unas dudillas:


es posible encontrarse con algo como:

Código: Text
  1.  
  2.  
  3.                +---
  4.                |
  5.                |
  6.                |
  7.         +------+
  8.         |      |
  9.         |      |
  10.         |      |
  11.         +------+
  12.                |
  13.                |
  14.                +--
  15.  
  16.  

o del tipo

Código: Text
  1.  
  2.  
  3.     +---+
  4.     |   |
  5.     |   |
  6.     |   |
  7.     +---+---+
  8.         |   |
  9.         |   |
  10.         +---+
  11.  
  12.  

no se si me entiendes.

Si una misma esquina ('+') puede formar parte de mas de un bucle.

Un saludo. Si encuentro un ratillo y me pongo ya os comento.

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: 18/04/2004 : Braid Theory (dificultad Media)
« Respuesta #5 en: Lunes 26 de Abril de 2004, 23:19 »
0
Veamos... La primera entrada no seria posible, ya que el dibujo no esta cerrado.

Sobre el caso de que un '+' forme parte de varios lazos.... auqnue del enunciado no se deduce, la respuesta es que no. En tu segundo ejemplo... cual seria la solucion correcta?? 1 o 2?? Digamos que eso entraria en el caso de "lazo ambiguo".
   

patitofeo

  • Miembro MUY activo
  • ***
  • Mensajes: 145
    • Ver Perfil
Re: 18/04/2004 : Braid Theory (dificultad Media)
« Respuesta #6 en: Miércoles 28 de Abril de 2004, 17:38 »
0
La respuesta seria: 2.

Código: Text
  1.  
  2.  
  3.    +---+
  4.    |   |
  5.    |   |
  6.    |   |
  7.    +-------+
  8.        |   |
  9.        |   |
  10.        +---+
  11.  
  12.  
  13.  


si fuese 1 seria asi: con un '-' o un '|'. ¿no es asi?

De todas formas, si estas entradas no son posibles se facilita el problema.

Igual me pongo este fin de semana y lo intento resolver.

Nagisa

  • Miembro MUY activo
  • ***
  • Mensajes: 119
  • Nacionalidad: es
    • Ver Perfil
Re: 18/04/2004 : Braid Theory (dificultad Media)
« Respuesta #7 en: Lunes 3 de Mayo de 2004, 22:02 »
0
Veamos... la respuesta depende de como soluciones el problema , y ambas serian aceptables!! Por eso se descartan esas entrada, por ser ambiguas.

Bien... debido a los examenes no he podido optimizar en absoluto la solucion, la cual se puede mejorar por muchos sitios.

Explicando a groso modo, el problema se reduce a uno de contar componentes conexas en un grafo, el cual viene dado por la entrada.

Cuando hablo de mis posibles optimizaciones son a la hora de representar dicho grafo y el algoritmo de contado (cuando escribi el codigo todavia no sabia hacerlo).

Aqui cada nodo del grafo es un registro con 4 punteros y un valor que lo identifica exclusivamente.

El algoritmo de recorrido es destructivo (etiqueta los nodos visitados con un 0), y se aprovecha de que sabemos que ningun nodo tiene grado mayor que 2. Escojo un nodo valido (id != 0); una vez llego a un nodo, solo tengo un posible camino para seguir , por lo tanto lo marco (id = 0) y reitero por el siguiente ; si no, termino con esa componente conexa, la cuento y busco un nuevo nodo

Tira con el gcc, asi que no creo que tengais problemas. Lo adjunto como .txt por que no me deja hacerlo como .c

De todas formas, si hay cualquier duda, preguntadla :D
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.