# ゲームの目的
一本の木の上に、右を向いたカエル(A)と左を向いたカエル(B)が4匹ずつ、並んでいます。カエルA, B の間には、カエル1匹が入るだけの狭い空間(_)があります。
BBBB_AAAA
カエルA, B は、お互いに「向こう側」に行きたがっているのですが、細長い木の上なので、身動きが取れません。そこで、カエルをつついて移動させ、つぎの状態に持っていくのが、このゲームの目的です。
AAAA_BBBB
1本の木の上なので、カエルをつつく事で、
- のそのそと、となりのコマに移動できます
- 一匹分のスペースをジャンプして、移動できます
123456789 ←場所 (インデクス) BBBB_AAAA ←カエルの配置状態 (ステージ)
最初は、3, 4, 6, 7 のカエルのみが移動できます。例えば、ここで3のカエルをつついて移動させると、3に居たカエルは4のカエルをジャンプで飛び越し、5へ移動します。
123456789 ←場所 (インデクス) BB_BBAAAA ←カエルの配置状態 (ステージ)
こうしてカエルをつついて移動させ、最終的に
123456789 ←場所 (インデクス) AAAA_BBBB ←カエルの配置状態 (ステージ)
の状態に持って行きます。
慣れてきましたら、カエルを移動させる回数を出来るだけ少ない手順で行う方法を探求してみるのが面白いでしょう。
簡単なパズル・プログラムなので、高機能電卓でも十分楽しめるプログラムが作成できると思います。
この記事では、久しぶりにHP35Sで動くプログラムを作成しました。
# 使い方
HP35S では、文字列の加工が出来ないので、苦肉の策として16進数表示を使ってみました。空白の表示は「C」となっています。
- [XEQ] L [ENTER] で起動
- C = 1 の様に、試行回数を表示
- つぎの書式でステージを表示
123456789h ←インデクス
BBBBCAAAAh ←「カエル」表示 - 移動対象のカエルをインデクスにて指定し、[R/S] を押して入力します
- 「上がり」状態になれば「CLEAR !」と表示され、最後に操作回数を表示して、プログラムは終了します
- 上がりでなければ、2. へ戻り、繰り返しになります
C 試行回数
I, J 配列変数操作インデクス
M 移動するカエルの位置
S 空白の位置
Reg(1)...R(9) ステージ状態
# プログラム
L001 LBL L L002 DEC L003 1 L004 STO I L005 4 L006 STO(I) L007 1 L008 STO+ I L009 4 L010 STO(I) L011 1 L012 STO+ I L013 4 L014 STO(I) L015 1 L016 STO+ I L017 4 L018 STO(I) L019 1 L020 STO+ I L021 3 L022 STO(I) L023 1 L024 STO+ I L025 5 L026 STO(I) L027 1 L028 STO+ I L029 5 L030 STO(I) L031 1 L032 STO+ I L033 5 L034 STO(I) L035 1 L036 STO+ I L037 5 L038 STO(I) L039 1 L040 STO C L041 5 L042 STO S L043 VIEW C L044 PSE L045 1.009 L046 STO I L047 0 L048 16 L049 * L050 RCL(I) L051 + L052 ISG I L053 GTO L048 L054 1 L055 + L056 +/- L057 ENTER L058 ENTER L059 AAAACBBBBh L060 x=y? L061 GTO L092 ; 上がり判定 L062 R↓ L063 123456789h L064 x<>y L065 HEX L066 STOP ; 入力部分 L067 DEC L068 STO M ; L069 RCL S L070 - L071 ABS L072 2 L073 xL074 GTO L089 ; 入力が範囲外か ? L075 RCL M L076 RCL S L077 x=y? L078 GTO L089 ; 空き位置の指定 ? L079 RCL M L080 STO I L081 RCL S L082 STO J L083 RCL(I) L084 STO(I) L085 3 L086 STO(I) L087 RCL M L088 STO S L089 1 L090 STO+ C L091 GTO L043 L092 1 L093 STO- C L094 SF 10 L095 CLEAR ! L096 PSE L097 CLEAR ! L098 PSE L099 CLEAR ! L100 PSE L101 CF 10 L102 VIEW C L103 RCL C L104 RTN
このプログラムでは両側に4匹ずつのカエルが配されています。この場合、最小の手数が24手になるとの事です。
詳しくは、次のサイト様で色々な解説がありますので、御参考下さい。
『カエル跳びゲーム』解答
http://math.a.la9.jp/akaeru.htm
かなり昔に、ポケコンでプログラムを作ったのですが、その時は「最小の手数が24手」というのが、どうにも判らんかったのでした。
10 件のコメント:
akatuki様
ついに貯まったマグマの爆発ですね!
お疲れ様です。
カエル飛びゲームは、知りませんでした。これなら カシオのプロ殿にも実装できそうです。
・ゲーム終了の判定
複数の方法が思いつきます。OK
・2匹のカエルを文字で表現...問題なし
・カエルの操作と動きの最善...これもOK
あとは、通勤電車でポチポチとプログラム作るだけ...かも
面白そうです。
hp35sのコードは、まるで暗号のようですね。
スタックを積極利用したアルゴリズムは、これまで一度も考えたことないのですが、こういう簡単なゲームだと挑戦できるかも知れません...って、やったことも無いのにお気楽なこと言っておりますが...
アセンブラの素養が殆ど無い私には、高級言語でないと大変なのは間違いないところではあります。
akatuki様、こんばんは!
カエル跳びゲームは初めて知ったのですけど、一行表示のゲームはまさにプロ電やポケコンというところで懐かしすぎますね(^^)
動き方のルールとか見るとハノイの塔みたいな感じでしょうか。
HP35SのソースはHP50GのRPLを使うようになってから、以前よりは読めるようになってきました(^^;
やす様、こんにちは!
fx-5800Pへの移植はスムーズにいきそうですね(^^)
>カシオのプロ殿
プロ電よりもしっくりくるかも?(^^;
sentaro様
>>カシオのプロ殿
>プロ電よりもしっくりくるかも?(^^;
うはは、2チャンみたいですね...
どうせfx-5800Pに移植するなら、広い画面を利用してカエルの移動に動きを付けてみようかと...
あと、2種類のカエルの数を自由に変えられるとか、バリエーション付けられそうです。
sentaro様のおかげで(せいで)hp50g への興味津々...Amazonのほしい物リストに入れてしまいました。今年いっぱいで生産中止だとどこかで見ました。なので、余計そそられます。
今日は、¥14,200 でした。
ところで、Amazonでは、hp50g に2種類あって、並行輸入品の方が高い価格設定になっています。これらは細かいオプションが違っているなんてこと、あります?
あと、カスタマーレビュ-を見ると、CDに日本語マニュアルが入っているとのコメントがあります。sentaro様のは日本語のpdfが入っていました?
やす (Krtyski) 様、いらっしゃい !
> ついに貯まったマグマの爆発ですね!
恐れ入ります !
> カエル飛びゲームは、知りませんでした。これなら カシオのプロ殿にも実装できそうです。
> ・ゲーム終了の判定
> 複数の方法が思いつきます。OK
> ・2匹のカエルを文字で表現...問題なし
> ・カエルの操作と動きの最善...これもOK
> あとは、通勤電車でポチポチとプログラム作るだけ...かも
> 面白そうです。
そうでしょう !
fx-5800pでやってみて欲しく思い、記事をアップしたのでした。
> hp35sのコードは、まるで暗号のようですね。
35Sは、いわゆる「電卓言語」ですから、少々読みにくいのです、ハイ。
> スタックを積極利用したアルゴリズムは、これまで一度も考えたことないのですが、こういう簡単なゲームだと挑戦できるかも知れません...って、やったことも無いのにお気楽なこと言っておりますが...
35sはスタックが4段しかなく、計算を展開して進める程度の事でありますから、気軽に作業できます。
ただ、再帰処理の様にスタックを積極的に使う、となると、4段スタックは少々手狭だったりしますネ。
> アセンブラの素養が殆ど無い私には、高級言語でないと大変なのは間違いないところではあります。
確かに、35sのコードってアセンブラっぽいですネ。
当方、アセンブラも最近は遠ざかっておりまして、なかなか大変だったりします。
しかし、35sのインストラクションはキー操作そのものなので、電卓を叩く要領でプログラミングであり、そこそこやりやすかったりするワケです。
fx-602Pとかと同じ様な感じですが、そこへRPNが追い打ちを掛ける、という ... 。
> どうせfx-5800Pに移植するなら、広い画面を利用してカエルの移動に動きを付けてみようかと...
> あと、2種類のカエルの数を自由に変えられるとか、バリエーション付けられそうです。
イイですね !
> sentaro様のおかげで(せいで)hp50g への興味津々...Amazonのほしい物リストに入れてしまいました。今年いっぱいで生産中止だとどこかで見ました。なので、余計そそられます。
生産終了ですか ? ウーン、マイッタなぁ。
ならば、ここはイッパーツ、ポチっと ... ? 結構遊べますヨ。当方、未だに全機能を試していない位ですから ... 。
先ずは、Debug4x に収録されているエミュレータで、少しいじるのも面白いかと思います。
Leapfrogsのプログラムは、大まかな所は作りやすいのですが、細かい所を工夫出来そうで、そこが面白いのだと思うのです。ちょっとした時間でもプログラムの改良が出来ますから「通勤プログラム」にはちょうどいい、かも。クロスワードパズルを解くような感じですネ。
やす様、こんにちは!
>どうせfx-5800Pに移植するなら、広い画面を利用してカエルの移動に動きを付けてみようかと...
>あと、2種類のカエルの数を自由に変えられるとか、バリエーション付けられそうです。
速度的な問題はないと思われるのでアレンジは自由に出来そうですね。
fx-5800Pバージョン楽しみです(^^)
>sentaro様のおかげで(せいで)hp50g への興味津々...Amazonのほしい物リストに入れてしまいました。今年いっぱいで生産中止だとどこかで見ました。なので、余計そそられます。
ぉお!やす様もついにHP50G を!(笑)
いよいよ無くなるかと思うとなんか落ち着かないですよね(^^;
50Gに関しては私も今年になってから生産終了という噂を聞いていたたので今年が最後の新品入手チャンスと考えて、ほしい物リストで様子見をしていたらジュライさんが一気に値下げでど~んと在庫が出てきて、その在庫がみるみるうちにどんどん減っていくので慌てて買ってしまいました。今考えると慌てなくてもよかったのかもというのもありますけど、ジュライさんもあれから在庫出てきてないですし、今年で生産中止というのも間違いなさそうな感じですね。
、
HPの電卓はRPNに馴染めるかどうかが分かれ道だと思うのですけど、言語的にはUserRPLはFX-602Pの電卓言語を高級言語っぽく複雑にしたようなものと考えれば間違いありません。アセンブラよりは高級言語に近いのでCasioBasicを電卓言語っぽくしたとも言えなくもないと思います。
そこから先に進んでSysRPLとなってくると若干アセンブラっぽく難解になってきますけどそれでもまだ高級言語感は残ってて、Saturnのアセンブラ、そしてARMのアセンブラとなると完全にアセンブラですけど、言語的に段階を踏んで難解になってもその分、高速化の恩恵があったり出来ることが増えたりと、深く掘り下げても掘り下げても底の見えないマリアナ海溝並みの深さを感じるのが50Gです。さらにHPGCCも使えますからfx-9860GII以上に何でもありですね。
RPLに少しでも興味が沸いたらRPL電卓の集大成としてのHP50Gは買って損はない一品だと思いますけど、いまどきの電卓からすれば癖ありまくり機種なので(^^;
akatuki様もおっしゃってますようにDebug4x付属のエミュで一通り試せるので、まずはお試しをお勧めします(^^)
>今日は、¥14,200 でした。
私が買った時は\14800でしたけど、あれから在庫店がかなり増えたきたように思うのはやはり今年で最終という感じなのかもしれません。
>ところで、Amazonでは、hp50g に2種類あって、並行輸入品の方が高い価格設定になっています。これらは細かいオプションが違っているなんてこと、あります?
私の買ったのは本体には2014年製のシリアル付いてて添付CDは2009年版だったので、もし、2009年よりも古い在庫が残っていたとしたら分からないですけど、たぶん今在庫のあるのは全部2014年製か最終2015年製というところであればどれも同じかと思われます。
>あと、カスタマーレビュ-を見ると、CDに日本語マニュアルが入っているとのコメントがあります。sentaro様のは日本語のpdfが入っていました?
はい。
2009/9/21版のHP 50g_user's guide_Japanese.pdfというファイル名の日本語ユーザーズマニュアルが収録されていました。
ただ、この日本語版マニュアルは英語版のuser’s manualの翻訳版みたいで、グラフ電卓としての基本機能までのマニュアルで、プログラミング言語のところから先は英語版のuser’s guideとadvanced user’s reference manualを読む必要ありですね。
もしかして、またまたスパム扱いに?(汗)
akatuki様、お手数おかけしますです。m(_ _)m
Sentaro 様、コメント多謝 !
早速、回復しておきました。
akatuki様
>そうでしょう !
>fx-5800pでやってみて欲しく思い、記事をアップしたのでした。
あぁ、やっぱりそうでしたか...ボチボチやってみますね。
ついでに、ウチのブログのネタにもさせて頂こうかなぁ....
>生産終了ですか ? ウーン、マイッタなぁ。
>ならば、ここはイッパーツ、ポチっと ... ? 結構遊べますヨ。当方、未だに全機能を試していない位ですから >... 。
>先ずは、Debug4x に収録されているエミュレータで、少しいじるのも面白いかと思います。
さっそくダウンロードして、使ってみています。電卓の恰好をした謎の箱って感じですね。
先ずは、Tutorial を読みながら...結構時間がかかりそうです。
http://resources.thiel.edu/mathproject/CalculatorLessons/Default.htm
でも面白いですね...
sentaro様
>ぉお!やす様もついにHP50G を!(笑)
>いよいよ無くなるかと思うとなんか落ち着かないですよね(^^;
そうなんです。歴史的な機種なので、物欲がふつふつと...
電卓の開発の歴史に関する日本語の読み物を色々と読んでいるのですが、電卓戦争とか技術立国日本って感じで、何故か1990年代で話が終わっているものばかり...日本と世界を一度に俯瞰したプログラム電卓の歴史は誰も書いていないように思うんです。
世界初のポケットサイズでバッテリーバックアップされた半導体メモリに記録するプログラム電卓は 1976年発売のhp25cで、私としてはこれがプロ電始まりと考えたいわけです。その僅か2年度に、Casio FX-502P が登場。Casioは凄い...となるわけです。で、未だに稼働する FX-502P を持っている自分の幸運さに拍手喝采!
そんなわけで、先ずは英語のソースを当たり始めていて、Wiki あたりを調べると結構色々あります。で、hp50g が歴史的な製品であるように思えてきています。
RPLだけでなく、UserRPL、SysRPL、それからgcc、本当におっしゃるように何でもあり。SysRPLよりは gccの方が私にはまだ手が届きそう??なので、それが救いなわけです(救いにならないかも...)。
Casio色にすっかりと染まってしまっているので、却って全てが新鮮です。
RPN 自体は、以前ボランティアで、Mindと言う開発言語(FORTHに似たもの)で、簡単なデータベースソフトを作ったことがあって、いわゆる逆ポーランド記法には多少の免疫ができています。
四則演算は、お二方にご紹介頂いたエミュレータでもまぁ使えます。hp50g は、スタックが一覧で見えるのが便利ですね。
但し、RPL と FORTHはまたまた違う感じがしています。きっと頭の使い方の基本は同じなのかも知れませんが、キーストロークの記録って感じと FORTHライクな言語の記述は、ギャップが大きいですね。
土曜は大抵仕事で、合間にブログ書いたりしていますが、日曜はまったりと Tutorialでも読みながら過ごしてみようと思っています。
お勧めのように、先ずはエミュレータで間合いを詰めてから、その先どうするのか、、考えてみようとは思います....まぁ、きっとぽちっlとしてしまうのでしょうが...
やす (Krtyski) 様、お晩です。
> あぁ、やっぱりそうでしたか...ボチボチやってみますね。
> ついでに、ウチのブログのネタにもさせて頂こうかなぁ....
どうぞどうぞ !
記事があってこそのblogですから、バンバンやって下さい !
> 但し、RPL と FORTHはまたまた違う感じがしています。きっと頭の使い方の基本は同じなのかも知れませんが、キーストロークの記録って感じと FORTHライクな言語の記述は、ギャップが大きいですね。
RPLにはLisp要素もチョッピリ入っているので、そこも面白かったりします。
コメントを投稿