Nếu chúng ta có một danh sách, giả sử danh sách đó [9, 2, 4, 4, 5, 5, 7]
, chúng ta có thể thực hiện một trung bình di chuyển trên nó.
Lấy một cửa sổ nói, 3 phần tử, mỗi phần tử được thay thế bằng một cửa sổ như: [[9], [9, 2], [9, 2, 4], [2, 4, 4], [4, 4, 5], [4, 5, 5], [5, 5, 7]]
và sau đó lấy trung bình, chúng tôi nhận được [9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667]
.
Khá đơn giản cho đến nay. Nhưng một điều bạn có thể nhận thấy về điều này là việc lấy trung bình di chuyển "làm mịn" danh sách. Vì vậy, điều này đặt ra câu hỏi: một người phải lấy trung bình di chuyển bao nhiêu lần để làm cho danh sách "đủ mượt"?
Nhiệm vụ của bạn
Đưa ra một danh sách các số float, kích thước cửa sổ số nguyên và số float, xuất ra số lần người ta phải lấy trung bình di chuyển để có độ lệch chuẩn nhỏ hơn số float đó. Đối với những người không biết, độ lệch chuẩn đo lường mức độ không mượt của một tập hợp dữ liệu và có thể được tính theo công thức sau:
Ví dụ: bằng cách sử dụng danh sách trước đó của chúng tôi và số lượng tối đa .5
, chúng tôi nhận được các 8
lần lặp giống như thế này:
[9.0, 5.5, 5.0, 3.3333333333333335, 4.333333333333333, 4.666666666666667, 5.666666666666667]
[9.0, 7.25, 6.5, 4.6111111111111116, 4.2222222222222223, 4.1111111111111107, 4.8888888888888893]
[9.0, 8.125, 7.583333333333333, 6.1203703703703702, 5.1111111111111107, 4.3148148148148149, 4.4074074074074074]
[9.0, 8.5625, 8.2361111111111107, 7.2762345679012341, 6.2716049382716044, 5.1820987654320989, 4.6111111111111107]
[9.0, 8.78125, 8.5995370370370363, 8.024948559670781, 7.2613168724279831, 6.2433127572016458, 5.3549382716049374]
[9.0, 8.890625, 8.7935956790123466, 8.4685785322359397, 7.9619341563786001, 7.1765260631001366, 6.2865226337448554]
[9.0, 8.9453125, 8.8947402263374489, 8.7175997370827627, 8.4080361225422955, 7.8690129172382264, 7.141660951074531]
[9.0, 8.97265625, 8.9466842421124824, 8.8525508211400705, 8.6734586953208357, 8.3315495922877609, 7.8062366636183507]
và kết thúc với một stdev của 0.40872556490459366
. Bạn chỉ cần đầu ra 8
.
Nhưng có một nhược điểm:
Câu trả lời không phải là không âm! Nếu danh sách ban đầu đã thỏa mãn stddev tối đa, bạn phải xem bạn có thể "quay ngược" bao nhiêu lần và hoàn tác trung bình di chuyển và vẫn có danh sách thỏa mãn stddev tối đa. Vì chúng tôi đang cắt bớt các cửa sổ cho các n
điểm dữ liệu ban đầu và không bỏ các điểm đó, nên có đủ dữ liệu để đảo ngược trung bình di chuyển.
Ví dụ: nếu chúng tôi bắt đầu với danh sách [9.0, 8.99658203125, 8.9932148677634256, 8.9802599114806494, 8.9515728374598496, 8.8857883675880771, 8.7558358356689627]
(lấy từ ví dụ trước của chúng tôi với 3 trung bình di chuyển được thực hiện cho nó) và cùng kích thước cửa sổ và max stddev, bạn sẽ xuất ra -3
vì bạn có thể đảo ngược trung bình di chuyển nhiều 3
lần.
Bất kỳ định dạng I / O hợp lý là tốt.
Đây là mã golf để mã ngắn nhất tính theo byte thắng!
Các trường hợp thử nghiệm
[9, 2, 4, 4, 5, 5, 7], 3, .5 -> 8
[9, 2, 4, 4, 5, 5, 7], 3, .25 -> 9
[9.0, 8.99658203125, 8.9932148677634256, 8.9802599114806494, 8.9515728374598496, 8.8857883675880771, 8.7558358356689627], 3, .5 -> -3
[1000, 2, 4, 4, 5, 5, 7], 7, .25 -> 13
[1000.0, 999.98477172851563, 999.96956668760447, 999.95438464397, 999.90890377378616, 999.83353739825293, 999.69923168916694], 4, 7 -> -6