[hm] [org] Autobús ida y vuelta desde Barcelona

Blackhold blackholdmailer en gmail.com
Lun Ago 23 18:20:17 CEST 2010


me ha salido un pequeño imprevisto y es posible que no pueda ir con el
bus del hackmeeting a la ida.

si alguien está interesado en coger el relevo...
. . . . . . . . . . . . .
Blackhold
http://marsupi.org
No atribueixis sentiments humans a les màquines, simplement no els agrada.
Sé ecológico y en los mails borra el texto que no interesa (firmado:
los administradores de la lista).



2010/8/23 d1d4c <d1d4c en aktivix.org>:
> Hola :)
>
> El 18/08/10 21:13, Blackhold escribió:
> .../
>>
>> no es la primera vez que monto transportes colectivos y supongo que no
>> será la última.
>
> Pues si te sirve de algo, he escrito[0] en pyhton lo que comentaba en este
> hilo.
>
> La salida que da, dada una lista (de hecho, un diccionario) de pasajeros[1]
> en un archivo de texto con el importe máximo que cada una estaría dispuesta
> a pagar, y dado el precio del hackbus (en el propio script), es esta:
>
> Precio del HackBus: 485.0
> Numero de pasajeros: 38
> Precio inicial del billete: 12.7631578947
> Precio final del billete: 15.6
> Suma en euros de los billetes de la clase A: 78.0
> suma en euros de lo que puede pagar la clase B: 407
>
> Clase A (pagaran el billete integro):
> ['alba', 'jose', 'josep', 'montse', 'ramon']
>
> Clase B (pagaran una parte del billete, el maximo que dijeron que estaban
> dispuestos a gastarse):
> [('ana', 11), ('baltasar', 11), ('carme', 14), ('carmen', 12), ('chema',
> 12), ('chus', 11), ('cristian', 12), ('cristina', 11), ('david', 11),
> ('gonzalo', 11), ('hector', 11), ('joana', 14), ('jordi', 14), ('juan', 14),
> ('julia', 15), ('leonor', 15), ('malen', 10), ('manolo', 10), ('manuela',
> 9), ('maria', 13), ('martin', 13), ('monica', 12), ('nacho', 11), ('nestor',
> 15), ('pep', 13), ('pepe', 12), ('raquel', 11), ('regina', 14), ('rosa',
> 12), ('rosenda', 15), ('ruben', 13), ('sergio', 12), ('xavier', 13)]
>
> Como ves, la condición de 44 personas a 11€ o no hay hackbus, no es
> estrictamente necesaria, pues otras opciones son posibles, como en el
> ejemplo que doy, donde los pasajeros podrían pasar de tu condición,
> organizarse por sí mismos e ir al Hackmeeting en ese bus, aun no habiendo
> llegando a ser 44 e incluso pudiendo pagar una de ellas 9€ (en el ejemplo,
> manuela).
>
> Es prácticamente mi primer script en python (y en cualquier lenguaje), así
> que disculpad si tiene fallos de estilo o lo que sea. Y seguro que se podría
> haber hecho mejor, con funciones, o de una manera más limpia... Cualquier
> comentario al respecto será bien recibido :)
>
>
> Saludos :)
>
> [0] cat calcula_precio_billete_HackBus.py
> #! /usr/bin/env python
>
> ## Calcula el precio del billete cuando no
> ## todas pueden pagarlo, viajando todas :)
> ## (suponiendo que el numero de plazas es igual
> ## o mayor que el de pasajeras)
>
> ## Nombres
> hackbus = 485.0
> total_a = 0
> total_b = 0
> n = 1
> repetir = True
>
> a = {}  ## Los que pagarian el billete integro
> b = {}  ## Los que solo una parte
> d = {}
>
>
> ## Lee el archivo y lo copia al diccionario 'a'
> for i in file('pasajeros.txt'):
>    c = i.split()
>    a[c[0]] = int(c[1])
>
> ## Calcula el precio inicial del billete
> billete = hackbus / len(a)
> precio_hackbus = hackbus
> billete_inicial= billete
>
> ## Si a alguien no le llega para el billete, lo copia
> ## al diccionario 'b', recalcula el nuevo billete
> ## y repite la operacion si hace falta
> while repetir:
>    for i in a:
>        if a[i] < billete:
>            d[i] = a[i]
>            hackbus -= a[i]
>            billete = hackbus / (len(a) - n)
>            n += 1
>    if d:
>        claves = d.keys()
>        for i in claves:
>            del a[i]
>            b[i] = d[i]
>            del d[i]
>        n = 1
>    else: repetir = False
>
> ## Suma el total de los valores del diccionario 'b',
> valores = b.values()
> for suma in valores: total_b += suma
> suma = 0
> total_a = 0
> valores = a.values()
> for suma in valores: total_a +=suma
>
> ## Ordena 'a' y 'b'
> claseA = a.keys()
> claseA.sort()
> claseB = b.items()
> claseB.sort()
>
> ## Imprime en la salida estantar
> print
> print "Precio del HackBus: " + str(precio_hackbus)
> print "Numero de pasajeros: " + str(len(a) + len(b))
> print "Precio inicial del billete: " + str(billete_inicial)
> print "Precio final del billete: " + str(billete)
> print "Suma en euros de los billetes de la clase A: " + str(billete *
> len(a))
> print "suma en euros de lo que puede pagar la clase B: " + str(total_b)
> print
> print "Clase A (pagaran el billete integro):"
> print claseA
> print
> print "Clase B (pagaran una parte del billete, el maximo que dijeron que
> estaban dispuestos a gastarse): "
> print claseB
> print
>
>
>
> [1] cat pasajeros.txt
> alba 50
> ana 11
> baltasar 11
> carme 14
> carmen 12
> chema 12
> chus 11
> cristian 12
> cristina 11
> david 11
> gonzalo 11
> hector 11
> joana 14
> jordi 14
> jose 20
> josep 16
> juan 14
> julia 15
> leonor 15
> malen 10
> manolo 10
> maria 13
> martin 13
> monica 12
> montse 20
> nacho 11
> nestor 15
> pep 13
> pepe 12
> ramon 16
> raquel 11
> regina 14
> rosa 12
> rosenda 15
> ruben 13
> sergio 12
> xavier 13
> manuela 9
>


Más información sobre la lista de distribución HackMeeting