پنجرهی زمینه12 از 37
این تمرین اختیاری است. برای کسانی است که کمی پایتون بلدند، و چیزی را تمرین میکند که درس «[هر آنچه مدل میبیند](everything-it-can-see)» گفت: همهی آنچه در درخواست هست، بهاضافهی پاسخ، باید در پنجرهی زمینه جا شود.
برنامهی شما اندازهی یک پنجرهی زمینه و تعدادِ توکنهای چیزهایی را میگیرد که در یک درخواست میروند:
``text
window 950
reply 200
fixed system 300
fixed tools 150
fixed notes 100
message 100
message 100
message 100
message 50
`
- window اندازهی پنجرهی زمینه است، بر حسب توکن.
- reply تعدادِ توکنهایی است که باید برای پاسخِ مدل خالی بماند.
- هر خطِ fixed چیزی است که همیشه در زمینه هست (دستورهای برنامه، شرح ابزارها، یادداشتها) و نمیشود کنارش گذاشت.
- هر خطِ message یک پیام از گفتوگوست، **قدیمیترین اول**. آخرین خط تازهترین پیام است: همان پرسشی که مدل باید الان به آن پاسخ دهد.
تابعِ messages_to_drop را بنویسید. این تابع برمیگرداند چند تا از **قدیمیترین** پیامها باید حذف شوند تا بخشِ ثابت، پیامهایی که میمانند و پاسخ، همه با هم در پنجره جا شوند:
- اگر همهچیز از قبل جا میشود، 0 برگردانید؛
- وگرنه پیامها را از قدیمیترین، یکییکی، حذف کنید تا جا شود، و برگردانید چند تا حذف کردید؛
- تازهترین پیام را هرگز حذف نکنید: اگر حتی وقتی فقط تازهترین پیام مانده جا نمیشود، -1 برگردانید.
کدی که ورودی را میخواند و پاسخ را چاپ میکند از قبل نوشته شده است. برای نمونهی بالا باید این را چاپ کند:
`text
drop the oldest 2 message(s)
room left for the reply: 250
``
برنامههای واقعی زیرکترند (بهجای حذف کردنِ پیامهای قدیمی خلاصهشان میکنند، همانطور که در درس «[وقتی پنجره پر میشود](when-the-window-fills-up)» میبینید)، ولی حسابی که زیرِ کار است همین است.
ورود برای امتحان این تمرین.