در شهر انگوتستان دادهها تنها به وسیلهی JSON منتقل میشود. برای نمایش دادهی یک جدول در این شهر، به ازای هر سطر، یک فایل JSON ذخیره میشود؛ در فایل JSON مربوط به هر سطر، به ازای هر ستون، شماره ستون به عنوان key
و مقدار موجود در آن سطر و ستون، به عنوان value
ذخیره میشود.
برای مثال جدول زیر را در نظر بگیرید:
ستون اول | ستون دوم | ستون سوم |
---|---|---|
۳ | ۱ | ۴ |
۱ | ۳ | ۱۳ |
۱ | ۲ | ۳ |
این جدول در شهر انگوتستان به شکل سه فایل JSON ذخیره میشود، فایل مربوط به هر سطر، به ترتیب به شکل زیر میشود:
سجاد که از اهالی قانونشکن شهر انگوتستان میباشد میخواهد برعکس کارهای بالا را انجام دهد و با گرفتن تمامی فایلهای JSON مربوط به یک جدول، آن را به صورت یک فایل CSV نمایش دهد. او برای این کار، دقیقا برعکس کارهای بالا را انجام میدهد؛ البته چون فقط میخواهد جدول را ذخیره کند از index
و header
در CSV استفاده نمیکند.
اما او هر جدولی را دوست ندارد و برای این که جدول بهتر شود؛ ابتدا مقادیر مربوط به هر سطر را از کوچک به بزرگ مرتب میکند؛ سپس سطر ام را بار شیفت دوری میدهد (یعنی سطر اول هیچ تغییری نمیکند)؛ در واقع خانه موجود در سطر ام و ستون ام مقدار خانه سطر و ستون را به خود میگیرد (اگر مقدار عبارت گفته شده برابر با صفر بود، در نظر گرفته میشود).
برای مثال جدول زیر را در نظر بگیرید:
ستون اول | ستون دوم | ستون سوم |
---|---|---|
۳ | ۱ | ۴ |
۱ | ۳ | ۱۳ |
۱ | ۲ | ۳ |
اگر سطرهای این جدول را مرتب کنیم به صورت زیر درمیآید:
ستون اول | ستون دوم | ستون سوم |
---|---|---|
۱ | ۳ | ۴ |
۱ | ۳ | ۱۳ |
۱ | ۲ | ۳ |
حال اگر هر سطر را با توجه به روش داده شده تغییر دهیم سطر اول تغییری نمیکند؛ ولی سطر دوم، یک شیفت به سمت راست میخود و سطر سوم دو شیفت به سمت راست میخورد و جدول نهایی به شکل زیر درمیآید:
ستون اول | ستون دوم | ستون سوم |
---|---|---|
۱ | ۳ | ۴ |
۳ | ۱۳ | ۱ |
۳ | ۱ | ۲ |
بررسی دقیقتر:
حال سجاد از شما میخواهد برایش یک تابع به نام process
بنویسید که به عنوان ورودی یک لیست از نام فایلهای JSON بگیرد (دقت کنید که فایلهای JSON در این لیست به ترتیب هستند؛ یعنی فایل مربوط به سطر در جایگاه در لیست وجود دارد)، و جدول نهایی را در فایلی به نام ans.csv
ذخیره کند.
تضمین میشود که جدول ورودی داده شده مربعی است و در آن اعداد صحیح قرار دارد.
پروژه اولیه را از این لینک دانلود کنید. شما باید تابع process
در فایل solution.py
را کامل کنید.
اگر در کنار فایل solution.py
فایلهای JSON پروژه اولیه وجود داشته باشد، باید خروجی زیر از تابع گرفته شود:
int
تبدیل کنید).فایل کامل شده solution.py
را ارسال کنید؛ همچنین برای استفاده از کتابخانههای مختلف میتوانید همراه فایل ارسالی، فایلی به نام python_requirements.txt
در ZIP خود بگذارید که در آن نام کتابخانههای مورد نیاز و شماره نسخهی آنها به فرمت زیر در آن موجود باشد: (اگر شماره نسخه را ننویسید آخرین نسخهی آن کتابخانه نصب میشود)
در نهایت یک فایل ZIP حاوی دو فایل خواسته شده را آپلود کنید.