gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

じゃんけんロジックで考えてみる「壁」の厚さ

ん…たいしたことやってる訳でもないんだけどねぇ。
「そこに思考が及ぶかどうか」ってのには以外と壁があるみたいで。それを「ど〜やって乗り越えさせるのか」を含めて考えてみたくて、ちょっと種まき。


いつものことではありますが、いつも以上になんか「ふと思ったコメント」とか気軽に残しておいてもらえると嬉しいです ^^


2013/05/13
頂いたコメントで大きく気づきがあったので改修。
レベル1の前にレベル0.5を作成、前提を少しいじりました。


(2013/05/13 追記開始)
前提
・guu:ぐー
・tyoki:ちょき
・paa:パー
・変数 $my に、自分が出した手
・変数 $opponent に、相手(コンピュータ)が出した手
・勝敗は「自分の勝ち負け」
・値は「入っていて」かつ「正常値」である、と仮定


コードレベル0.5

if ('goo' === $my) {
  if ('goo' === $opponent) {
    echo '引き分け';
  } else
  if ('choki' === $opponent) {
    echo '勝ち';
  } else {
    echo '負け';
  }
} else
if ('choki' === $my) {
  if ('goo' === $opponent) {
    echo '負け';
  } else
  if ('choki' === $opponent) {
    echo '引き分け';
  } else {
    echo '勝ち';
  }
} else {
  if ('goo' === $opponent) {
    echo '勝ち';
  } else
  if ('choki' === $opponent) {
    echo '負け';
  } else {
    echo '引き分け';
  }
}

(2013/05/13 追記ここまで)


前提修正
・0:ぐー
・1:ちょき
・2:パー
・変数 $my に、自分が出した手
・変数 $opponent に、相手(コンピュータ)が出した手
・勝敗は「自分の勝ち負け」
・値は「入っていて」かつ「正常値(0〜2の範囲)」である、と仮定


コードレベル1

if (0 === $my) {
  if (0 === $opponent) {
    echo '引き分け';
  } else
  if (1 === $opponent) {
    echo '勝ち';
  } else {
    echo '負け';
  }
} else
if (1 === $my) {
  if (0 === $opponent) {
    echo '負け';
  } else
  if (1 === $opponent) {
    echo '引き分け';
  } else {
    echo '勝ち';
  }
} else {
  if (0 === $opponent) {
    echo '勝ち';
  } else
  if (1 === $opponent) {
    echo '負け';
  } else {
    echo '引き分け';
  }
}


コードレベル1.5
コードレベル1を、switchで書き直す。面倒だから脳内変換してw


コードレベル2

$i = $my - $opponent;

if (0 === $i) {
  echo '引き分け';
} else
if ( (-1 === $i)||(2 === $i) ) {
  echo '勝ち';
} else {
  echo '負け';
}


コードレベル3

$i = ($my - $opponent + 3) % 3;

if (0 === $i) {
  echo '引き分け';
} else
if (2 === $i) {
  echo '勝ち';
} else {
  echo '負け';
}


まず「1が書けない」ってハードルがあって、これは多分「日本語コメント」書かせると、届くんじゃないかって思う。
1から2にたどり着くのにおそらく1ハードルあって、これはまぁ「やってみる」チャレンジ精神があると、多分届く。
2から3へは…「探究心」か「怠け心」がある程度以上強いと、多分、いけるんじゃないか、って思う。


いろいろな人のコードを見て、色々と思うこと多々。
ど〜なんだろう?