آموزش حل سودوکو: از آسان تا سخت و قاتل

توسط فرزاد در ۲۶ اردیبهشت ۱۳۹۱

محتوای این آموزش رو در قالب یک کتاب الکترونیکِ PDF، می‌تونید از اینجا دریافت کنید.

http://baghbagho.com/wp-content/uploads/2012/04/download.png

سودوکو، یه بازی قدیمی، فکری، جالب و سرگرم کنندست. با روش‌هایی که در ادامه یاد‌ می‌گیرید، می‌تونید از پس انواع سودوکو از ساده گرفته تا سخت و قاتل بربیاید.

تصویر فوق یک سودوکوی معمولی (Classic) رو نشون میده. دارای ۹ ستون عمودی و ۹ ردیف افقی، که توسط خطوط پررنگ تر به ۹ جعبه ۳ در ۳ تقیسم شدند.

به هر مربع ۳ در ۳ – که توسط خطوط پر رنگ تر احاطه شده – یک جعبه گفته میشه.

در ابتدا تعدادی از خونه ها دارای عدد هستند و وظیفه شما اینه که خونه های خالی رو پر کنید، طوری که هیچ عددی در یک ستون، ردیف و جعبه تکرار نشه.

شروع کار

با کمک دو روش ابتدایی این آموزش، یعنی کراس‌هچینگ و اسلایسینگ، به راحتی می‌تونید از پس اکثر سودوکو‌های آسان تا متوسط بربیاید.

سایر روش‌ها، که در بخش دوم این آموزش معرفی شدند، برای حل سودوکو‌‌های سخت‌تر مورد استفاده قرار می‌گیرند.

همونطور که می‌دونید، برای یادگیری روش‌های پیشرفته‌تر، ابتدا لازمه که روش‌های اصلی و پایه رو فرا بگیرید.

کراس‌هچینگ

ابتدایی ترین روش برای حل سودوکو کراس‌هچینگ (Crosshatching) نام داره. در این روش جدول رو جعبه به جعبه مورد بررسی قرار می‌دیم.  به سودوکوی زیر توجه کنید:

به اولین جعبه (بالا – سمت چپ) نگاه کنید. ۵ خونه‌ی خالی داره. تمام اعداد ۱ تا ۹ باید توی جعبه قرار بگیرن؛ بنابراین، ۱،۲،۳،۵ و ۹ اعدادی هستند که ما باید توی خونه های خالی قرار بدیم.

از عدد ۲ شروع می کنیم (فرقی نمی‌کنه شروع کار با چه عددی باشه).  با توجه به این قانون که «در هر ردیف و ستون هر عدد تنها یکبار میتونه تکرار بشه» به اطراف جعبه نگاه کرده، سپس ردیف و ستون هایی رو که عدد ۲ دارند، تو ذهنمون (یا با خط) از جعبه حذف می کنیم. نتیجه اینطور میشه:

کاملا مشخصه که عدد ۲ باید توی این یک خونه باقی مونده قرار بگیره.

به همین ترتیب می تونیم جایگاه عدد ۳ رو هم پیدا کنیم:

اینبار هم تنها یک خونه باقی موند و جایگاه عدد خیلی زود پیدا شد، اما همیشه هم در ابتدای کار به حواب نمی رسیم. برای مثال در مورد عدد ۵ نتیجه اینطور میشه:

تنها یک عدد در امتداد جعبه قرار داره و سه خونی خالی باقی موند. در مورد ۱ و ۹ نیز نتایج مشابهی به دست میاد. پس سراغ جعبه بعدی میریم.

از عدد ۳ شروع می کنیم، نتیجه زیر حاصل میشه:

همونطور که می بینید دو تا خونه خالی باقی موند. در این مورد لطفا به مطلب زیر توجه کنید:

در سودوکو اگر یکی از اعداد جعبه ای رو اشتباه قرار بدید، اعداد جعبه های مجاور نیز نادرست و یک زنجیره از اعداد اشتباه تشکیل میشه و پی بردن به اشتباه اولیه در چنین حالتی بسیار سخت خواهد بود. بنابراین فقط وقتی عددی رو بنویسید که از درست بودنش مطمئنید و اینکه هیچ‌وقت حدس نزنید.

اسلایسینگ

اسلایسینگ، تقریبا مشابه روش قبلی هست، با این تفاوت که در این روش به جای اینکه یه مربع تکی رو بررسی کنیم، به بررسی یه گروه سه تایی از جعبه‌ها می‌پردازیم.

مثلا در نمونه‌ی زیر، می‌خوایم عدد ۷ رو در سه جعبه‌ی سمت راستی قرار بدیم:

خب، با رسم خطوط به راحتی می‌تونیم جایگاه عدد ۷ رو در جعبه‌ی وسطی و سپس در بالایی مشخص کنیم.

اسلایسنیگ و کراس‌هچینگ اساسا مشابه هم هستن؛ اما در مجموع اسلایسینگ موثر‌تر واقع میشه.

*هروقت در استفاده از اسلایسینگ مشکل پیدا کردید و گیج شدید، کار رو با کراس‌هچینگ ادامه بدین.

با کمک این دو روش میشه بیشتر سودوکوهای آسان (و متوسط) رو حل کرد. فقط کافیه روش رو به صورت پیاپی به کار بگیرید و هر بار ببینید که چه اعداد تازه‌ای رو میشه در خونه‌ها قرار داد و به همین ترتیب سودوکو رو کامل کنید.

با کمی تمرین، کم‌کم متوجه میشید که لازم نیست کل سودوکو رو برای جای اعداد زیر و رو کنید و دستتون میاد که چه جعبه‌هایی قابلیت اضافه کردن عدد رو دارن.

… وقتی که نمیشه که بشه…!

در پازل‌های سخت، دیر یا زود؛ کراس‌هچینگ و اسلایسینگ به بن‌بست می‌خورن و کار به جایی می‌رسه که دیگه نمی‌تونید در هیچ‌یک از خونه‌ها عددی قرار بدید. اینجاست که لازمه به روش‌های دیگه رو بیارید.

*اسلایسینگ و کراس‌هچینگ، پیش‌نیاز روش‌های بعدی هستن و برای استفاده از اونها باید به این دو روش مسلط باشید.

مدادکاری

در این روش، به بررسی حالات مختلف یک خونه‌ی خالی می‌پردازیم؛ به اعدادی که ‌می‌تونن تو اون خونه قرار بگیرن. (این اعداد رو «کاندید» می‌نامیم.)

به جعبه‌ی بالا-چپِ سودوکوی اصلی نگاه کنید. مطابق روش مدادکاری، کاندیدا‌های هر خونه رو می‌نویسیم:

http://baghbagho.com/wp-content/uploads/2011/07/pencelling2.jpg

همونطور که می‌دونید، پیدا کردن این کاندیداها با کمک کراس‌هچینگ انجام می‌گیره.

به همین ترتیب، کاندیداهای سایر خونه‌های خالی رو هم داخلشون می‌نویسیم. فقط این مرحله رو با دقت کامل انجام بدید، چرا که انجام یک اشتباه، باعث ایجاد مشکلات زنجیره‌ای میشه!

*در خونه‌های یک کاندیدایی، عددِ خونه برابر عددِ کاندیداست.

نکته‌ی مهمی که پیوسته باید در روش مدادکاری رعایت بشه، بروزرسانی کردن خونه‌هاست. یعنی با حل شدن یک خونه و قرار دادن عدد، لازمه که اون عدد رو از کاندیدا‌های جعبه، ستون و ردیفش حذف کنید. برای درک بهتر این موضوع، به این مثال توجه کنید:

قرار گرفتن ۵ در خونه‌ی پایین-چپ، باعث حذف این عدد از کاندیداهای ستون و ردیف مجاورش شده.

بدین ترتیب، این مناطق تحت تاثیر اضافه شدن عدد ۵، نیاز به بروزرسانی دارند:

http://baghbagho.com/wp-content/uploads/2011/07/pencelling5.jpg

نگران نباشید؛ در عمل این کار به سادگی صورت می‌گیره و هیچ پیچیدگی خاصی نداره.

قوانین طلایی

برای حل سودوکوهای درجه‌ی سخت، قاتل و یا بالاتر، علاوه بر تسلط بر روش‌های مذکور، به یادگیری قوانین طلایی هم نیاز پیدا خواهید کرد.

قانون ۱- خانه‌های تک کاندیدایی

با این قانون از قبل آشنا هستیم.

http://baghbagho.com/wp-content/uploads/2011/07/rule1-2.jpg

در نمونه‌ی بالا، دو خونه‌ی تک کاندیدایی دیده میشه. ۴ و ۵٫ می‌تونیم این کاندیداها رو درون خونه‌هاشون قرار بدیم.

قانون۲- جعبه‌های تک کاندیدایی

زمانی که یک کاندیدا تنها یکبار در یک محدوده (جعبه، ردیف، ستون) تکرار شده باشه، در اون خونه قرار می‎گیره.

یکبار دیگه به مثال قبل توجه کنید:

http://baghbagho.com/wp-content/uploads/2011/07/rule1-2.jpg

کاندیدای ۶، تنها یکبار در این محدوده تکرار شده؛ بنابراین، اون خونه (بالا-وسط) جایگاه صحیح این عدد هست.

قانون۳- جعبه‎ی مدعی

زمانی که یک کاندیدا تنها در یک ستون یا ردیفِ یک جعبه وجود داشته باشه، می‎تونیم مدعی بشیم که عدد اون کاندیدا حتما در اون ستون یا ردیف و داخل جعبه قرار می‌گیره.

به مثال زیر توجه کنید:

http://baghbagho.com/wp-content/uploads/2011/07/rule3-i.jpg

در این مثال، کاندیدای ۱ تنها در ردیف بالایی جعبه وجود داره. این بدین معناست که این کاندیدا باید یک‌جای دیگه هم تو این ردیف تکرار شده باشه:

http://baghbagho.com/wp-content/uploads/2011/07/rule3-ii.jpg

مطابق این قانون می‌تونید ۱ رو از خونه‌های خارج مربع (در این ردیف) حذف کنید. با حذف ۱ از خونه‌ی سمت راستی، تنها یک کاندیدا باقی می‌مونه (۷) و خونه حل میشه.

همچنین از این قانون می‌تونید در حین کراس‌هچینگ هم استفاده کنید. مثلا در اینجا ما جعبه‌ی سمت راستی رو برای عدد ۱ کراس‌هچینگ کردیم:

http://baghbagho.com/wp-content/uploads/2011/07/rule3-iii.jpg

با درنظر گرفتن قانون مذکور، می‌فهمیم که عدد یک در یکی از دوخونه‌ی بالایی جعبه‌ی سمت چپی قرار داره و نمی‌تونه در خونه‌ی سمت راستی قرار بگیره. پس ردیف بالایی جعبه‌ رو خط می‌زنیم و به این ترتیب فقط یک جایگاه برای عدد یک باقی می‌مونه.

قانون۴- جفت

زمانی که دو تا خونه که در یک محدوده (جعبه، ردیف یا ستون) قرار دارن، دو کاندیدای یکسان داشتن؛  می‌تونید اون دو کاندیدا رو از کاندیدا‌های خونه‌های دیگه‌ی اون محدوده حذف کنید.

به ردیف دوم جدول توجه کنید:

دو تا از خونه‌های این ردیف، دارای کاندیدا‌های یکسان هستن – ۶۷٫ یعنی اینکه اگه یکی از خونه‌ها ۶ باشه، دیگری میشه ۷ و بالعکس. پس می‌تونیم بگیم که در این ردیف عددِ هیچ خونه‌ای نمی‌تونه ۶ یا ۷ باشه و این دو کاندیدا رو از سایر خونه‌های این ردیف حذف می‌کنیم.

با حذف ۶ از کاندیدای ۶۹، فقط ۹ به عنوان کاندیدا باقی می‌مونه و به این ترتیب خونه حل میشه.

*در قانون جفت‌، دو خونه‌ دقیقا باید دارای دو کاندیدا باشن، نه بیشتر. مثلا در نمونه بالا، اگر یکی از خونه ها ۶۷۹ می‌بود، دیگه نمیشد این قانون رو روش اعمال کرد.

قانون۵- سه‌تایی‌ها

سه تا خونه‌ی یک محدوده (جعبه، ردیف یا ستون)، یک گروه سه‌تایی به شمار میان، هرگاه:

  1. هیچ کدومشون بیش از سه کاندیدا نداشته باشن.
  2. کاندیداهاشون تکمیل باشه، یا اینکه زیرمجموعه‌ای از مجموعه‌ی اصلی به حساب بیان. (در ادامه توضیح میدم!)

می‌تونید اعدادی رو که در گروه سه‌تایی تکرار شده، از سایر کاندیدا‌های اون محدوده حذف کنید.

ردیف چهارم جدول رو ببینید:

http://baghbagho.com/wp-content/uploads/2011/07/rule5-i.jpg

به سه خونه‌ای که دارای کاندیداهای ۲۳، ۲۳ و ۲۳۴ هستن توجه کنید. این سه‌خونه یک دسته‌ی سه‌تایی رو می‌سازن.

به ۲۳۴، یک گروهِ پُر و به ۲۳، زیر مجموعه گفته میشه. زیر مجموعه از این جهت که همه‌ی اعضاش (۲ و ۳)، داخل کاندیدای اصلی و پر، وجود داره.

برای اینکه مطمئن بشیم این سه خونه یک سه‌تایی رو می‌سازن، دو حکم بالا رو بررسی می‌کنیم:

اولا هیچ‌کدوم از این سه تا خونه، تعداد کاندیداهاشون بیشتر از سه تا نیست و دوم اینکه همگی یا کاندیداهاشون تکمیل هست (۲۳۴)، یا اینکه زیرمجموعه‌ای از کاندیدای اصلی هستن (۲۳). پس با اطمینان می‌تونیم بگیم این سه خونه یک سه‌تایی رو تشکیل میدن.

با این حساب، می‌تونیم ۲، ۳ و ۴ رو از سایر کاندیدا‌های این محدوده حذف کنیم. با این کار، خونه‌ی سومی و آخری تک کاندیدایی و حل میشن.

″پیدا کردن دسته‌های سه‌تایی مثل این، ارزش زیادی داره. در مثال بالا، علاوه بر به کار گیری این روش، می‌تونستیم از قانون۴ – جفت، هم استفاده کنیم؛ ولی در اون صورت فقط یکی از دو خونه حل میشد..

با به کارگیری روش سه‌تایی، بعد از پیداکردن عددِ دوتا از خونه‌ها (سومی و آخری)، می‌تونیم دوخونه‌ای رو که دارای کاندیدای ۲۳ هستن (چهارمی و پنجمی)، یک جفت در نظر بگیریم و این دو کاندیدا رو از خونه‌ی ۲۳۴ حذف کنیم. به این ترتیب فقط عدد ۴ باقی می‌مونه و خونه حل میشه!

*در قانون سه‌تایی‌ها، حتما لازم نیست که کاندیدا‌ها پشت‌سر هم و یا با نظم خاصی قرار گرفته باشن.

حتی دسته‌ی سه‌تایی بدون وجود یک گروه سه‌تایی کاندیدا هم تشکیل میشه. این سه گروه کاندیدا رو در نظر بگیرید:

۱۳ ۱۶ ۳۶

هر سه گروه، زیر مجموعه‌ی دسته‌ی بزرگترِ ۱۳۶ هستن و یک گروه ‌سه‌تایی رو تشکیل میدن. به بیان دیگر، هر سه عددِ ۱، ۳ و ۶ در این سه خونه قرار می‌گیرن و خارج از اون، جایی ندارن. پس می‌تونیم این سه عدد رو از سایر کاندیدا‌های محدوده حذف کنیم. پیدا کردن چنین سه‌تایی‌هایی کار نسبتا مشکلی هست؛ در ابتدا بهتر اینه که دنبال سه‌تایی‌های سه-کاندیدایی بگردید.

پس در مجموع قانون رو به این صورت بازنویسی می‌کنیم:

دو/سه خونه‌ی یک محدوده، یک سه‌تایی (یا دوتایی) به شمار میان، هرگاه:

  1. هیچ کدومشون بیش از n کاندیدا نداشته باشن.
  2. کاندیداهاشون تکمیل باشه، یا اینکه زیرمجموعه‌ای از مجموعه‌ی n-کاندیدایی به حساب بیان.

*بعضی وقت‌ها ممکنه یک خونه‌ی تک کاندیدایی هم باعث ساخته شدن یک گروه سه‌تایی بشه.

در مثال روبرو، کاندیدا‌های ۲، ۲۳ و ۲۶ یک سه‌تایی رو می‌سازن. می‌تونید دو حکم بالا رو در موردشون بررسی کنید.

بنابر قانون می‌تونیم ۲، ۳ و ۶ رو از کاندیدا‌های خونه‌های این ستون حذف کنیم و با این فقط ۸ برای خونه‌ی پایینی باقی می‌مونه.

همونطور که می‌دونید n می‌تونه هر عددی رو قبول کنه؛ بنابراین قانون فوق در مورد دسته‌هایی چهارتایی (و حتی بیشتر) هم صدق می‌کنه.

سه شرط کلیدی برای موفقیت در حل سودوکو‌

دقت و اطمینان: هرگز تا مطمئن نشدید، عدد یا کاندیدایی رو داخل خونه ننویسید.

تکمیل: همیشه قبل از به کارگیری روش های پیشرفته، یکبار خونه‌ی خالی رو کراس‌هچینگ کنید.

بروزرسانی: به محض اضافه کردن یک عدد، کاندیدا‌های محدوده‌ی اون خونه‌ رو بروزرسانی کنید.

مراحل کلی حل سودوکو

اینها مراحلی هستند که می‌تونید برای حل سودوکو‌های سخت به کار بگیرید:

۱- یک مرحله اسلایسینگ انجام بدید، برای حل خونه‌های ساده‌ی جدول.

۲- کل جدول رو، جعبه به جعبه کراس‌هچینگ کنید. سپس با انجام مدادکاری، کاندیدا‌های همه‌ی خونه‌هارو بنویسید.

۳- جدول رو با دقت برای پیدا کردن موارد زیر بررسی کنید:

  1. خونه‌های تک کاندیدایی – به سرعت حل کنید
  2. کاندیدا‌های انحصاری – این‌ هارو هم به سرعت حل کنید
  3. جعبه‌ی مدعی – کاندیدای مذکور رو از ستون یا ردیفش حذف کنید.
  4. جفت‌ها – دو کاندیدای جفت رو از سایر کاندیدا‌های محدوده حذف کنید.
  5. سه‌تایی‌ها – n تا کاندیدایی رو که یک گروه رو تشکیل دادن، از سایر کاندیدا‌های محدوده حذف کنید.

۴- هر وقت عددی رو درون خونه‌ای قرار دادید، بلافاصله کاندیداهای جعبه، ردیف و ستون اون عدد رو بروزرسانی کنید..

۵- با از بروزرسانی کردن کاندیداها، از نو قوانین رو بررسی کنید تا ببینید چه اعدادی تازه‌ای می‌تونن داخل خونه‌ها قرار بگیرن.

۶- هرگز حدس نزنید! (مگر زمانی که کمتر از ۱۲ تا خونه باقی مونده بود؛ چاره‌ای نبود و مطمئن شدید که باید این کارو انجام بدید!)

از حل سودوکو لذت ببرید!

منبع

همچنین:

الگوی دستبند نخی

مــجــلّــه

کـــــافّـــــه

فـــیلــــم

کـــتابــــ