Portal    Foro    Buscar    FAQ    Registrarse    Conectarse


Publicar nuevo tema  Responder al tema 
Página 1 de 1
 
 
Asado Entre Amigos
Te parece un reto interesante.
La encuesta terminó el Miercoles, 22 Abril 2015, 04:44

Si
No

Ver resultados
Autor Mensaje
Responder citando   Descargar mensaje  
Mensaje Asado Entre Amigos 
 
Hola. Tengo un rompedero de cabeza... para proponer...

Este problema no solo incluye un desafío de programación si no que se debe hacer un análisis del problema digamos un poco mas exhaustivo, para dar con las formulas necesarias antes de entrar a la programación. Ustedes dirán si es útil o no y si desean buscar una solución.

Lo explicare con un ejemplo, luego daré los requisitos que debe cumplir la solución.

Amigos se juntan a comer. Pedro trae el pan valuado en $20, Carlos trae la carne por un valor de $130, Alfredo trae las bebidas por $120  Roberto la ensalada con un valor de $50 y yo caigo de prepo  y no puse ni un peso.... Pero eso no esta permitido...

Entonces.

DETALLE
Cantidad de personas       5
Total gastado                    320
Ponen cada uno                64

y...

PAGOS
pedro a alfredo $:44
roberto a alfredo $:12
roberto a carlos $:2
yo a carlos $:64

Y asi todos contentos...

El software debe aceptar una cantidad n (mínimo 2 sin limite máximo) participantes.

Estos amigos no se perdonan ni los centavos... así que nada de redondeos.

Debe presentar en pantalla un detalle y las formas de pagos distributivas.


Espero que les resulte interesante y lo suficientemente desafiante como para emprender una solución...

Si desean aceptar la misión, muy bien...

Este mensaje no se autodestruira, ha menos que el administrador lo borre.


P/D: Alguien dirá que no tiene nada que ver con la programación, pero yo creo que si pues es un problema de la vida real que se le puede aplicar poder computacional para que los amigos no se peleen en las reuniones.
 




===================
No mames wey...
 
osunaosuna - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Asado Entre Amigos 
 
OsunaOsuna:

Citar:
para dar con las formulas necesarias antes de entrar a la programación

Creo que no se puede resolver con formulas, sino usando un algoritmo....

Citar:
no tiene nada que ver con la programación, pero yo creo que si pues es un problema de la vida real

Se podría usar algoritmos voraces  ( http://jsbsan.blogspot.com.es/2014/...la-mochila.html ) o incluso algoritmos genéticos (de esto no tengo hecho ningun ejemplo...pero si se que se han publicado en la revista de gambas en ingles...)


Para "comprender" el problema me he hecho este esquema, seguro que tambien os sirve para dar una pista de lo que hay que hacer:

 esquema_de_reparto
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Asado Entre Amigos 
 
Hola jsbsan....

Citar:
Creo que no se puede resolver con formulas, sino usando un algoritmo....


Pues estas en lo correcto y lo reconozco, pero no creí que la "pragmática" fuese tan importante, el cual fue otro error mio, en adelante tratare de mantener una retorica profesional.

La verdad que el gráfico ayuda en la comprensión, la cual es evidente que la parte final es la mas compleja, pero no tanto; creo.

Empero al parecer mi reto no tuvo buena aceptación, quizás muy fácil... en el futuro creare uno mas complejo y emocionante si me dan los tiempos.
 




===================
No mames wey...
 
osunaosuna - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Asado Entre Amigos 
 
OsunaOsuna:

Citar:
quizás muy fácil...

No, todo lo contrario, es dificil. El hacer un programa que sea capaz de resolver cualquier tipo de situación similar a la que expones (con variantes como número de personas, importes de gastos y  la cantidad que ponen cada uno),y averiguar cual es el reparto "óptimo", es complicado. Porque puede que no hay una solución única, sino varias, o en el peor de los casos, que hay un conjunto de soluciones mas o menos "optimas"

Este tipo de algoritmo se usan mucho para la optimización de cortes de materiales  http://users.dsic.upv.es/grupos/gps/papers/TTIA%2797.pdf


Citar:
Formulas y Algoritmos: tratare de mantener una retorica profesional.

Es que no es lo mismo una fórmula, que un algóritmo.

Saludos
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Asado Entre Amigos 
 
jsbsan

hola, definitivamente tienes razón sobre las diferencias abismales entre formula y algoritmo, es por eso que dije que debería fijarme mas en el sentido pragmático de lo escrito tambien, no volverá a suceder. cambiando de tema, salvo tu, otro no ha comentado nada, lo tomate como un acto de discriminación  y me pondré a solucionarlo solo y publicare acá mi solución.

Acto seguido, no publicare mas retos de programacion.

Cambio y fuera, hasta que encuentre la solución.
 




===================
No mames wey...
 
osunaosuna - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Asado Entre Amigos 
 
OsunaOsuna:

Citar:
...lo tomate como un acto de discriminación y me pondré a solucionarlo solo y publicare acá mi solución.     Acto seguido, no publicare mas retos de programacion.


Hombre, no te tienes que molestar porque no hay haya muchos comentarios. Es un tema complicado.
Intentaré también el reto, y asi por lo menos, podemos comparar soluciones.
 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Asado Entre Amigos 
 
En los retos que pongo yo, nadie -casi-, se suma. Ahí tienes el reto del calendario, el reto de la encriptación, etc. etc.
No es una discriminación, es que no a todo el mundo le interesa todo y no todo el mundo tiene tiempo de dedicarle a todo.
 



 
shordi - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Asado Entre Amigos 
 
Osunaosuna:

Te adjunto mi solución. Lo que he hecho es "modelizar" la situación como si fuera real, y he pensado como se resolvería entre un grupo de amigos.

Osea:
La persona que no ha comprado nada de comida o bebida, tiene un saldo "positivo", que sabe que tiene que repartir entres las que tenga un saldo negativo.
Las personas que han comprado algo, pero tiene un valor de menos de 64 euros, tiene un saldo positivo (pero menor) y sabe que lo tiene que dar a las personas con saldo negativo.

Las personas que han comprado algo, pero su valor es mayor que 64 euros, tienen un saldo negativo, y solo pueden recibir dinero.

El objetivo es que el saldo de todas las personas quede a 0.


Para programar esto lo que uso es una clase persona, que incluye su nombre, dinero inicialmente gastado, comida que aporta y varias propiedades, entre ella el saldo.


Es saldo  para cada persona se calcula asi:
  personaTemporal.saldo = cantidadRepartir - personaTemporal.PagadoInicialmente

Y el algoritmo que he hecho, se encarga de si la persona tiene saldo, lo reparte al que tenga un saldo negativo. (osea le debemos entre todos).
y va informando de como se va haciendo el reparto en un textarea.


 reparto_del_asado

Como ves mi solución difere en la tuya, porque el sistema tiene varias soluciones de reparto.

He hecho que recorra dos veces el bucle, pero pienso que para optimizarlo, se debieran ordenar las personas, en orden decreciente de saldo, osea los que tengan dinero "a repartir" primero y los últimos los que tengan saldo negativo (dinero a recibir), así solo se recorrería el bucle una vez.


Public Sub repiteReparto()

  Dim b As Integer
  Dim a As Integer
  Dim cantidad As Float
  Dim personaTemporal As Persona
  Dim personaTemporalArepartir As Persona

  For b = 0 To (ArrayPersonas.count - 1)

    personaTemporal = ArrayPersonas[b]

    For a = 0 To ArrayPersonas.count - 1
      personaTemporalArepartir = ArrayPersonas[a]

      'es distinta persona?
      If personaTemporal = personaTemporalArepartir Then
        Continue
      Else
        'si tiene saldo negativo, y tengo dinero en mi saldo
        If personaTemporalArepartir.saldo <0> 0 Then
          'le doy dinero
          'cuanto le doy?
          'lo que le puedo dar es la cantidad de mi saldo: personaTemporal.saldo
          If (personaTemporalArepartir.saldo + personaTemporal.saldo) < 0 Then
            cantidad = personaTemporalArepartir.saldo + personaTemporal.saldo
            personaTemporalArepartir.saldo = cantidad
            TextAreaInforme.Text &= personaTemporal.nombre & " le da a " & personaTemporalArepartir.nombre & " la cantidad de: $" & Str$(personaTemporal.saldo) & "\n"
            personaTemporal.saldo = 0 'lo doy todo
          Else
            If (personaTemporalArepartir.saldo + personaTemporal.saldo) > 0 Then
              cantidad = personaTemporalArepartir.saldo + personaTemporal.saldo

              TextAreaInforme.Text &= personaTemporal.nombre & " le da a " & personaTemporalArepartir.nombre & " la cantidad de: $" & Str$(- personaTemporalArepartir.saldo) & "\n"
              personaTemporalArepartir.saldo = 0
              personaTemporal.saldo = cantidad
            Else
              If personaTemporalArepartir.saldo + personaTemporal.saldo = 0 Then

                TextAreaInforme.Text &= personaTemporal.nombre & " le da a " & personaTemporalArepartir.nombre & " la cantidad de: $" & Str$(personaTemporal.saldo) & "\n"
                personaTemporalArepartir.saldo = 0
                personaTemporal.saldo = 0
              Endif

            Endif

          Endif
        Endif

      Endif
    Next

  Next

End


RepartoAsado-0.0.1.tar.gz
Descripción: Algoritmo de reparto... sabiendo el dinero que has dado... 
Descargar
Nombre del archivo: RepartoAsado-0.0.1.tar.gz
Tamaño: 6.13 KB
Descargado: 80 veces
RepartoAsado-0.0.1.tar.gz
Descripción: Algoritmo de reparto... sabiendo el dinero que has dado... 
Descargar
Nombre del archivo: RepartoAsado-0.0.1.tar.gz
Tamaño: 6.13 KB
Descargado: 80 veces
RepartoAsado-0.0.1.tar.gz
Descripción: Algoritmo de reparto... sabiendo el dinero que has dado... 
Descargar
Nombre del archivo: RepartoAsado-0.0.1.tar.gz
Tamaño: 6.13 KB
Descargado: 80 veces

 




===================
Blog personal
Web: SoloGambas seleccion de articulos dedicados a Gambas
Visita el Curso de Gambas3 ¡¡¡Gratuito!!!
 
jsbsan - Ver perfil del usuarioEnviar mensaje privadoVisitar sitio web del usuario 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Asado Entre Amigos 
 
Hola jsbsan....

Yo estoy haciendo la mía, pero aun no la termino por falta de tiempo, pero lo he encarado de otra forma. Descargue tu código pero decidí no verlo aun, hasta que termine el mio, paro verme influenciado.

tambien he creado una clase que almacena los datos del participante  y se almacena en un array de esta clase, en la misma clase se almacenan los datos incluyendo el valor a reparttir.


Property Nombre As String
Private sNombre As String

Property Aporte As Long
Private lAporte As Long

Property Reparto As Long
Private lReparto As Long

Property tag As Long
Private lTag As Long


luego los separo por los valores de reparto los negativos que son los que pusieron de mas y deben recibir, y los positivos que son los que tienen que aportar...

luego realizo los calculosos buscando los mayores valores negativos y positivos, luego lo subo, cuando loo termine así nos comentamos mas...
 




===================
No mames wey...
 
osunaosuna - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Responder citando   Descargar mensaje  
Mensaje Re: Asado Entre Amigos 
 
shordi... jajaja no lo había visto a tu comentario... pero yo no estoy chillando solo estoy agitando un poco el caldero, pero sin malas intenciones, el reto de la encriptación, yo resolví uno de esos pero creo que era de otro wey...  si definitivamente era de otro, v3ctor el que había que descubrir la contraseña nada que ver con la criptografia... lo buscare y pondré manos a la obra pues. El de las fechas lo dejo pasar pues no me gustan.
 




===================
No mames wey...
 
osunaosuna - Ver perfil del usuarioEnviar mensaje privado 
Volver arribaPágina inferior
Mostrar mensajes anteriores:    
 
OcultarTemas parecidos
Tema Autor Foro Respuestas último mensaje
No hay nuevos mensajes Comparativa Entre VB Y Gambas anahaga General 2 Domingo, 13 Junio 2010, 01:06 Ver último mensaje
anahaga
No hay nuevos mensajes [Python] Diferencia Entre == E Is Shell Programación en otros lenguajes 4 Domingo, 10 Noviembre 2013, 11:44 Ver último mensaje
Shell
No hay nuevos mensajes Colisión Entre Objetos Shell General 2 Martes, 22 Marzo 2016, 14:34 Ver último mensaje
v3ctor
No hay nuevos mensajes Herencia Entre Clases Shell General 8 Lunes, 12 Febrero 2018, 14:25 Ver último mensaje
jsbsan
 

Publicar nuevo tema  Responder al tema  Página 1 de 1
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 
Lista de permisos
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario



  

 

cron