| فایل اولیهی سؤال را میتوانید از [این لینک](/contest/assignments/103147/download_problem_initial_project/355590/) دانلود کنید. |
|:------------------------------------------------------------------------:|
شرکت بازیسازی «معمار ذهن» مجموعهای بزرگ از پازلهای سودوکو را روی کاغذ و در قالب کتابهای چاپی منتشر کرده است. این پازلها با دستخطها و فونتهای گوناگون نوشته شدهاند و هزاران کاربر هر روز آنها را حل میکنند.
اما اخیراً تیم محصول با یک چالش جدی روبهرو شده است.
آرشیو شرکت شامل دهها هزار تصویر اسکنشده از جدولهای سودوکوست که هیچ نسخهی دیجیتالی از آنها وجود ندارد. کاربران میخواهند این پازلها را در نسخهی موبایل بازی حل کنند، اما برای این کار ابتدا باید محتوای هر تصویر به یک جدول عددی تبدیل شود و سپس پاسخ آن محاسبه گردد.
تیم فنی معتقد است راهحل در ترکیب دو مهارت است: **بینایی ماشین** برای خواندن دقیق اعداد از روی تصویر، و **الگوریتم حل** برای پر کردن جدول. اگر حتی یک عدد اشتباه خوانده شود، کل پازل خراب میشود.
اینجا جایی است که شما وارد میشوید.
## مأموریت شما
شما بهعنوان مهندس بینایی ماشین به این پروژه دعوت شدهاید. مأموریت شما ساختن سامانهای است که تصویر یک جدول سودوکو را دریافت کند، اعداد داخل آن را بهدرستی تشخیص دهد و در نهایت جدول کامل و حلشده را برگرداند.
## نمونهی تصویر ورودی
هر ورودی یک تصویر از جدول سودوکوست، مشابه نمونهی زیر:

## ساختار دیتاست
پوشهی اولیهی پروژه شامل دو بخش زیر است:
```
data/
├── train/
│ ├── images/ ← تصاویر جدولهای سودوکو
│ ├── puzzles/ ← اعداد اولیهی هر جدول (CSV)
└── test/
└── images/ ← فقط تصاویر (بدون برچسب)
```
### پوشهی `train`
این بخش برای آموزش مدل شماست و برای هر پازل دو فایل همنام (با پسوند متفاوت) دارد:
| مسیر | توضیح |
|:----:|-------|
| `train/images/lock_XX.jpg` | تصویر جدول سودوکو |
| `train/puzzles/lock_XX.csv` | اعداد موجود در تصویر؛ خانههای خالی با `0` مشخص میشوند |
نمونهی فایل `puzzles/lock_01.csv` (اعدادی که در تصویر دیده میشوند):
```
0,8,3,0,0,7,0,6,0
9,1,5,0,0,2,7,4,8
2,0,7,1,0,0,0,0,0
1,9,0,4,0,0,0,3,0
6,5,2,8,0,0,0,7,0
0,0,4,0,0,1,5,0,0
5,0,1,0,4,6,0,9,7
8,4,0,7,0,9,3,0,0
7,2,9,0,0,0,0,0,6
```
از این دادهها میتوانید هم برای آموزش مدل تشخیص اعداد استفاده کنید و هم صحت خواندن مدل خود را با مقایسهی خروجی با فایل `puzzles` بسنجید.
### پوشهی `test`
این بخش فقط شامل تصاویر است و هیچ برچسبی ندارد. شما باید این تصاویر را خودتان بخوانید و برای هرکدام خروجی نهایی تولید کنید.
## قوانین و محدودیتها
+ **ممنوعیت مدلهای آماده:** استفاده از هرگونه مدل از پیشآموزشدیده (Pre-trained) اکیداً ممنوع است. باید مدل خود را از صفر روی دادههای `train` آموزش دهید.
+ حل جدول باید بر اساس قوانین استاندارد سودوکو باشد: اعداد ۱ تا ۹ بدون تکرار در هر سطر، ستون و مربع $3 \times 3$.
## نحوهی ارسال (Submission)
خروجی نهایی شما باید یک فایل فشرده با نام `submission.zip` باشد که ساختار زیر را دارد:
```
submission.zip
├── notebook.ipynb ← نوتبوک کامل کد شما
└── submission.csv ← فایل خروجی نهایی
```
+ `notebook.ipynb`: نوتبوکی که تمام مراحل آموزش مدل و تولید خروجی در آن قرار دارد.
+ `submission.csv`: یک فایل CSV که هر ردیف آن یک جدول سودوکوی حلشده است:
+ **ستون اول**: نام فایل تصویر (مثلاً `lock_01`)
+ **ستونهای ۲ تا ۸۲**: ۸۱ عدد جدول سودوکوی حلشده، به ترتیب از سلول اول (بالا سمت چپ) تا سلول آخر (پایین سمت راست)، سطر به سطر
\**نمونهی ساختار `submission.csv`:**
```
puzzle_id,1,2,3,4,5,6,7,8,9,…,81
lock_01,4,8,3,9,5,7,2,6,1,9,1,5,3,6,2,7,4,8,…,6
lock_02,7,2,6,4,9,3,8,1,5,3,1,5,7,2,8,9,4,6,…,2
...
```
هر ردیف شامل ۸۲ مقدار است: یک شناسه و ۸۱ عدد از جدول 9×9 حلشده.
## معیار ارزیابی
معیار اصلی **دقت (Accuracy)** در سطح کل پازل است. یک پازل زمانی «درست» شمرده میشود که هر دو شرط زیر برقرار باشند:
1. **تشخیص درست اعداد:** تمام اعداد موجود در تصویر باید بهدرستی خوانده شده باشند. اعداد خانههای پرشده در خروجی شما باید دقیقاً همان اعدادی باشند که در تصویر قرار دارند. حتی یک عدد اشتباه، کل پازل را نامعتبر میکند.
2. **راهحل معتبر:** جدول خروجی باید یک راهحل معتبر سودوکو باشد که با اعداد اولیهی خواندهشده سازگار است.
\**دربارهی راهحلها:** یک پازل سودوکو ممکن است بیش از یک راهحل معتبر داشته باشد. لازم نیست خروجی شما دقیقاً با مرجع یکسان باشد. **هر راهحل متفاوتی مورد قبول است**، به شرطی که اعداد اولیه بهدرستی تشخیص داده شده باشند و پاسخ نهایی از نظر قوانین سودوکو کاملاً معتبر باشد.
امتیاز نهایی به شکل زیر محاسبه میشود:
$$
\mathrm{Accuracy} = \frac{\text{Correctly recognized initial digits} \text{ AND } \text{Valid solution (Sudoku rules)}}{\text{Total number of Sudoku puzzles}}
$$
$$
\mathrm{Score} = 100 \times \mathrm{Accuracy}
$$
از آنجا که یک عدد اشتباه در مرحلهی تشخیص، کل پازل را نامعتبر میکند، دقت مدل بینایی ماشین شما مهمترین عامل در امتیاز نهایی است.
\**حداقل ها:** حداقل نمره قبولی برای این پروژه 30 تعیین شده است.
در طول مسابقه، برای جلوگیری از اورفیت، ارزیابی تنها روی ۳۰٪ از دادهٔ تست انجام میشود و امتیاز موقت شما بر همین اساس نمایش داده میشود. در پایان مسابقه، پاسخهای ارسالی روی ۱۰۰٪ دادهٔ تست داوری خواهند شد و امتیاز نهایی از این ارزیابی کامل به دست میآید.