IIJIMASが勉強しようとしています。

これからこれから♪

目次

Blog 利用状況

ニュース

共著:




わんくま同盟 東京勉強会 #99 私の資料

個数を数えてみたい!

わんくま同盟 東京勉強会 #91 私の資料

きっと楽しいトポロジー

わんくま同盟 東京勉強会 #45 数学デー 私の資料(pptxとxlsx)

確率の不思議

わんくま同盟 東京勉強会 #37 私のLT資料

数の冪の和の式 を求めてみよう!

デブサミ09でわんくま同盟の紹介をしたスライド

わんくま同盟 東京勉強会 #26 LT祭りの私のスライド

わんくま同盟 東京勉強会 #23の私のスライド

わんくま同盟 東京勉強会 #18の私のスライド


自己紹介(仮)

IIJIMASと申します。
東京都多摩市在住です。多摩川のそばです。
猫好きです。
IIJIMASのSは何って言われます。 IIJIMASって
なんて読むかは自由です。
魚や網間企業とゲームとは無関係です。
数学とか宇宙とかの読み物とか好きです。
血液型:果汁100%A
メタボ予備軍。。。orz
Twitter

...............
MVP 審査応募ページ~ 求む、日本のMVP。
MCTS:.NET Framework 2.0: Windows アプリケーション
MCTS:.NET Framework 2.0: Windows アプリケーション

MCSD.NET:マイクロソフト認定ソリューションデベロッパー(MCSD) Microsoft .NET トラック
Microsoft Certified Solution Developer for Microsoft.NET

リンク

わんくま同盟
わんくま同盟

C#VB.NET掲示板
C#VB.NET掲示板

わんくま同盟 Blog's

ちょっと一言(仮)


書庫

日記カテゴリ

[思いつき論理クイズ]正直者、うそつきを見破るには?(問題編)

クレタ人が真実の情報を知っています。
簡単のために情報は2値(Boolean)で、情報の数は本質ではないので今回は1つだけとします。
クレタ人.それは正しい()メソッドを通じてクレタ人に情報をたずねることができます。
真(True)か偽(False)で返答が返ってきます。

ところが、クレタ人には正直者とうそつきがいます。事前にはわかりません。
正直者は情報が真なら真、偽なら偽と答えます。
うそつきは情報が真なら偽、偽なら真と答えます。#うそつきというよりひねくれものなのかも…

さて正しい情報を得るためにまず正直者かどうか確認しなければなりません。
「あなたは正直者ですか?」(それは正しい("私は正直である"))を使ってたずねると
もちろん常に「True」が返ってきてしまいます。
以下の「それは正しい」メソッドの引数をどのようにすれば、正直者かうそつきを見破れるのでしょうか?

※答え合わせ用の「正直者かどうかの正解」メソッドは本来無い物だと思ってください。
※正解は1通りではありません。


using System;

using System.Collections.Generic;

using System.Text;

using System.Reflection;

public class クレタ人

{

    private static Random _random = new Random();

    private bool _正直;

    private bool[] _情報;

    public static クレタ人 Create() {

        クレタ人 ins = new クレタ人(

            _random.Next(2) == 0,

            new bool[] {

                _random.Next(2) == 0 ,//簡単のため情報は1つだけ

            });

        return ins;

    }

    private クレタ人(bool 正直, bool[] 情報)

    {

        this._正直= 正直;

        this._情報= 情報;

    }

    private bool 私は正直である()

    {

        return _正直;

    }

    private bool その情報は正しい(int index)

    {

        return _情報[index];

    }

    public bool それは正しい(string methodName, params object[] args)

    {

        return !_正直^ (bool)typeof(クレタ人).InvokeMember(methodName,

            BindingFlags.NonPublic

            | BindingFlags.Public

            | BindingFlags.Instance

            | BindingFlags.InvokeMethod

            , null, this, args);

    }

    //答え合わせ用メソッド

    public static string 正直者かどうかの正解(クレタ人 cretan)

    {

        return string.Format("実はこのクレタ人は{0}", cretan._正直? "正直者" : "うそつき");

    }

}

class Program

{

    static void Main(string[] args)

    {

        クレタ人 c1 = クレタ人.Create();

        Console.WriteLine("情報[0]は正しい?  {0}", c1.それは正しい("その情報は正しい", 0));

        Console.WriteLine("正直ものですか?  {0}", c1.それは正しい("私は正直である"));//必ずTrueが返ってきてしまう。

//          Console.WriteLine("正直ものですか?  {0}", c1.それは正しい(????????????????????????????????));//どうすれば正直者かどうかの正しい答えが返ってくるか?

        Console.WriteLine(クレタ人.正直者かどうかの正解(c1));//答え合わせ用

    }

}


ネタ元↓
クレタ人のパラドックス(凪瀬さんの凪瀬 Blog)より
http://blogs.wankuma.com/nagise/archive/2007/08/07/89144.aspx

解答編↓
[思いつき論理クイズ]正直者、うそつきを見破るには?(解答編)
http://blogs.wankuma.com/iijimas/archive/2007/11/08/107089.aspx

投稿日時 : 2007年11月4日 0:16

コメントを追加

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/04 2:30 melt

あなたはクレタ人ですか、と訪ねてみるとか?

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/04 2:47 melt

正直者のクレタ人ですか、だったorz

でもそれだとやっぱりこのメソッドだけだと足りないんですよねぇ……うーん……。

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/04 2:56 IIJIMAS

meltさんコメントありがとうございます。

#最初のコメントの方が正しいと思いますが…

確かに正解です!

ただ上記プログラムでは「あなたはクレタ人ですか」は対応メソッドがないのでエラーになります。
その方向でも某英語なメソッドを使って実装できますね。
用意していた解答はプログラムで定義したメソッドを使用したものです。

上記の「それは正しい」メソッドで実装できますか?

わかった方、わかっててもできればまだしばらくここに書かないでください…
iijimas@wankuma.comあたりに教えてください…

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/04 3:45 IIJIMAS

meltさん正解されました!

わかってない方のコメントや、わかった方のでもわかってない方に正解がわからないようなコメントは歓迎です。<何言ってんだ私w

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/04 11:20 επιστημη

絶対に"はい"(または"いいえ")としか答えられない質問に関して問えばいいのかな。

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/04 11:38 IIJIMAS

そうです。実際にTrueでしかありえないことを答える場合、
正直者はTrue
うそつきはFalse
と答えるので見破れます。

上記の「それは正しい」メソッドの引数で実装できます。
正解は1通りではありません。

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/04 21:26 シャノン

つまり、
・それは正しい
・その情報は正しい
・私は正直者である
の組み合わせで答えろってことですね?

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/04 21:38 IIJIMAS

そうです。
上記のコメント化された行を有効化して?のところ(「それは正しい」メソッドの引数)に何かを入れて、正直者のときTrue、うそつきのときFalseが返ってくればOKです。使わないメンバもあります。

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/07 14:24 さかもと


私はいつでも正しいです。
私がいつでも正しいです。

# re: [思いつき論理クイズ]正直者、うそつきを見破るには?(問題編) 2007/11/08 1:20 IIJIMAS

そうですね。
画伯は正しいと思いますw

さて、もうだれも見ていないようですが…(自分も見てなかった)…
11/8夜に解答編エントリしようと思います。

もし、だれか見てくれてる人で解答がわかった方は解答をここのコメントに書いてしまってもかまいません。

# re: R・田中一郎さん出題の問題ときました。 2008/01/29 9:26 IIJIMASが勉強しようとしています。

re: R・田中一郎さん出題の問題ときました。

# You ought to take part in a contest for one of the best websites online. I will highly recommend this site! 2019/04/04 19:08 You ought to take part in a contest for one of the

You ought to take part in a contest for one of the best websites online.

I will highly recommend this site!

タイトル
名前
URL
コメント