معمای گورخر یک معمای منطقی مشهور است که در آن پنج خانه وجود دارد و هر خانه به رنگ متفاوتی رنگ شده است. در این خانهها افراد متفاوتی زندگی میکنند: ملیتشان با هم فرق دارد، حیوان خانگی متفاوتی نگه میدارند، نوشیدنی متفاوتی مینوشند و سرگرمی متفاوتی دارند.
برای اینکه بتوانید این معما را حل کنید، ۱۵ گزاره در اختیار شما قرار میگیرد که راهحل را توصیف میکنند. با این حال، فقط با کنار هم گذاشتن اطلاعات همهی این گزارهها میتوانید راهحل معما را پیدا کنید.
معمای گورخر یک مسئلهی ارضای محدودیت (CSP) است. در چنین مسئلهای، مجموعهای از مقادیر ممکن دارید و مجموعهای از محدودیتها که تعیین میکنند کدام مقادیر معتبرند. سودوکو هم نمونهی شناختهشدهی دیگری از همین نوع مسئله است.
وظیفهی شما این است که معمای گورخر را حل کنید تا پاسخ این دو پرسش را پیدا کنید:
۱۵ گزارهی زیر همه درستاند:
علاوه بر این، هر یک از این پنج خانه رنگ متفاوتی دارد و ساکنانشان ملیتهای متفاوت دارند، حیوان خانگی متفاوتی دارند، نوشیدنی متفاوتی مینوشند و به سرگرمیهای متفاوتی مشغولاند.
۲۴ میلیارد (۵!⁵ = ۲۴٬۸۸۳٬۲۰۰٬۰۰۰) راهحل ممکن وجود دارد، پس سعی کنید تا جای ممکن راهحلهای بیشتری را حذف کنید.
این اولین تمرینی است که یک پکیج از پیش نوشتهشده را در خود دارد.
به وجود فایل pkgIndex.tcl و قرار گرفتن پوشهی جاری در متغیر auto_path توجه کنید.
اینها باعث میشوند دستور package require بتواند فایل منبع پکیج را پیدا کند.
این پکیج چندان خوب نوشته نشده است: فقط کدی است که از منابع مختلف قرض گرفته شده است.
فراخوانی interp alias برای این است که این نواقص را پنهان کند و استفاده از پکیج جایگشت را آسانتر کند.
منابع:
در Exercism ثبتنام کنید تا Tcl را همراه با 135 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.
۸ روش متفاوت برای یافتن پاسخ معمای گورخر از میان ۲۴ میلیارد راهحل ممکن را بررسی کنید؛ از جمله کنار گذاشتن جایگشتهای نامعتبر به محض امکان، الگوریتم AC-3، یک راهحل بسیار کوتاه مبتنی بر منطق و حتی یک الگوریتم ژنتیک!