Ver Mensaje Individual
  #54 (permalink)  
Antiguo 01/12/2014, 11:06
Avatar de HackmanC
HackmanC
 
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 2 meses
Puntos: 260
Sonrisa Respuesta: Petando la pila. Problemas y retos usando recursividad.

Hola,

Cita:
Iniciado por leosansan Ver Mensaje
... Notita::1:: HaxkmanC no me da como vampiro el "939658". ...
Buena observación leosansan, aunque no estoy completamente seguro, posiblemente yo no entendí bien el problema a resolver, así dejaré que sea Pantaláimon, por ser el arbitro, verifique esa información.

Mi forma de comprobar que funcionara fue la siguiente, primero hice la prueba con el número 123456, de esa forma puedo comprobar que realmente se estén haciendo todas las permutaciones posibles, si uso dígitos repetidos, como por ejemplo, 121212 no lo podía comprobar. Como en mi algoritmo imprime todas las multiplicaciones que realiza, extraje en una hoja de Microsoft Excel lo que imprime en pantalla mi programa, con un par de formulas concatené los números que se están multiplicando y lo metí en una base de datos (para mi era lo más fácil). En la base de datos hice una consulta que me devolviera la cantidad de registros distintos (distinct) y el resultado fue 720, todo usando el tipo de datos char para que no haya ajustes con los dígitos 0 u otros.

Es decir, con eso comprobé que realmente fueran 720 variaciones diferentes del número 123456, que según la formula de las permutaciones sin orden es de 6! = 720. Después, si es otro número no importa porque ya comprobé que las permutaciones fueran exactas, el hecho que el número sea otro no importaría en cualquier caso puesto que no se basa en el número para permutar, sino en las posiciones del vector de integer (cambia las mismas posiciones la misma cantidad de veces, mientras no encuentre el vampiro).

Por ese motivo es que no puedo estar seguro, según mi criterio el número 939658 no es vampiro, pero puede ser que yo no haya comprendido bien el problema o que realmente tenga algún error.

Siempre te agradezco mucho la observación, así lo voy a verificar.

Cita:
Iniciado por eferion Ver Mensaje
... La ventaja de usar un árbitro común es que todos los códigos corren en la misma plataforma, con los mismos recursos, se han compilado con la misma configuración, etc. Luego así ya si que existe un mecanismo que permite comparar los diferentes algoritmos. ....
Realmente es una muy buena idea, habrá que ver si Pantaláimon tiene los recursos necesarios, el tiempo, la dedicación, etc., aunque yo quería evitar eso, y por eso escribí que mi código no estaba optimizado ni especializado, aunque como podrán ver mas arriba, explico que para comprobarlo hice bastantes pruebas.

El problema en mi caso, principalmente es la legibilidad del código, si optimizo cualquiera de las propuestas el código va a ser incomprensible, inclusive para mi mismo (el lenguaje C es bastante obscuro en si mismo); mientras que como está actualmente es bastante claro y mas de algo podrá aprender alguien que tenga un nivel de conocimiento menor. Pero si se deciden a optimizar, con gusto participo, realmente es una parte de la programación que me agrada bastante.

Pero primero voy a corregir el problema que me reportó leosansan.

Saludos,

Última edición por HackmanC; 01/12/2014 a las 11:49 Razón: agregar char