در شهر انگوتستان دادهها تنها به وسیلهی [*JSON*](https://en.wikipedia.org/wiki/JSON) منتقل میشود. برای نمایش دادهی یک جدول در این شهر، به ازای هر سطر، یک فایل *JSON* ذخیره میشود؛ در فایل *JSON* مربوط به هر سطر، به ازای هر ستون، شماره ستون به عنوان `key` و مقدار موجود در آن سطر و ستون، به عنوان `value` ذخیره میشود.
<details class="green">
<summary>
مثال ذخیره جدول به صورت *JSON*
</summary>
برای مثال جدول زیر را در نظر بگیرید:
| ستون اول | ستون دوم | ستون سوم |
| :-----------: | :-----------: | :-----------: |
| ۳ | ۱ | ۴ |
| ۱ | ۳ | ۱۳ |
| ۱ | ۲ | ۳ |
این جدول در شهر انگوتستان به شکل سه فایل *JSON* ذخیره میشود، فایل مربوط به هر سطر، به ترتیب به شکل زیر میشود:
```json
{"1": "3", "2": "1", "3": "4"}
```
```json
{"1": "1", "2": "3", "3": "13"}
```
```json
{"1": "1", "2": "2", "3": "3"}
```
</details>
سجاد که از اهالی قانونشکن شهر انگوتستان میباشد میخواهد برعکس کارهای بالا را انجام دهد و با گرفتن تمامی فایلهای *JSON* مربوط به یک جدول، آن را به صورت یک فایل [*CSV*](https://en.wikipedia.org/wiki/Comma-separated_values) نمایش دهد. او برای این کار، دقیقا برعکس کارهای بالا را انجام میدهد؛ البته چون فقط میخواهد جدول را ذخیره کند از `index` و `header` در *CSV* استفاده نمیکند.
اما او هر جدولی را دوست ندارد و برای این که جدول بهتر شود؛ ابتدا مقادیر مربوط به هر سطر را از کوچک به بزرگ مرتب میکند؛ سپس سطر $i$ام را $i - 1$ بار شیفت دوری میدهد (یعنی سطر اول هیچ تغییری نمیکند)؛ در واقع خانه موجود در سطر $i$ام و ستون $j$ ام مقدار خانه سطر $i$ و ستون
$(i+j - 1) \mod n$
را به خود میگیرد (اگر مقدار عبارت گفته شده برابر با صفر بود، $n$ در نظر گرفته میشود).
<details class="green">
<summary>
مثال عملیات روی جدول
</summary>
برای مثال جدول زیر را در نظر بگیرید:
| ستون اول | ستون دوم | ستون سوم
| :-----------: | :-----------: | :-----------: |
| ۳ | ۱ | ۴ |
| ۱ | ۳ | ۱۳ |
| ۱ | ۲ | ۳ |
اگر سطرهای این جدول را مرتب کنیم به صورت زیر درمیآید:
| ستون اول | ستون دوم | ستون سوم |
| :-----------: | :-----------: | :-----------: |
| ۱ | ۳ | ۴ |
| ۱ | ۳ | ۱۳ |
| ۱ | ۲ | ۳ |
حال اگر هر سطر را با توجه به روش داده شده تغییر دهیم سطر اول تغییری نمیکند؛ ولی سطر دوم، یک شیفت به سمت راست میخود و سطر سوم دو شیفت به سمت راست میخورد و جدول نهایی به شکل زیر درمیآید:
| ستون اول | ستون دوم | ستون سوم |
| :-----------: | :-----------: |:-----------: |
| ۱ | ۳ | ۴ |
| ۳ | ۱۳ | ۱ |
| ۳ | ۱ | ۲ |
بررسی دقیقتر:
```
inputs:
3 1 4
1 3 13
1 2 3
-----------------
sort:
1 3 4
1 3 13
1 2 3
---------------
rotate:
1 3 4 (no rotation)
3 13 1 (one left rotation)
3 1 2 (two left rotation)
```
</details>
حال سجاد از شما میخواهد برایش یک تابع به نام `process` بنویسید که به عنوان ورودی یک لیست از نام فایلهای *JSON* بگیرد (دقت کنید که فایلهای *JSON* در این لیست به ترتیب هستند؛ یعنی فایل مربوط به سطر $i$ در جایگاه $i-1$ در لیست وجود دارد)، و جدول نهایی را در فایلی به نام `ans.csv` ذخیره کند.
تضمین میشود که جدول ورودی داده شده مربعی است و در آن اعداد صحیح قرار دارد.
# پروژه اولیه
پروژه اولیه را از [این لینک](/contest/assignments/21629/download_problem_initial_project/76086/) دانلود کنید. شما باید تابع `process` در فایل `solution.py` را کامل کنید.
# مثال
اگر در کنار فایل `solution.py` فایلهای *JSON* پروژه اولیه وجود داشته باشد، باید خروجی زیر از تابع گرفته شود:
```python
>>> from solution import process
>>> process(['sample1.json', 'sample2.json'])
>>> with open('ans.csv', 'r') as f:
... print(f.readlines())
...
['1,3\n', '3,1\n']
```
# نکات
+ دقت کنید که در جداول مثال، ستون اول، به علت فارسی بودن، سمت راست جدول است و اگر *CSV* را به طور عادی باز کنید باید ترتیب ستونهای جدول برعکس شود و ستون اون در سمت چپ قرار گیرد.
+ توجه کنید که مقادیر را باید به صورت عددی مرتب کنید؛ یعنی عدد ۲ از عدد ۱۷ کوچکتر است (یعنی باید اعداد را هنگام خواندن از فایل به `int` تبدیل کنید).
# آنچه باید آپلود کنید
فایل کامل شده `solution.py` را ارسال کنید؛ همچنین برای استفاده از کتابخانههای مختلف میتوانید همراه فایل ارسالی، فایلی به نام `python_requirements.txt` در *ZIP* خود بگذارید که در آن نام کتابخانههای مورد نیاز و شماره نسخهی آنها به فرمت زیر در آن موجود باشد: (اگر شماره نسخه را ننویسید آخرین نسخهی آن کتابخانه نصب میشود)
```
firstlib==1.2.3
secondlib==4.5.6
...
```
در نهایت یک فایل *ZIP* حاوی دو فایل خواسته شده را آپلود کنید.
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.