Advertisement
pavel_777

count_fraction_weeks

Oct 9th, 2021
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.59 KB | None | 0 0
  1. import numpy as np
  2.  
  3. np.random.seed(12345)
  4.  
  5.  
  6. def working_3_days_in_row(a):
  7.     if a[-1] > 5:  # макс.день суббота или вск
  8.         return 0
  9.  
  10.     for i in range(1, len(a)):
  11.         if a[i] != a[i - 1] + 1:  # дни идут не подряд
  12.             return 0
  13.     return 1
  14.  
  15.  
  16. def count_fraction_weeks(n):
  17.     m = np.random.randint(1, 8, n)  # заказ в магазине - день от 1 до 7
  18.     r_1 = np.random.randint(1, 8, n)  # 1-й заказ в ресторане - день от 1 до 7
  19.     r_2 = np.random.randint(1, 7, n)  # 2-й заказ в ресторане - день от 1 до 6 (один день уже занят)
  20.     r_2 = np.where(r_2 >= r_1, r_2 + 1, r_2)  # прибавляем 1, если 2-й заказ в тот же или больший день, чем первый
  21.     weeks = np.vstack([m, r_1, r_2])  # массив из 3 строк и n столбцов
  22.     weeks = np.sort(weeks, axis=0)  # сортируем по столбцам дни, чтобы удобнее проверять
  23.  
  24.     # массив с 1 (когда три рабочих дня подряд) и 0 (в остальных случаях)
  25.     weeks_3 = []
  26.     for i in range(weeks.shape[1]):
  27.         weeks_3.append(working_3_days_in_row(weeks[:, i]))
  28.  
  29.     frac = sum(weeks_3) / len(weeks_3)
  30.     print(f'Доля недель с заказами 3 раб.дн. подряд = {frac} для {n} экспериментов')
  31.  
  32.  
  33. count_fraction_weeks(10_000)  # ~ 0.0615
  34. count_fraction_weeks(100_000)  # ~ 0.0605
  35. count_fraction_weeks(1_000_000)  # ~ 0.06119
  36.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement