<prompt> Kwa kuzingatia mtiririko wa nambari kamili na saizi ya dirisha, hesabu wastani wa kusonga wa nambari zote kwenye dirisha la kutelezesha.Tekeleza darasa la MovingAverage: MovingAverageint size Huanzisha kitu kwa ukubwa wa dirisha size. double nextint val Hurejesha wastani wa kusonga wa thamani za ukubwa za mwisho za mtiririko.Mfano wa 1:Ingizo MovingAverage , ijayo , ifuatayo, ifuatayo, ifuatayo3, 1, 10, 3, 5Patonull, 1.0, 5.5, 4.66667, 6.0UfafanuziMovingAverage movingAverage new MovingAverage3;moveAverage.ijayo1; kurudi 1.0 1 1moveAverage.next10; kurudi 5.5 1 10 2moveAverage.ijayo3; kurudi 4.66667 1 10 3 3moveAverage.ijayo5; kurudi 6.0 10 3 5 3Vikwazo: 1 ukubwa 1000 -105 val 105 Angalau zaidi simu 104 zitapigiwa ijayo.  <response>: chatukutoka kwa makusanyo kuagiza dequedarasa la MovingAverage: def __init__binafsi, saizi: int: self.queue deque self.maxSize ukubwa self.sum 0.0 def nextself, val: int - kuelea: ikiwa lenself.queue self.maxSize: self.sum - self.queue.popleft self.queue.appendval self.sum val return self.sum lenself.queuemaelezoKanuni hutumia foleni kudumisha dirisha la kuteleza la thamani za ukubwa za mwisho za mtiririko. Wakati thamani mpya imeongezwa, algorithm huangalia ukubwa wa foleni. Iwapo ni sawa na ukubwa, thamani ya zamani zaidi itaondolewa kutoka sehemu ya mbele ya foleni kwa kusasisha jumla na kuichomoza. Kisha, thamani mpya huongezwa nyuma ya foleni, na jumla inasasishwa. Wastani hurudishwa kwa kugawanya jumla na idadi ya thamani zilizopo kwenye foleni. Utata wa wakati wa chaguo za kukokotoa ifuatayo ni O1. 