Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- np.random.seed(12345)
- def working_3_days_in_row(a):
- if a[-1] > 5: # макс.день суббота или вск
- return 0
- for i in range(1, len(a)):
- if a[i] != a[i - 1] + 1: # дни идут не подряд
- return 0
- return 1
- def count_fraction_weeks(n):
- m = np.random.randint(1, 8, n) # заказ в магазине - день от 1 до 7
- r_1 = np.random.randint(1, 8, n) # 1-й заказ в ресторане - день от 1 до 7
- r_2 = np.random.randint(1, 7, n) # 2-й заказ в ресторане - день от 1 до 6 (один день уже занят)
- r_2 = np.where(r_2 >= r_1, r_2 + 1, r_2) # прибавляем 1, если 2-й заказ в тот же или больший день, чем первый
- weeks = np.vstack([m, r_1, r_2]) # массив из 3 строк и n столбцов
- weeks = np.sort(weeks, axis=0) # сортируем по столбцам дни, чтобы удобнее проверять
- # массив с 1 (когда три рабочих дня подряд) и 0 (в остальных случаях)
- weeks_3 = []
- for i in range(weeks.shape[1]):
- weeks_3.append(working_3_days_in_row(weeks[:, i]))
- frac = sum(weeks_3) / len(weeks_3)
- print(f'Доля недель с заказами 3 раб.дн. подряд = {frac} для {n} экспериментов')
- count_fraction_weeks(10_000) # ~ 0.0615
- count_fraction_weeks(100_000) # ~ 0.0605
- count_fraction_weeks(1_000_000) # ~ 0.06119
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement