✍️ حالا میتونیم دو سؤال جدا را به دو مرحله روشن تبدیل کنیم: کدام امتیازها پذیرفته میشن و از امتیازهای پذیرفتهشده چه گزارشی میخوایم؟ filter مرحله انتخاب است و reduce مرحله ساخت گزارش. این جداسازی معمولاً خواندن شرط و بررسی عددهای نهایی را سادهتر میکنه.
مثلاً برای امتیازهای [3,8,10] با حداقل هشت، داده میانی [8,10] میشه. بعد گزارش شامل تعداد دو و مجموع هجده است. اگر چیزی پذیرفته نشه، گزارش هنوز شکل ثابتی دارد: تعداد صفر و مجموع صفر. داشتن شکل ثابت باعث میشه مصرفکننده گزارش مجبور نباشه برای نبودن داده، نوع دیگری از خروجی را مدیریت کنه.
در این تمرین، مقدار برابر حداقل پذیرفته میشه و عددهای تکراری جداگانه حساب میشن. ورودی را مرتب یا تغییر نده؛ گزارش فقط نتیجه خواندن دادههاست. خطای رایج، استفاده از طول آرایه اصلی برای count در کنار جمع آرایه فیلترشده است. هر دو عدد گزارش باید از همان مجموعه پذیرفتهشده ساخته بشن تا با هم سازگار باشند.
فعالیت شما
summarizeScores(scores, minimum) را بنویس. scores آرایه اعداد متناهی و minimum عدد متناهی است. فقط امتیازهای >= minimum را حساب کن و {count,total} برگردان؛ ([3,8,10],8) => {count:2,total:18}. بدون پذیرفتهشده یا آرایه خالی => {count:0,total:0}. ورودی را تغییر نده. تابع کمکی آماده checkSummarizeScoresUnchanged فقط تغییر نکردن ورودی و، هرجا لازم است، تازه بودن خروجی را بررسی میکند؛ آن را تغییر نده.