アルゴリズム

PHPでスマートにスワップ(値の入れ替え)をする方法

PHPに限らずスワップ(値の入れ替え・交換)は頻繁に使いますが、定番の書き方といえばこんな感じですよね。

$hoge = 'hoge';
$fuga = 'fuga';

// swap
$temp = $hoge;
$hoge = $fuga;
$fuga = $temp;

説明するまでもないですが、テンポラリ変数(この場合 $temp)を利用して一時的に$hogeの値を$tempに退避させ、$hogeに$fugaの値をコピー、最後に$fugaに$temp(元々の$hogeの値)を入れることで値が入れ替わるという単純明快な書き方です。これはもう、僕も昔から、それこそBASICでプログラミングの勉強というのを始めた頃から使っていた方法です。

今までこれ以外のスワップの書き方なんて考えたこともなかったんですが、PHPだと1文で済ませることができるんですね。有名なテクニックみたいですが、僕はPHP歴はまだそれほどでもないし、ちょっと「ほほう」とか思ったので(笑)

続きを読む

じゃんけん勝敗判定アルゴリズムの思い出

昔、中学生の頃、BASICでプログラミングの勉強をしていて、何の本かは忘れてしまったんですが、たった1行でじゃんけんの勝敗判定ができる計算式というのが載っていました。「たった1行で勝敗判定ができるなんてすげー!」と思ったものです。どんな計算式だったかは正確には覚えていないのですが、とても短い式でした。

やってる内容もよくわからないままその式を組み込んでじゃんけんゲームを作りました。キーボードからグー・チョキ・パーに対応する数字を入力して、コンピュータには乱数発生させて、その式で勝敗判定、結果を表示するというだけのものでしたが。「なんでこれで判定できるんだろう?」って不思議に思ったことを覚えています。僕にとって「プログラミングって面白いなあ」って思った出来事のうちのひとつでして、未だに思い出すことがよくあります。

 

ただ、じゃんけんの判定なんてものはそうそう使う機会はないので、ふと「そういえばあのじゃんけんの式、どんなんだっけな…」と思い出してはその都度考えて作る、ということをこれまでに何度かしています。今回も思い出しがてら作ってみようと思います。これから作るのは当時見たものと完全に同じものというわけではないですが(言語もBASICでしたし)、大筋では同じものになるはずです。

続きを読む