C, PHP, VB, .NET

Дневникът на Филип Петров


* Най-трудната логическа игра и Ники от Survivor

Публикувано на 09 януари 2009 в раздел Математика.

Ще ви дам мой преразказ, на добре известната „най-трудната логическа задача на всички времена“. В случая съм разделил задачата на три части, за да може да ви подскажа и да ви накарам да „преоткриете“ едно от най-готините решения :)

Ники от Survivor България 2008 живя дълго време на „Острова на изгнаника“. Това, което феновете на шоуто не знаят е, че той е преживял истинска драма – оказа се, че той въобще не е бил сам! Следната история разкрива тази силно пазена тайна…

Запасите от храна на Ники вече бяха на критичния минимум. Скоро му предстоеше пряк двубой с друг участник и затова той реши да тръгне към другия край на острова в търсене на кокошки. За негово нещастие обаче попаднал на трима канибали-математици.

Вързали Ники на един кол и му казали, че ще го пекат на бавен огън. Той ги замолил за прошка и те решили да му дадат някакъв теоритичен шанс. Мислили каква задача да му дадат и се сетили за „най-трудната логическа задача на всички времена“. Казали му следното:

Слушай ни внимателно защото няма да повтаряме. Единият от нас казва само истината. Вторият от нас винаги лъже. Третият от нас може да лъже, а може и да казва истината. Имаш право да ни зададеш само по един въпрос, с който ще ти отговорим с да или не. За твое нещастие ние ще ти отговорим на нашия роден език „Муло-бъло“, където думите са „ба“ и „га“ – ти очевидно не знаеш коя от тях се превежда „да“ и коя „не“. Трябва да кажеш кой от нас съответно казва истината, лъже или е хибрид – нашите имена са Коко, Тото и Шошо.

Ники изпаднал в паника – бил виждал тази задача по форуми и блогове, където ставало дума за трима богове. Универсалното решение обаче било трудно и той се мъчил да си го спомни. В този момент канибалите се уплашили, защото видяли, че Ники ще успее да отгатне отговора.

Станало обаче нещо още по-странно за тях – Ники се досетил за решението на Раберн&Раберн. Задал един въпрос на Коко и той отговорил с „ба“. След това задал друг въпрос на Тото и той също отговорил с „ба“. Задал трети въпрос на Шошо и се случило нещо изключително странно – Шошо не искал да отговори! Ники настоявал за отговор, но Шошо категорично отказал да отговори на зададения му въпрос. Канибалите въобще не били чували за решението на Раберн&Раберн, затова се ядосали много на Шошо и изяли него вместо Ники. Заради остроумието пуснали пленника. Така Ники оцеля в истинския Survivor.

Сега вие помислете над въпросите:
a) Дайте примерни въпроси, с които Ники се е спасил от канибалите?
b) На базата на тези въпроси може ли да се отговори на въпроса „как се превежда думата ба“? Ако вашите въпроси не отговарят на този въпрос, то ги перефразирайте така, че да могат.
c) Ники в случая се е отървал без да каже кой канибал казва истината, кой лъже и кой е хибрид. Въпреки това Ники е бил готов да реши загадката (той може всичко и го доказа). Вашите отговори решават ли загадката на канибалите? Ако не, то те на са по прочутата схема на Раберн&Раберн. Направете въпросите си така, че да можете да измъкнете Ники от канибалите дори ако бяха решили да не го пускат заради „остроумие“ (т.е. той трябва да може да отговори „кой кой е“).

П.С. Опитайте се да решите задачата сами – без wikipedia :)

 



22 коментара


  1. Светльо Антонов каза:

    Аз имах идея как горе долу да стане решението, но си признавам че попреписах и открих статията на Раберн&Раберн :)
    Така че няма да давам решение , и ще дам шанс на другите. Но не трябваше да подсказваш какъв е метода на решението :)

  2. Филип Петров каза:

    E, този който тръгне да преписва решенията на задачите просто си губи времето. На мен готовите решения (без преди това да съм се препотил) не са ми интересни :)

  3. Мартин каза:

    Уф, няма да може да се спи.

    Сигурен ли си, че въпросите са били различни, а не един и същи за двата канибала, според мен може да има повече шанс, ако е задал един и същ.

  4. JT каза:

    molq iztrij predi[niq komentar i ostawi samo tozi. taka sa po-razbiraemi to`kite:

    1. @koko – toto ]e otgowori li polovitelno, ako go popitam, „ba=da?“?

    1.a. ba => koko e hybrid (wv. obqsnenie 1. za logikata tuk) i w tozi slu`aj otgowori kakto bi otgoworil toto

    1.1. @toto – da=da? (otgowor e „da“…)

    1.1.a. ba

    1.1.1. @[o[o – kaza li mi toto istinata?

    1.1.1.a. ba => ba=ne, toto – lyva, [o[o – istina

    1.1.1.b. ga => ba=da, toto – istina, [o[o – lyva

    1.1.b. ga

    1.1.2. @[o[o – kaza li mi toto istinata?

    1.1.2.a. ba => ba=ne, toto – istina, [o[o – lyva

    1.1.2.b. ga => ba=da, toto – lyva, [o[o – istina

    1.b. ga => toto ne e hybrid

    1.2. @[o[o – koko ]e otgowori li polovitelno, ako go popitam, „ba=da?“?

    1.2.a. ba – [o[o e hybrid (wv. obqsnenie) i w tozi slu`aj otgowori kakto bi otgoworil koko

    1.2.1. @toto – [o[o otgowori li polovitelno? (wv. obqsnenie 2.)

    1.2.1.a. ba => koko – lyva, toto – istina, ba i ga – da i ne – ne se znae

    1.2.1.b. ga => koko – istina, toto – lyva, ba i ga – da i ne – ne se znae

    1.2.b. ga – koko ne e hybrid => [o[o e hybrid i w tozi slu`aj otgowori kakto bi otgoworil toto

    1.2.2. @toto – [o[o otgowori li polovitelno?

    1.2.2.a. ba => koko – istina, toto – lyva, ba i ga – da i ne – ne se znae

    1.2.2.b. ga => koko – lyva, toto – istina, ba i ga – da i ne – ne se znae

    1.2.c. myl`anie – koko e hybrid i w tozi slu`aj otgowori kakto bi otgoworil [o[o

    myl`anieto ne e otgowor – now wypros (towa e logikata ot 1.1.)

    1.2*. @[o[o – da=da?

    1.2*.a. ba

    1.2*.1. @toto – kaza li mi [o[o istinata?

    1.2*.1.a. ba => ba=ne, [o[o – lyva, toto – istina

    1.2*.1.b. ga => ba=da, [o[o – istina, toto – lyva

    1.2*.b. ga

    1.2*.2. @toto – kaza li mi [o[o istinata?

    1.2*.2.a. ba => ba=ne, [o[o – istina, toto – lyva

    1.2*.2.b. ga => ba=da, [o[o – lyva, toto – istina

    1.c. myl`anie – toto e hybrid

    myl`anieto ne e otgowor – now wypros (towa e logikata ot 1.1.)

    1*. @koko – da=da?

    1*.a. ba

    1*.1. @[o[o – kaza li mi koko istinata?

    1*.1.a. ba => ba=ne, koko – lyva, [o[o – istina

    1*.1.b. ga => ba=da, koko – istina, [o[o – lyva

    1*.b. ga

    1*.2. @[o[o – kaza li mi koko istinata?

    1*.2.a. ba => ba=ne, koko – istina, [o[o – lyva

    1*.2.b. ga => ba=da, koko – lyva, [o[o – istina

    Obqsneniq:

    1. po principa na eliminaciq na wyzmovnosti:

    a. dopuskame: A.1. toto e hybrid => koko ne znae kakwo ]e otgowori toj – ]e myl`i

    A.2. [o[o e hybrid, B.1. ba = da C.1 koko – istina => toto – lyva, toto bi otgoworil otricatelno – koko ne move da ni izlyve – protiwore`ie

    C.2 koko – lyva => toto – istina, toto bi otgoworil polovitelno – koko ne move da kazwa istinata – protiwore`ie

    B.2. ba = ne C.1. koko – istina => toto – lyva, toto bi otgoworil polovitelno – koko ne move da ni izlyve – protiwore`ie

    C.2 koko – lyva => toto – istina, toto bi otgoworil otricatelno – koko ne move da kazwa istinata – protiwore`ie

    2. razigrawane na wyzmovnostite 1. ba/ga = da/ne 2. koko/toto = istina/lyva dawa ili potwyrvdenie na moq otgowor ili protiwore`nie pri drugata wyzmovnost. myrzi me da go izpiswam tuk.

    3. postarah se da ne izpolzwam izrazi ot matematika, logika i informatika. dano ne e stanalo po-nerazbiraemo po tozi na`in re[enieto mi. dano i ne sym se obyrkal nqkyde.

  5. Филип Петров каза:

    Мартин – Въпросите може и да са еднакви.

    JT – Малко ти е объркано обяснението, но доколкото виждам си се справил. Аз имах предвид малко по-постепенно „влизане“ в задачата. Опитай се да го опростиш за да е по-разбираемо…

    Ето как бих решил задачата аз, с информацията, която е дадена:
    1. Очевидно трябва да измисля един въпрос, който който когато е зададен на който и да е от канибалите – ще го разграничава еднозначно. В задачата е подсказано, че един от тях няма да може да отговори на въпроса, което изключително много ни насочва.
    2. Ако въпроса от т.1 ясно разграничава всеки канибал, то е очевидно, че два въпроса са достатъчни, но трябва да знаем превода на думите „да“ и „не“. Това освен всичко друго е и подточка на задачата. Тоест първият му въпрос би следвало да цели научаването на превода на думите.
    3. Ако са спазени т.1 и т.2, то задачата ще бъде решена напълно…

  6. neli каза:

    ще падна, нищо не разбрах, освен че се чешат някакви програмистки гъдели ;) Обяснете моля на кирилица като за „блондинки канибалки“

  7. kastro каза:

    Задачкатяа хич не е формулирана правилно, в отговра на JT се вижда че има въпроси с повече от едно питания, това прави доста повече въпроси поотделно за всеки туземец. Не е ли целта един въпрос да има едно питане, ако са толкова умни туземците, това трябва да го отчетат, демек че им се задават повече въпроси.

  8. Филип Петров каза:

    neli – Скоро ще видиш, че не е трудно :)

    kastro – Съвсем правилно съм я формулирал. Въпроса му е логическа конструкция, но изисква само един отговор с да или не… Доколко е верен ми е трудно да изследвам, защото го е описал лошо…

  9. Филип Петров каза:

    ОК, започвам да разкривам решението, по начина по който го бях заложил:

    Първият въпрос, който бих задал на първия канибал щеше да цели да открие значението на думите „ба“ и „га“. Той може да гласи нищо като следното:

    „Щеше ли да кажеш, че е вярно, ако те бях попитал дали 1+1=2?“

    отговарящия вярно: Очевидно ще отговори „да“.

    лъжеца: На въпроса „1+1=2“ той би отговорил с „не“, тоест „вярното“ в случая е „не“. Следователно на общия въпрос той би отговорил с „да“.

    хибрида: Независимо дали казва истина или лъже, той ще отговори с „да“ поради предишните съобъжения.

    Така с първия си въпрос успяхме да преведем двете думи от езика „Муло-Бъло“. Остават ни два въпроса, с които да разберем кой казва истината и кой лъже… Дерзайте…

  10. Киро каза:

    Ако ти отговоря „не“ на въпроса, тогава какъв ще съм, лъжец, хибрид или казващ истината?

  11. Жоро каза:

    Ако някой отговори „не“, тогова той какъв е, лъжец, хибрид или казващ истината?

  12. Филип Петров каза:

    Няма начин за отговорите с „не“ на първия ми въпрос, защото ще нарушите правилата. Те са направени, за да не се нарушават :)

  13. Мартин каза:

    Филип… не те разбирам

    Какви са съображенията? Хибрида може да отговори с „Да“ или „Не“ (на своя език). Как разбираш, че ще отговори „Да“ ??

    П.П. Признавам си, че не ми е ясно и решението на Раберн & Раберн. :)

  14. Филип Петров каза:

    Хибрида казва или истина или лъжа. Аз съм доказал, че на този въпрос независимо дали казва истина или лъжа – винаги се отговаря с „да“.

  15. Криси каза:

    Заинтригува ме с задачката.Все пак ми се струва ,че допускаш някой неточности в последния си коментар.Съгласно логиката ,която си изложил по – горе за честния и лъжливия канибал не остава друг избор освен да кажат „да“.С хибрида обаче нещата стоят малко по-различно.Ако той примерно реши да отговори честно на въпроса „1+1=2“ с „да“(като честния),но реши да излъже за това „Щеше ли да кажеш, че е вярно“(като лъжльото),то резултантния отговор би бил „не“.
    Независимо от това въпроса ти постига целите си:В единия случай имаш три отговора „да“,а в другия имаш два „да“ и един „не“ с бонус информацията – кой е хибрида.

    П.П. В условието ти прочетох „…Имаш право да ни зададеш само по един въпрос…“Това не означава ли по един въпрос на канибал,защото после в твоя подход казваш ,че след като сме попитали всеки „1+1=2 ?“ имаме право на още два въпроса ?

  16. Криси – Въпросите са общо три – по един на канибал. С първия въпрос ще определя кое е да и кое не, а с останалите два трябва да идентифицирам другите двама канибали кой – кой е.

    Забележката ти за хибрида е вярна – в оригиналната задача, както и тук се предполага, че отговаряйки на един въпрос той няма да си промени поведението по средата на въпроса… Тази идея между другото поставя друга интересна задача :)

  17. Г.К. – далеч си от решението. Това, че си открил примерна поредица от въпроси, при които отговорите съвпадат, не значи, че тези въпроси са универсални, т.е. действащи при всички възможни комбинации.

  18. Г.К. каза:

    пичове искам да ми кажете ако някъде има отговор на задачата да ми пише моля ! според мен отговора е ДА ! Мойта логика е следната : Въпросите които ще задам са : 1.Га истина ли е 2.Лъже ли първият 3.Лъжат ли първите двама.Отговора на първият въпрос е ба-лъжа,отговорът на вторият въпрос пак е ба-лъжа и всъщност изяждат третия,защото казва истината и ще ги издаде тоест га значи ДА :)

  19. G.K. каза:

    Dai mi drugo reshenie na zadachata koeto da bude smisleno az kazvam primer koito e absoliutno logichen I pravilen ! Ima li kade da se nameri tochniqt otgovor? Ako mojesh opitai se da me uborish

  20. I.Z. каза:

    Kak si dokazal che hibrida otgovarq s da vinagi? I kakvi sa pravilata s koe se narushavat ako kajat I dvamata ba (ne) ba(ne)

  21. Мисля, че отговорът е най-добре описан тук:

    http://en.wikipedia.org/wiki/The_Hardest_Logic_Puzzle_Ever

  22. Анелия Савова каза:

    Първият въпрос е : Щеше ли да кажеш да ако те бях попитал дали сте канибали?
    коко: ба (ако приемем,че ‘ба’ е да,то тото е отговорил с ‘да’)
    2 въпрос: Тото лъже ли?
    тото: ба (да)
    3 въпрос: Коко и Тото лъжат ли?
    шошо: не е искал да отговаря (Защо?)
    Не е искал да отговори,защото каквото и да каже ще излъже,а щом не е искал => е този който казва винаги истината. пр: ако каже ‘га'(не) => казва,
    че тото не лъже,че коко лъже(коко казва лъжа) и =>(следователно) казва,че щом тото не лъже, то коко лъже.Но също така ако отговори ‘не’ на въпроса дали 2-мата лъжат,Шошо ще каже,че коко не лъже.противоречи си =>ще излъже и ще се получи така,че и 3-мата лъжат,а това противоречи на условието.Ако каже ‘ба'(да) => тото лъже,че коко лъже и едновременно кава,че коко лъже.Пак е лъжа,зашото си противоречи. Ако заместим ‘ба’ със не , се получава същото,но и тримата казват истина,а това е невъзможно=> шошо ще излъже ,а щом не е искал да лъже,той е човека който винаги казва истината и затова не е отговорил. :) Ето решението!!
    Ани 14г :D

Добави коментар

Адресът на електронната поща няма да се публикува


*