در شهر انگوتستان دادهها تنها به وسیلهی JSON منتقل میشود. برای نمایش دادهی یک جدول در این شهر، به ازای هر سطر، یک فایل JSON ذخیره میشود؛ در فایل JSON مربوط به هر سطر، به ازای هر ستون، شماره ستون به عنوان key
و مقدار موجود در آن سطر و ستون، به عنوان value
ذخیره میشود.
مثال ذخیره جدول به صورت JSON
برای مثال جدول زیر را در نظر بگیرید:
ستون اول | ستون دوم | ستون سوم |
---|---|---|
۳ | ۱ | ۴ |
۱ | ۳ | ۱۳ |
۱ | ۲ | ۳ |
این جدول در شهر انگوتستان به شکل سه فایل JSON ذخیره میشود، فایل مربوط به هر سطر، به ترتیب به شکل زیر میشود:
{"1": "3", "2": "1", "3": "4"}
{"1": "1", "2": "3", "3": "13"}
{"1": "1", "2": "2", "3": "3"}
سجاد که از اهالی قانونشکن شهر انگوتستان میباشد میخواهد برعکس کارهای بالا را انجام دهد و با گرفتن تمامی فایلهای JSON مربوط به یک جدول، آن را به صورت یک فایل CSV نمایش دهد. او برای این کار، دقیقا برعکس کارهای بالا را انجام میدهد؛ البته چون فقط میخواهد جدول را ذخیره کند از index
و header
در CSV استفاده نمیکند.
اما او هر جدولی را دوست ندارد و برای این که جدول بهتر شود؛ ابتدا مقادیر مربوط به هر سطر را از کوچک به بزرگ مرتب میکند؛ سپس سطر $i$ام را $i - 1$ بار شیفت دوری میدهد (یعنی سطر اول هیچ تغییری نمیکند)؛ در واقع خانه موجود در سطر $i$ام و ستون $j$ ام مقدار خانه سطر $i$ و ستون $(i+j - 1) \mod n$ را به خود میگیرد (اگر مقدار عبارت گفته شده برابر با صفر بود، $n$ در نظر گرفته میشود).
مثال عملیات روی جدول
برای مثال جدول زیر را در نظر بگیرید:
ستون اول | ستون دوم | ستون سوم |
---|---|---|
۳ | ۱ | ۴ |
۱ | ۳ | ۱۳ |
۱ | ۲ | ۳ |
اگر سطرهای این جدول را مرتب کنیم به صورت زیر درمیآید:
ستون اول | ستون دوم | ستون سوم |
---|---|---|
۱ | ۳ | ۴ |
۱ | ۳ | ۱۳ |
۱ | ۲ | ۳ |
حال اگر هر سطر را با توجه به روش داده شده تغییر دهیم سطر اول تغییری نمیکند؛ ولی سطر دوم، یک شیفت به سمت راست میخود و سطر سوم دو شیفت به سمت راست میخورد و جدول نهایی به شکل زیر درمیآید:
ستون اول | ستون دوم | ستون سوم |
---|---|---|
۱ | ۳ | ۴ |
۳ | ۱۳ | ۱ |
۳ | ۱ | ۲ |
بررسی دقیقتر:
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)
حال سجاد از شما میخواهد برایش این کار را انجام دهید.
شما باید تابعی به نام process
بنویسید که به عنوان ورودی یک لیست از نام فایلهای JSON بگیرد (دقت کنید که فایلهای JSON در این لیست به ترتیب هستند؛ یعنی فایل مربوط به سطر $i$ در جایگاه $i-1$ در لیست وجود دارد)، و جدول نهایی را در فایلی به نام ans.csv
ذخیره کند.
def process(json_files_paths_list):
pass
نمونه
اگر در کنار فایل solution.py
فایلهای JSON پروژه اولیه وجود داشته باشد، باید خروجی زیر از تابع گرفته شود:
>>> 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 حاوی دو فایل خواسته شده را آپلود کنید.
ارسال پاسخ برای این سؤال