[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