Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 1 votos - 5 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Desafíos de programación
Autor Mensaje
pablo Sin conexión
ModdIng
Hombre de ingenio (?)
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.637
Agradecimientos dados: 0
Agradecimientos: 24 en 14 posts
Registro en: Apr 2008
Mensaje: #46
Re: Desafíos de programación
Dejo una solución simple pero interesante de un programa que encontré para la detección de movimiento por medio de una webcam.

http://www.sistemasorp.es/2005/03/30/

Saludos!
07-07-2008 12:26
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Desert69 Sin conexión
Presidente del CEIT
Sin estado :( / "Anarquia...
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.477
Agradecimientos dados: 230
Agradecimientos: 345 en 206 posts
Registro en: Jun 2008
Mensaje: #47
Re: Desafíos de programación
en la expo que hicieron en ¿octubre? el año pasado en la facu (q los aspiratnes teniamos q ir a la charla en q nos decian q sistemas no es programar) habia en el aula magna una pc corriendo un programita q con una webcam detectaba puntos que se movian... y segun explicaban, era 100% laburo de integrales y derivadas... pero we, ni idea...


copado...

[Imagen: a2.php]
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
07-07-2008 19:10
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
alfathenus Sin conexión
Campeon del cubo Rubik
Preparando final SO
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 152
Agradecimientos dados: 2
Agradecimientos: 0 en 0 posts
Registro en: Apr 2008
Facebook Twitter
Mensaje: #48
Re: Desafíos de programación
pablo escribió:Dejo una solución simple pero interesante de un programa que encontré para la detección de movimiento por medio de una webcam.

http://www.sistemasorp.es/2005/03/30/

Saludos!

Yo lo haria mas facil... usaria el API de camara de Actionscript... ya esta hecho :D y anda barbaro

saludos!
09-07-2008 01:42
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Desert69 Sin conexión
Presidente del CEIT
Sin estado :( / "Anarquia...
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.477
Agradecimientos dados: 230
Agradecimientos: 345 en 206 posts
Registro en: Jun 2008
Mensaje: #49
Re: Desafíos de programación
gente, un "proyecto" que se me ocurrió hace un tiempito (y x ahi ya exista pero no estaba enterado)


como podria hacerse un soft q sea "reconocedor de fuentes tipograficas"?


osea, partiendo de una imagen, que el tipo reconozca que fuente usa un texto incluido en la imagen...


yo habia pensado en tener como una base de datos con las distintas fuentes, y compararlas, pero el tema de la comparacion no se me ocurre como...

q dicen?

[Imagen: a2.php]
[Imagen: 971aa6599664453c05cb3e42d58bbc0eo.jpg]
12-07-2008 21:12
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Dem0 Sin conexión
( ͡° ͜ʖ ͡°)
._.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.980
Agradecimientos dados: 9
Agradecimientos: 194 en 74 posts
Registro en: Apr 2008
Mensaje: #50
Re: Desafíos de programación
Desert69 escribió:gente, un "proyecto" que se me ocurrió hace un tiempito (y x ahi ya exista pero no estaba enterado)


como podria hacerse un soft q sea "reconocedor de fuentes tipograficas"?


osea, partiendo de una imagen, que el tipo reconozca que fuente usa un texto incluido en la imagen...


yo habia pensado en tener como una base de datos con las distintas fuentes, y compararlas, pero el tema de la comparacion no se me ocurre como...

q dicen?

Tendrías que identificar los patrones de pixels en una imagen, después desarrollar algún tipo de algorítmo que catalogue/compare los patrones encontrados contra una base de datos de fuentes...
12-07-2008 21:54
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
leandrodg Sin conexión
Il Capo Cannoniere
Lost Admin
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.421
Agradecimientos dados: 11
Agradecimientos: 52 en 20 posts
Registro en: Mar 2008
Facebook Twitter YouTube
Mensaje: #51
Re: Desafíos de programación
Yo tuve que hacer algo que se podría aplicar este año en Inteligencia Artificial =) Un reconocedor de letras utilizando RNA (redes neuronales artificiales) =P Quedó lindo =)

LeandroDG

Mi blog: http://www.logue.com.ar/blog
Ingeniero en Sistemas
13-07-2008 14:45
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
pablo Sin conexión
ModdIng
Hombre de ingenio (?)
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.637
Agradecimientos dados: 0
Agradecimientos: 24 en 14 posts
Registro en: Apr 2008
Mensaje: #52
Re: Desafíos de programación
Perdona el offtopic Lean, pero me interesa mucho esa cursada... con quièn cursaste? què dìas y turno? Gracias!
14-07-2008 17:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
leandrodg Sin conexión
Il Capo Cannoniere
Lost Admin
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.421
Agradecimientos dados: 11
Agradecimientos: 52 en 20 posts
Registro en: Mar 2008
Facebook Twitter YouTube
Mensaje: #53
Re: Desafíos de programación
pablo escribió:Perdona el offtopic Lean, pero me interesa mucho esa cursada... con quièn cursaste? què dìas y turno? Gracias!
No problem =P Con Pollo, da todos los días =P Es más difícil que te toque un curso que no sea de Pollo que uno que sí (a mi en lo personal me pareció buena la cursada, aunque algunas cosas no terminé de entender =(). Turno noche, of course =P

LeandroDG

Mi blog: http://www.logue.com.ar/blog
Ingeniero en Sistemas
14-07-2008 18:05
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
pablo Sin conexión
ModdIng
Hombre de ingenio (?)
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.637
Agradecimientos dados: 0
Agradecimientos: 24 en 14 posts
Registro en: Apr 2008
Mensaje: #54
Re: Desafíos de programación
Está bueno lo de aplicar IA a lo de imágenes... de hecho, en este tipo de casos donde se busca que la computadora dé una interpretación humana de los datos, es justamente donde debería ser aplicada. Yo hice un TP para Investigación de RNA para reconocimiento de voz, y supongo que básicamente con imágenes será lo mismo, sólo que en vez de buscar patrones en las frecuencias y demás se busca en las imágenes.
En estos casos, cuando se sabe que son problemas ya resueltos, es mucho mejor ponerse a leer que reinventar la rueda (aunque disfrutar del razonamiento tampoco está mal)... seguramente haya soluciones muy optimizadas para este tipo de problemas!


Off-topic:
Lean: Joya! Mirá vos... no la tenía a Pollo haciéndote programar, me imaginaba que sería todo teórico, pero mejor así que sea más completa! No entendiste porque eran muchos temas, complicada, etc. por qué?



Off-topic:
(recontra offtopic) En 5º hay una electiva de procesamiento de señales que si no me equivoco tiene que ver con esto -aunque no tan "programáticamente"-... alguien tiene idea que onda? La cursó o escucho algo de la materia? En apuntes-utn vi apuntes (cuac) interesantes sobre la materia, y es una que de cabeza quiero hacer el último año.
14-07-2008 21:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
LeaTex Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.848
Agradecimientos dados: 56
Agradecimientos: 264 en 55 posts
Registro en: Apr 2008
BlogSpot Facebook Google+ Last.fm LinkedIn Twitter
YouTube
Mensaje: #55
Re: Desafíos de programación
Acá les traigo un problema que tengo esta semana dando vueltas, y quisiera ver sus opiniones (o si me dan la solución, joya).
Recuerden que trabajo con Smalltalk, así que todo en objetos.

En fin, dada una cadena de 6 caracteres, necesito encontrar la mayor cantidad de palabras que puedo armar con esos 6 caracteres, que tengan entre 3 y 6 letras.
Ej: 'abejot'
- tejo
- jota
- jeta
- bea
- beta
- toba
etc...

Mi primera idea es generar todas las combinaciones posibles de 3 caracteres, de 4, de 5 y de 6. Y comparar contra un diccionario.
Lo malo es que las combinatorias son lentas, y además voy a estar produciendo una gran cantidad de info que no me va a servir cuando las filtre. Pero no se me ocurre nada más.

Además: ¿Cómo hago las combinaciones de 6? El resultado es un 6! y lo primero que se me viene a la mente son 6 ciclos anidados, ¿no?

15-07-2008 00:20
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
leandrodg Sin conexión
Il Capo Cannoniere
Lost Admin
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 2.421
Agradecimientos dados: 11
Agradecimientos: 52 en 20 posts
Registro en: Mar 2008
Facebook Twitter YouTube
Mensaje: #56
Re: Desafíos de programación
Las combinaciones serían 6! + 6!/1! + 6!/2! (para 6, 5 y 4 letras respectivamente). Total: 1800 combinaciones.

No sé si habrá alguna manera mejor de hacerlo que la que planteás vos tocayo.

LeandroDG

Mi blog: http://www.logue.com.ar/blog
Ingeniero en Sistemas
15-07-2008 00:52
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
pablo Sin conexión
ModdIng
Hombre de ingenio (?)
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.637
Agradecimientos dados: 0
Agradecimientos: 24 en 14 posts
Registro en: Apr 2008
Mensaje: #57
Re: Desafíos de programación
LeaTex escribió:Acá les traigo un problema que tengo esta semana dando vueltas, y quisiera ver sus opiniones (o si me dan la solución, joya).
Recuerden que trabajo con Smalltalk, así que todo en objetos.

En fin, dada una cadena de 6 caracteres, necesito encontrar la mayor cantidad de palabras que puedo armar con esos 6 caracteres, que tengan entre 3 y 6 letras.
Ej: 'abejot'
- tejo
- jota
- jeta
- bea
- beta
- toba
etc...

Mi primera idea es generar todas las combinaciones posibles de 3 caracteres, de 4, de 5 y de 6. Y comparar contra un diccionario.
Lo malo es que las combinatorias son lentas, y además voy a estar produciendo una gran cantidad de info que no me va a servir cuando las filtre. Pero no se me ocurre nada más.

Además: ¿Cómo hago las combinaciones de 6? El resultado es un 6! y lo primero que se me viene a la mente son 6 ciclos anidados, ¿no?

No importa si usas objetos o no, la lógica a aplicar tiene que ser la misma, es más bien un problema de ingenio.

Voy a mostrar como saber CUÁNTAS, y por otro lado, CUÁLES palabras podés formar.

Las palabras tienen que tener sentido? Si no lo tienen que tener, sólo necesitas calcular la combinatoria, como hacíamos en proba. Esto es para saber CUÁNTAS son:

cantidadTotal = cantidadCon3 + cantidadCon4 + cantidadCon5 + cantidadCon6

Las letras se pueden repetir? eso es importante, porque la cantidad puede variar mucho, pero supongo que NO.
Sabemos que el orden SÍ importa, ya que mismas letras pero diferente orden forman otra palabra.

Pensalo así para cantidad de 3: uno toma una letra de las 6, y se queda con 5. Ahora tomas una de las 5, y te quedas con 4. Ahora una de las 4, y te quedás con 3.

O sea, podés tomar: 6*5*4 variaciones posibles, o lo que es lo mismo 6*5*4*3*2*1 / 3*2*1 = 6! / 3!.

En general, la fórmula es: n! / (n-k)!, siendo n la cantidad de letras total y k la cantidad de letras que usas.

O sea que la cantidadTotal te queda:

cantidadTotal = 6!/3! + 6!/2! + 6!/1! + 6!/0!

Eso para averiguar la cantidad... la función factorial no es difícil de hacer, pero si la querès hacer eficiente para no repetir cálculos hay que pensarla un cacho más.

Igual, supongo que lo más importante para vos es averiguar QUÉ palabras se pueden formar...

EDIT: ahí lei que pusiste que tienen que tener sentido... igualmente, esta cantidad te sirve para saber todas las iteraciones que tu programa tendría que hacer si querés generar tooodas las palabras y comparar con un diccionario. Vos lo dijiste: los problemas de combinatoria suelen ser poco eficientes... evidentemente, hay que pensar otra alternativa.

SOLUCIÓN POSIBLE

Lo más eficiente en este caso, es ARMAR UN ÁRBOL, donde las hojas sean las posibles palabras (en un diccionario o no), y los nodos intermedios los pasos necesarios para formarlas. Vamos a ver después que el árbol incluso es CONCEPTUAL, o sea, que nunca se crea realmente, pero el concepto está aplicado.

Entonces, la raíz no tiene ninguna letra, pero tiene 6 hijas, en el ejemplo: "a", "b", "e", "j", "o", "t". Ahora, la "a" tiene 5 hijas, "b", "e", "j", "o", "t". La "b" que es hija de la "a" tiene 4 hijas: "e", "j", "o", "t"... y así, hasta que sólo se pueda tener una hija (la hoja).

No te conviene guardar la subcadena en el nodo, o sea, guardar "a" en el 1º nivel y en el segundo guardar "ab", "ae", etc... porque lo podés armar en el momento y eso consumiría bastante más memoria. Parece tonto pensar en memoria usada, pero es realmente mucha, pensá la cantidad de nodos que necesitás... 6 nodos para las primeras letras, 6*5 para las segundas, 6*5*4 para tercera profundidad, y así hasta llegar a las hojas, donde tendrías 6!. Igualmente, esto es sólo si generás el árbol en memoria, ahora que lo pienso mejor, ni siquiera sería necesario thumbup3 .

Como verás, este árbol sólo puede tener como máxima profundidad 7 (contando la raíz que no tiene letra asignada), por lo cual recorrerlo sólo lleva 6 pasos como máximo. Si bien recorrerlo para cada palabra llevaría la misma cantidad de iteraciones (y más, para los pasos intermedios antes de llegar a las hojas), se puede usar técnicas de descarte ("Branch & Bound" se llama, si no me equivoco) en la que uno vaya descartando aquellas ramas que ya sabe que no le resultan útiles.

Por ejemplo, tenés un diccionario con palabras posibles, y tenés tu árbol con las letras cargadas (conceptual, o realmente en memoria). Cuando vos descendés en una rama del árbol, en el diccionario te estás posicionando. Avanzás otra vez más, y te reposicionás. Van a llegar puntos donde ciertas ramas no te permitan reposicionarte. Por ejemplo:

Tomás la "a", y te posicionás en el dic en la letra "a".
Tomás la "b" (avanzás en el árbol), y te posicionás en el dic donde empieza "ab".
Tomás la "j" (después de haber probado con las otras letras), y te posicionás en donde empiezan palabras con "abj"...

Pero qué pasa? No tenés palabras que empiecen así! Entonces sabés que no tiene sentido avanzar por los hijos de ese nodo, o sea que te ahorrás, en ese paso, 3*2*1 = 6 nodos para leer. Es lo que se dice como "podar una rama del árbol". Parece poco, pero pensá que si empezás con "t" y luego vas a la "b", ahí te ahorrás 4*3*2*1 = 24 nodos, y también con "tj", etc, por lo cual la cantidad de palabras que evitás procesar y generar (por ejemplo, escribiendolas en una colección, en un archivo, etc.), es mucho menor, y el programa es más eficiente.

Por qué digo que no tenés que crear el árbol? Porque el árbol es muy útil para visualizar el problema, pero irrelevante a la hora de moverte en el diccionario. Saber que nos movemos según un árbol nos indica que el algoritmo tiene cierta tendencia logarítmica (mientras que los problemas resueltos a fuerza bruta con combinatoria tienen una tendencia de complejidad factorial, y eso es muchísimo menos eficiente, que me corrija alguien si sabe esto mejor).

Eso sí, hay que tener en cuenta una cosa: no es necesario llegar al final para formar una palabra, con llegar a 3 letras ya podemos ir encontrando.

Una implementación más o menos sensata, en pseudocódigo:



Procedimiento/Función/Método: FormarPalabras(Subcadena)
1) Si Subcadena tiene 3 o más letras:
1.a) Si está en el diccionario:
1.b) Procesar(Subcadena).
1.c) Si NO está en el diccionario, volver en el stack (return... esto es, básicamente, "podar la rama", ya que no se procesa nada por debajo de esta rama, ya que no se ejecuta el bucle 3).
2) Si Subcadena tiene 6 letras, volver en el stack al procedimiento/función/método que llamó, para que se prueben otras combinaciones (vulgarmente, hacer un "return" =P - creo que no necesitarías devolver ningún valor).
3) De 1 a 6, hacer: (o de 0 a 5, según implementación)
3.a) De un conjunto de 6 letras ordenadas, tomás la letra(i).
3.b) Llamás a FormarPalabras(Subcadena concatenada con la letra(i)).
4) Fin FormarPalabras.



"Procesar" es un p/f/método que hace lo que vos necesitás hacer con la palabra, por ejemplo, mostrarla en pantalla, imprimirla en un archivo, agregarlas a otro diccionario (que sería mucho menor, ya que sólo tendría las palabras formadas con esas 6 letras).

Sobre implementaciones: el conjunto de 6 letras no necesita realmente estar ordenado. Conviene que esté ordenado si las letras se mantienen en el conjunto. La otra es pasar en cada llamado a "FormarPalabras" un nuevo conjunto con las 6 letras, y que a medida que se usan se vayan eliminando del conjunto, hasta que esté vacío. Sin embargo, pasar ese nuevo conjunto en cada llamada complica las cosas innecesariamente, por eso la opción del vector (o de alguna colección que posea orden, en este caso, un Set o Bag no servirían, sí una OrderedCollection -no me acuerdo mucho de los nombres de Smalltalk igual-).

Después hasta se pueden sacar estadísticas interesantes, onda: ver cuantas palabras reales existen sobre la cantidad total que se pueden formar (no puedo evitarlo, son esas dudas existenciales que siempre tuve ¿¿??).

Bueno, espero que te sirva, a mí me parece una solución válida... capaz hay que retocarla un poco, pero tiene sentido y es mucho más eficiente que hacer la combinatoria y luego comparar (que exigiría mucho espacio en memoria para generar todas las palabras, y tiempo para generarlas y encima luego buscarlas en el diccionario).

Saludos!!
15-07-2008 00:57
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
LeaTex Sin conexión
Presidente del CEIT
.
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 4.848
Agradecimientos dados: 56
Agradecimientos: 264 en 55 posts
Registro en: Apr 2008
BlogSpot Facebook Google+ Last.fm LinkedIn Twitter
YouTube
Mensaje: #58
Re: Desafíos de programación
Buena, la explicación de Pablo me recordó mi paso por discreta, allá en el 1er cuatrimestre del 2002. "Tomo 1, me quedan 5...". thumbup3

La teoría combinatoria la conozco, y también probabilidad que la cursé hace poco. Mi pregunta apuntaba más a saber si lo ideal es aplicar la combinatoria, o hay otras alternativas.

Y la aclaración de que era en objetos, era para ver si algún fanático se animaba a tirarme el código fuente. Jaja. Re-vago lo mío, no?

Bueno, veo que no me va a quedar otra.

Gracias por sus aportes!

15-07-2008 01:29
Visita su sitio web Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
pablo Sin conexión
ModdIng
Hombre de ingenio (?)
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.637
Agradecimientos dados: 0
Agradecimientos: 24 en 14 posts
Registro en: Apr 2008
Mensaje: #59
Re: Desafíos de programación
Pero LeaTex, justamente lo que puse es una solución alternativa a combinatoria... o sea, aplicar combinatoria es algo MUY FEO xD.

Fijate el código que te di en verde... sólo necesitás pasar eso a Smalltalk, y no es dificil. No lo hago porque no me acuerdo casi la sintaxis, pero creo que si lo lees no se te complica pasarlo. Igual, para entender bien como funciona eso capaz necesites haber cursado Gestión de Datos, ya que mucho de lo que puse en el post está tomado de ahí e intercalado con Discreta/Proba.

Suerte!
15-07-2008 02:03
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
brunodiaz Sin conexión
The Dark Knight
Bla
**********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 7.707
Agradecimientos dados: 92
Agradecimientos: 384 en 135 posts
Registro en: May 2008
Mensaje: #60
Re: Desafíos de programación
pablo escribió:Pero LeaTex, justamente lo que puse es una solución alternativa a combinatoria... o sea, aplicar combinatoria es algo MUY FEO xD.

Fijate el código que te di en verde... sólo necesitás pasar eso a Smalltalk, y no es dificil. No lo hago porque no me acuerdo casi la sintaxis, pero creo que si lo lees no se te complica pasarlo. Igual, para entender bien como funciona eso capaz necesites haber cursado Gestión de Datos, ya que mucho de lo que puse en el post está tomado de ahí e intercalado con Discreta/Proba.

Suerte!

por lo que lei algo me dice que cursaste la parte de algoritmos con reinosa xP
habia momentos que me parecia estar escuchandolo al chabon
15-07-2008 02:10
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)