2010/BusHMBcn/Script

De Hackmeeting

Este script calcula el precio final del billete cuando no todos los pasajeros puede pagar la misma cantidad. Lee la lista de pasajeros y la cantidad en euros que cada pasajero puede pagar, en un archivo de texto llamado pasajeros.txt con el siguente formato:

alba 50
ana 11
baltasar 11
carme 14
etc...
#! /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

## Ordena 'a' y 'b'
claseA = a.keys()
claseA.sort()
claseB = b.items()
claseB.sort()

## Imprime en la salida estantar
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
Herramientas personales
wiki-navigation
project-navigation