混ぜ合わせ | package入門(ユーティリティー編) [講座] | 逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓の実践ウェブ rpn hacks!

逆ポーランド電卓rpnの実践ウェブ   
rpn hacks! アールピーエヌ・ハックスサイトマップ

rpn | 講座 | package入門 | ポテンシャルを飛躍的に高めるrpnパッケージを学習。

混ぜ合わせ

 データを扱うとき、整理する方向に考えることはあっても、乱雑な方向に考えることは希です。データの並べ替えも整理する方向です。整理すればどんなデータがあるか目で確認しやすくなります。

では、逆に乱雑な方向とはどんなものでしょうか。乱雑なデータ=バラバラなデータと考えることができます。まず、整理されたデータを用意して、そのデータをバラバラにしてみましょう。

  >rpn @x 1 + #x @x -r 10 >data.txt


「@x 1 + #x @x」で数値を1つずつ増やしながら出力します。「-r 10」で10回の繰り返しを指定しています。つまり、上のrpn式で1から10までの連番が作られることになります。data.txtの内容を見てみましょう。

  >type data.txt
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10


このデータをバラバラにするにはどうすればいいでしょうか。意外に面倒なことに気付くと思います。

まずは乱数でバラバラに

 例えば、乱雑なデータを作る方法には乱数があります。rpnは乱数を発生させる関数を持っていますので、1から10までの数値を10個バラバラに作ってみます。例えばこんな感じです。

  >rpn 10 ? -r 10
  9
  9
  4
  6
  2
  8
  1
  10
  3
  7


「10 ?」で1から10までの数値をランダムに出力して、それを10回繰り返します。確かにバラバラになっていますが、同じ数が出ていますよね(9が2回)。重複なしにバラバラにするのはちょっと面倒な感じです。

重複なしでバラバラに

 そこで、ユーティリティーパッケージではshuffleプログラムを用意しています。具体的に実行例を見てみましょう。

  >rpn -c shuffle <data.txt
  2
  5
  8
  1
  9
  10
  6
  3
  4
  7


1から10の連番データをsuffleプログラムに引き渡すと、重複なしにバラバラのデータになっていることが分かりますね。例のごとく、shuffle'プログラムは横一行のデータ用のプログラムです。

  >echo 1 2 3 4 5 6 7 8 9 10 | rpn -c shuffle'
  4 6 1 2 8 7 3 5 10 9


echoで1から10までの連番の横一行データを作って、それをshuffle'に渡しています(echoについてはdos入門パイプpackage入門(カレンダー・システム編)のエコーを参照のこと)。重複なしのバラバラなデータができていますね。echoを使わずに、以下でも同じ結果になります。

  >rpn 1 2 3 4 5 6 7 8 9 10 | rpn -c shuffle'
  9 10 3 5 1 7 4 2 6 8


rpnに1から10までの連番の横一行データを渡して、そのままshuffle'に引き渡しています。もっと短くしたいなら、以下でも可能です。

  >rpn 1 2 3 4 5 6 7 8 9 10 -c shuffle'
  2 10 6 7 1 8 4 5 3 9


shuffleのようなプログラムはあまり使われないように思いますが、意図的でない抽出(無作為抽出)をするようなときには重宝します。例えば、10名のうちで無作為に3名を選びたいときには上記のrpn式では2番目、10番目、6番目の人を選べばいいわけです。

全ての対象をフォローすることができないサンプル調査などでも、対象を無作為に選ばなければなりません。全数調査はコスト的にも不可能だからです。選挙前に支持政党を電話調査するとき、住人の電話番号は分かっているけど、300人だけをピックアップして調査したいという場合、shuffleはすぐに答えを出してくれます。

警告shuffle'は150個の数値、shuffleは1000個の数値程度を目安に使用してください。

情報本講座で使用したプログラムは、ユーティリティーパッケージとして購入することができます。xypとnpdはrpnの姉妹ソフトウェアです。詳しくはプロダクトを参照ください。

ユーティリティーパッケージ

ユーティリティー

マイスター

カレンダー

警告文字で作られた図表や式が崩れることがあります。ブラウザによっては固定幅フォントをMSゴシックにするときれいに表示されます。それでも崩れる場合は図表や式をメモ帳にコピー後、閲覧下さい。

警告rpn標準版(2kリビジョン)はダブルクォートで囲ってください。

rpn 1 2 + ⇒ rpn "1 2 +"
rpn 1 -c foo ⇒ rpn "1" -c "foo"

ダブルクォートは省略できることが多いのですが、慣れない間は囲んだほうが無難です。なお、本ウェブサイトの記事ではrpn標準版(98リビジョン)を使用しているため囲っていません。詳しくは技術サポートの「rpn TIPS」を参照ください。

注意rpnの障害情報と対策はこちら