切符くんVW for ChipCard VW-200


"手のひらコンピュータ" VW-200


1. はじめに

 4つの数字と+、−、×、÷、(、)を使って10を作りなさい

・・・誰もが聞いたことのあるパズルをChipCard VW-200で解くためのプログラムです。

 本プログラムはFX-602P用に作った「切符くん」をVW-200用に移植し、改善を加えたものです。 本プログラムはフリーウェアで原則として誰でもお使いいただけますが、いかなる不具合等があっても責任を負いかねますので、これに同意できない方は使用をお控えください。

2. ChipCard VW-200について

 ChipCard VW-200とは、1996年にIBMから発売された手のひらサイズのコンピュータです。 PCMCIAカードスロットに直接挿入して母艦とのデータ転送ができるギミックを有し、 開発環境を利用して自作のプログラムも動作可能な面白いマシンでした(参考: Wikipedia)。


HP-100LXとVW-200 (1997年撮影)

 私は1997年6月に購入していたようですが、その後ほとんど活用していませんでした。 今回、ふとした気まぐれから、少しだけ復活させる気になって作ったのがこのプログラムです。

 なお、VW-200の使用電池であるPR2330が、生産終了で手に入り辛くなっています。 この点については、いずれ試行錯誤した結果を書きたいと思います。

3. 動作環境・インストール

 「切符くんVW」はVW-200専用プログラムで、単体のユーザーアプリケーションとしても、ChipDisk(*1)環境下でも動作します。 ソースはCで書かれており、C88(*2)を使ってコンパイルしてあります。

プログラムをVW-200に転送するには、まずWindows95(98)かOS/2が動作するノートパソコンを用意してください。

…とサラッと書きましたが、現状ではハードル高いかもしれません。 私は昔使っていたFIVA102改をこのためだけに引張り出してきました。 WindowsXPで転送する方法は大変なので、気が向いたら後日まとめを書きたいと思います。

ノートパソコンが用意できたらPCカードスロットにVW-200を挿入し、後は当時と同様のやり方でプログラム本体を転送します。 kippu.psaをChipCard付属のchipldrで転送するか、もしくはChipDisk環境の場合は単にChipDiskへコピーしてください。

 なお、「切符くんVW」作成中にプログラムが暴走して、何回かSRAMをクリアする事態になりました。当然ですがインストールする前には、念のため必ずバックアップをお願いします。

「切符くんVW」 1.03のダウンロード >>> kipvw103.zip (c) K. Miyahara (2010/06/23)

*1
ChipDisk羽鳥正彦氏、高橋敏文氏の作成したFile system + Viewer + Launcherです。
*2
C88は鳥羽克彦氏の作成したクロスCコンパイラです。

4. 使い方

プログラムを実行すると、上に4つの数字が表示され、カーソルが一番左の数字に表示されます。


「切符くんVW」の起動画面

数字キーやカーソルキーを使って4つの数字を適当に変更した上で、一番右のGo!にカーソルを合わせてOKを押すと、計算が開始されます。


計算結果の例

計算が終わると、再び最初の数字にカーソルが戻ります。表示結果はほぼ自明だと思いますが、「x\y」はy÷xを表すものとして読み替えてください。 その他、ルールについては「切符くん」のページも合わせてご覧ください。

5. 解の同一性について

 単純に全ての組み合わせを試すアルゴリズムだと、同じような解がたくさん表示されてしまいます。 そこで、「切符くんVW」では以下の考え方に基づいて、同一とみなされる解を重複して表示しないようにしています。
[1] 恒等変形により同一の式になるものは同一解とみなす。

例 (a+b+c+d)と(a+b+d+c)

[2] 同じ数字の入れ替えは同一解とみなす。

例 (4×+2+0)と(4×2++0)

アンダーラインを引いた2を右に移したと扱って、2回出力したりはしない。

例 (4×2+(3−1))と(4×(3−1)+2)

のように途中の計算結果(=3−1)を元からある数字(=2)と比較して同一視することはしない。この例では、2つとも出力する。

[3] +0と−0だけが異なる式は同一の式とみなす。途中の計算結果が0になる場合も同様とする。

例 (4×2+2+0)と(4×2+2−0)

例 (5×2)+(3−3)と(5×2)−(3−3)

いずれの例もどちらか片方のみ出力する。

[4] ×1と÷1だけが異なる式は同一の式とみなす。途中の計算結果が1になる場合も同様とする。

例 (2+3+5)×1と(2+3+5)÷1

例 (6+4)×(4−3)と(6+4)÷(4−3)

例 ((1+2)÷3+9)と(3÷(1+2)+9) ※分母と分子が等しい場合の入れ替えも同一の式とみなす。

いずれの例もどちらか片方のみ出力する。

[5] +0の位置だけが異なる式は同一の式とみなす。途中の計算結果が0になる場合も同様とする。

例 (4×2+2)+0と(4+0)×2+2

例 (5×2)+(3−3)と(5+(3−3))×2

いずれの例もどちらか片方のみ出力する。

[6] ×1の位置だけが異なる式は同一の式とみなす。途中の計算結果が1になる場合も同様とする。

例 (2+3+5)×1と(2×1+3+5)

例 (6+4)×(4−3)と(6×(4−3)+4)

いずれの例もどちらか片方のみ出力する。

[7] それ以外の特定の数字を前提とする式は、たとえ常に結果が同じでも同一の式とはみなさない

例 (0×0)と(0+0)

例 (2×2)と(2+2)

例 (4÷2)と(4−2)

(0×0)が含まれる式が解の一つであるとき、それを(0+0)に置き換えた式も必ず解の一つであるが、この場合両方を出力する。

6. アルゴリズム

 入力された4つの数字と、3つの演算子でできる全ての組み合わせについてチェックします。 演算子は2つの因数の順序に依存しないよう、内部では5種類の演算子(+、−、×、÷、\)としてチェックしています。 あとは、上に書いたルールにしたがって、重複を排除するように様々な場合分けと工夫をしています。

7. バグ

 具体的に不具合を発見しましたら、作者(ped00725@nifty.ne.jp)までお知らせください。

8. おわりに

 ある日、引き出しの中に昔買ったVW-200を見つけ、ふとした気まぐれで少しだけ復活させてみることにしました。 いろいろと疑問は浮かびますが、とりあえず公開してみました。何かの刺激になれば幸いです。
counter

[ HomePage ]

Last modified 2010/06/23