< Zpět na seznam úloh

P2 Fronta na úřadě

function validator(result, dataset) {
  return Math.round(dataset.out - result) === 0.0;
}
var datasets = [
  {argv: [1, 20, 8*60], out: 0.0},
  {argv: [2, 20, 8*60], out: 0.41},
  {argv: [10, 20, 8*60], out: 5.31},
  {argv: [20, 20, 8*60], out: 21.75},
  {argv: [100, 10, 10*60], out: 203.40},
  {argv: [100, 3, 6*60], out: 5.50},
]
var names = ['pocet', 'doba_vyrizeni', 'pracovni_doba'];

Víme, že během dne se na obecní úřad dostaví všichni občané, kterým ten den vyprší platnost průkazu, a víme přesně, kolik minut úředníkovi zabere vyřízení jedné žádosti o průkaz. Navíc víme, že po celou pracovní dobu přicházejí občané se stejnou hustotou pravděpodobnosti. Otázkou je, jak dlouho budou občané průměrně čekat ve frontě, než přijdou na řadu.

Program dostává všechny zbývající parametry: počet občanů, kteří se během pracovní doby dostaví, počet minut, co trvá vyřízení žádosti každého z nich a délka pracovní doby v minutách. Na úřadě je otevřené jedno okénko s jedním úředníkem, který neúnavně pracuje po celou pracovní dobu. Nejen to, bude pracovat přesčas tak dlouho, co bude potřeba pro vyřízení všech lidí zbývajících večer ve frontě.

Průměrná doba čekání je prostě součet, jak dlouho čekal každý z občanů, dělený jejich počtem. Doba na vyřízení žádosti se do toho nepočítá, jde opravdu jen o čekání ve frontě. Výsledek musí být přesný na minuty.

Stejná pravděpodobnost příchodu po celou pracovní dobu lze vykládat třeba tak, že si každý občan náhodně vylosuje čas, kdy přijde. Pro náhodné losování času lze použít generátor random.uniform(0, pracovni_doba).

Testovací sady už mají správné výsledky.

import random

def main(pocet, doba_vyrizeni, pracovni_doba):
  return 0

Rada: nelámejte si hlavu s pravděpodobností, takovouhle úlohu nejde spočítat přesně. Rozumné je nechat v počítači uběhnout několik pracovních dnů podle zadání a zprůměrovat výsledky.

Druhá rada: kromě funkce random.uniform se vám může hodit taky list.sort.