هل قمت بحلها؟ هل تفكر كمهندس برمجيات؟ | الرياضيات
في وقت سابق من اليوم، طرحت عليك اللغز التالي، وهو سؤال كلاسيكي في المقابلة لمهندسي البرمجيات. يبدو أنها قد استحوذت على مخيلتك حقًا: حتى الآن تحتوي المقالة الأصلية على ما يقرب من 500 تعليق تحت السطر. كثيرون يتعاملون مع المشكلة بشكل جانبي، وغالبًا ما يكون ذلك بطريقة فكاهية. العديد منها عبارة عن تأملات حول الغموض الذي ينطوي عليه صياغة سؤال فني حول هياكل البيانات في بيئة خيالية. بعضها منشورات غاضبة حول ما يجعل المفسد، وبعضها عبارة عن احتفالات بمهندسي البرمجيات المفضلين لديك.
كفى بالفعل، ها هو اللغز مرة أخرى، مع الحل.
المتاهة المجنونة
أنت محاصر في نفق مظلم تحت الأرض. أنت تعلم أنه ينحني إلى ما لا نهاية في مسار دائري، لكنك لا تعرف كم يبلغ طوله. على طول جدران النفق، موضوعة بشكل موحد وعلى فترات منتظمة، توجد مفاتيح يمكن تبديلها بين موضعين: لأعلى أو لأسفل. وبصرف النظر عن ذلك لا توجد أشياء أخرى في النفق، وعندما تمشي فيه لا يمكنك استنتاج أي شيء عن معدل انحناء المسار الدائري. ومع ذلك، لديك قلم رصاص وورقة ومصباح للقراءة، حتى تتمكن من تدوين الأرقام.
كيف يمكنك حساب عدد المفاتيح في النفق؟
توضيح: لا يجوز لك إسقاط أي من ملابسك أو ممتلكاتك على الأرض.
حل
إذا كان المسار دائريًا، فإن النفق يرسم دائرة، وبالتالي يجب أن يكون محدد الطول. سوف ينتهي بك الأمر في النهاية إلى حيث بدأت. تكمن المشكلة في كيفية العمل عند الانتهاء من الدورة، نظرًا لأنه لا يمكن تمييز كل جزء من النفق عن الجزء الذي يليه.
الأشياء التي يمكن أن تساعدك في حساب الأقسام هي المفاتيح الموجودة على الجدران. قد تكون إحدى الأفكار هي السير على طول قلب جميع المفاتيح إلى “لأسفل” حتى تكون جميعها “لأسفل”، ثم البدء في قلبها “لأعلى” والعد حتى تعود إلى المفتاح الذي تم قلبه “لأعلى”. قد ينجح هذا إذا كنت متأكدًا من أن جميعهم “مسقطون”. ومع ذلك، لا يمكنك أبدًا التأكد من أنك عدت إلى البداية. كما تعلم، فإن الدائرة كبيرة جدًا – كان بإمكانك قلب 1000 مفتاح إلى “لأسفل” ثم تجاوز 1000 مفتاح “لأسفل” آخر. قد يبدو الأمر وكأنك قد قمت بحلقتين، ولكن ربما يحتوي النفق على 2001 مفتاحًا.
لحظة “آها” الأولى هي أن تدرك أنك لا تستطيع حل هذا اللغز إذا كان كل ما تفعله هو المضي قدمًا. يجب عليك التراجع.
تتمثل إحدى الإستراتيجيات في ما يلي: قم بتبديل مفتاح البداية إلى “أعلى” ثم استمر في العد والتأكد من أن المفاتيح “لأسفل”، ولكن في اللحظة التي تضغط فيها على المفتاح “لأعلى”، تحتاج إلى التراجع والتأكد من أنك قد قمت بذلك. لا يتكرر مرة أخرى إلى البداية. للقيام بذلك، قم بتبديل المفتاح “لأعلى” الذي ظهر مؤخرًا إلى “لأسفل”، ثم ارجع إلى البداية. لقد قمت بالعد، حتى تعرف المسافة التي يجب عليك قطعها للعودة إلى مفتاح البداية. إذا كان لا يزال “أعلى”، فأنت لم تدور في دائرة، ويمكنك الآن بدء نفس العملية مرة أخرى. ومع ذلك، إذا كان “لأسفل”، فيجب أن يكون مفتاح التشغيل هو المفتاح الذي قمت بتبديله للتو، ويمكنك أن تكون واثقًا من أنك تدور في دائرة. بمجرد وصولك إلى هذه المرحلة، تكون قد قمت بإحصاء جميع المفاتيح.
شكرًا لبريان رابيرن، قارئ الفلسفة بجامعة إدنبرة، على اقتراح هذا اللغز الذي يستخدمه في فصله “الألغاز والمفارقات”.
ويقول إنه إذا طرح السؤال باعتباره مشكلة ترميز، فسيكون نصه كالتالي:
خذ بعين الاعتبار قائمة مرتبطة دائرية تحتوي على كائنات، كل منها يحتوي على متغير منطقي. مهمتك هي تحديد العدد الإجمالي للكائنات في الدائرة. المهم هو أنه يمكنك فقط تبديل المتغير المنطقي للكائن الحالي إلى True أو False، والانتقال إلى الكائن التالي أو السابق في القائمة. لا يُسمح بأي مراجع أو علامات أو تعديلات تتجاوز تغيير القيمة المنطقية. بالإضافة إلى ذلك، يُسمح لك بإحصاء الكائنات وتذكر قيم الحقول المنطقية. القيم الأولية للمتغيرات المنطقية في القائمة عشوائية. كيف يمكنك حساب عدد الكائنات في القائمة المرتبطة الدائرية بكفاءة في ظل هذه القيود؟
يمكنك أن ترى كيف يزحف الغموض عندما يتم وضعه كلغز للقارئ العادي!
أتمنى أنكم استمتعتم باللغز اليوم. سأعود خلال أسبوعين.
لقد قمت بإعداد لغز هنا في أيام الاثنين البديلة منذ عام 2015. أنا دائمًا أبحث عن الألغاز الرائعة. إذا كنت ترغب في اقتراح واحد، راسلني عبر البريد الإلكتروني.
اكتشاف المزيد من شبكة الريان
اشترك للحصول على أحدث التدوينات المرسلة إلى بريدك الإلكتروني.