谁先跑完
(每道题开头都有同一段:run_loop(tasks),tasks 是 [(名字, 要跑几步)];事件循环每一轮给还没完的每个任务推进一步,跑完就记完成。交回完成顺序(步数少的先完、相同按加入序);ready_count 一轮能推进几个。)
三个任务 a(3 步)、b(1 步)、c(2 步),问完成顺序:
def run_loop(tasks):
"""事件循环:tasks 是 [(名字, 要跑几步)]。每一轮给还没完的每个任务推进一步;某任务步数跑完就记它完成。
交回任务完成的顺序(步数少的先完;步数相同按加入顺序)——单线程、确定。"""
remaining = [[name, steps] for name, steps in tasks]
done = []
while remaining:
nxt = []
for t in remaining:
t[1] -= 1
if t[1] == 0:
done.append(t[0])
else:
nxt.append(t)
remaining = nxt
return done
def ready_count(tasks):
"""一轮里能被推进的任务数(还没完的都能推进一步)——就是任务个数。"""
return len(tasks)
print(",".join(run_loop([("a", 3), ("b", 1), ("c", 2)])))
全部评论