Ver Mensaje Individual
  #111 (permalink)  
Antiguo 16/12/2014, 11:17
Pantaláimon
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 18 años, 5 meses
Puntos: 32
Respuesta: Petando la pila. Problemas y retos usando recursividad.

Buenas!

Disculpad mi ausencia. Estos días me ha sido complicado pasar por aquí y no he podido publicar nuevos problemas. Este viernes publico dos más.

Aquí tenéis el enlace de momento sólo con los códigos de esVampiro actualizado:
https://github.com/xgbuils/retos-c_c...nges/esVampiro

La versión de código de un usuario de un desafío en concreto esta en:
Código BASH:
Ver original
  1. /challenges/{nombre_desafio}/users/{nombre_usuario}/{numero_version}/src/{usuario_version}.c
Los tests aplicados a un desafío están en:
Código BASH:
Ver original
  1. challenges/{nombre_desafio}/tests/test{numero}.c

Los tiempos los calculo en Ubuntu con el comando time y sumando el tiempo de usario + el de sistema. En principio si son programas de un sólo hilo debería ser una medida correcta. Si alguien sabe de alguna otra manera mejor de evaluar el tiempo de ejecución del programa sin tener las interferencias de otros procesos que se estén ejecutando a la vez, que me lo comenté e intento aplicarlo.

Próximamente cuando mejore los scripts para automatizar la compilación y generación de código (Al final he decidido crear los scripts en node.js) y sean más portables. Crearé un fichero readme.md con la explicación de cómo lo podéis compilar vosotros mismos y probar la ejecución de los códigos.

De momento para la gente que use algún derivado de UNIX, use gcc y tenga instalado los comandos time y timeout y node.js y git.
Puede clonar el repositorio, instalar las dependencias con el comando:
Código BASH:
Ver original
  1. npm install
Y luego puede con los siguientes comandos:
- Generar códigos fuente (sólo requiere node):
Código BASH:
Ver original
  1. node make src
- Generar códigos fuente y binarios (requiere node y gcc):
Código BASH:
Ver original
  1. node make
- Generar códigos fuente, binarios, y mostrar resultados de los tests por pantalla (require node, gcc, time y timeout):
Código BASH:
Ver original
  1. node make ranking

Aplicando este último comando para el reto de los vampiros tenemos estos resultados:
Código BASH:
Ver original
  1. { test01:
  2.    [ { time: 8.49, user: 'eferion-01' },
  3.      { time: 8.7, user: 'eferion-02' },
  4.      { time: 9.62, user: 'hackmanc-01' },
  5.      { time: 0.56, user: 'kutcher-01' },
  6.      { time: 0.56, user: 'kutcher-02' },
  7.      { time: 7.58, user: 'leosansan-01' },
  8.      { time: 0.63, user: 'leosansan-02' },
  9.      { time: 0.6, user: 'pantalaimon-01' } ],
  10.   test02:
  11.    [ { time: 0, user: 'eferion-01' },
  12.      { time: 0, user: 'eferion-02' },
  13.      { time: 0, user: 'hackmanc-01' },
  14.      { time: 0, user: 'kutcher-01' },
  15.      { time: 0, user: 'kutcher-02' },
  16.      { time: 0, user: 'leosansan-01' },
  17.      { time: 0, user: 'leosansan-02' },
  18.      { time: 0, user: 'pantalaimon-01' } ],
  19.   test03:
  20.    [ { time: 59.49, user: 'eferion-01' },
  21.      { time: 59.51, user: 'eferion-02' },
  22.      { time: 59.03, user: 'hackmanc-01' },
  23.      { time: 0.73, user: 'kutcher-01' },
  24.      { time: 0.73, user: 'kutcher-02' },
  25.      { time: 11.5, user: 'leosansan-01' },
  26.      { time: 0.74, user: 'leosansan-02' },
  27.      { time: 0.74, user: 'pantalaimon-01' } ] }

A ver si estos días me pongo con los problemas que propuse. Me extraña que excepto eferion nadie haya tocado el problama del algoritmo de ordenación. Con de la de algoritmos que hay. La gracia para los que tuvimos que estudiarlos, es aplicar alguno pero de manera recursiva.

Un saludo!

PD.: Por cierto, leosan, si me pasas el código de los vampiros no recursivo pero sin printfs y puts y siguiendo un estándar estricto (recuerdo que te tuve que cambiar el itoa por un sprintf), lo podría colgar y pruebo si funciona y que tan rapido es. Porque el que probé la otra vez que modifiqué yo me daba errores de ejecución. Quizá toqué algo que no debía.
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 16/12/2014 a las 11:23