Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 26, 2012 10:42:14

Seganapa
От: Новороссийск
Зарегистрирован: 2012-07-31
Сообщения: 139
Репутация: +  0  -
Профиль   Отправить e-mail  

Алгоритм решения задачки

Всем привет!

5 (трое мужчин и две женщины) человек должны выйти из разных точек, время хода у всех разное.
В пункт назначения женщины должны прийти на 1 мин раньше мужчин.
600, 320, 400, 120, 250 - время хода до пункта назначения.

Вот мой код:

a = {600: {'sex':'male','name':'Joe'}, 320: {'sex':'female','name':'Sara'}, 400: {'sex':'female','name':'Kristina'}, 120: {'sex':'male','name':'Bob'}, 250: {'sex':'male','name':'Fredd'}}
print a 
# Подсчитываем разницу во времени прибытия и сортируем ее в обратном порядке
wait = list(a)
wait.sort(reverse=True)
print wait
wait = map(lambda x: x[0]-x[1], zip(wait, wait[1:]))+[0]
print wait
# Заносим в словарь разницу времени прибытия
for i, z in zip(sorted(a, reverse=True), wait):
    a[i]['wait']=z
#print a
#{600: {'wait': 200, 'name': 'Joe', 'sex': 'male'}, 320: {'wait': 70, 'name': 'Sara', 'sex': 'female'}, 400: {'wait': 80, 'name': 'Kristina', 'sex': 'female'}, 250: {'wait': 130, 'name': 'Fredd', 'sex': 'male'}, 120: {'wait': 0, 'name': 'Bob', 'sex': 'male'}})
for i in sorted(a, reverse=True):
    print '%s ушел(ла)'   %(a[i]['name'])
    time.sleep(a[i]['wait'])

Но у меня получается, что все придут одновременно. Как же сделать, чтобы женщины пришли раньше? Не соображу как сделать условие и оттяжку по времени, в разных потоках их запускать что ли?…

PS: В приведенном коде я сначала сортирую в обратном порядке время хода, затем вычисляю разницу между отрезками времени хода каждого человека, затем через time.sleep() выдерживаю паузу между запусками… Может есть какой-то другой способ? Я додумался только до этого…



—————————————————————–
Изучаю и параллельно использую Python 2.7

Отредактировано Seganapa (Сен. 26, 2012 12:11:18)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version