「Leapfrogs」というゲーム(というかパズル ?)があります。
# ゲームの目的
一本の木の上に、右を向いたカエル(A)と左を向いたカエル(B)が4匹ずつ、並んでいます。カエルA, B の間には、カエル1匹が入るだけの狭い空間(_)があります。
BBBB_AAAA
カエルA, B は、お互いに「向こう側」に行きたがっているのですが、細長い木の上なので、身動きが取れません。そこで、カエルをつついて移動させ、つぎの状態に持っていくのが、このゲームの目的です。
AAAA_BBBB
1本の木の上なので、カエルをつつく事で、
最初は、3, 4, 6, 7 のカエルのみが移動できます。例えば、ここで3のカエルをつついて移動させると、3に居たカエルは4のカエルをジャンプで飛び越し、5へ移動します。
こうしてカエルをつついて移動させ、最終的に
の状態に持って行きます。
慣れてきましたら、カエルを移動させる回数を出来るだけ少ない手順で行う方法を探求してみるのが面白いでしょう。
簡単なパズル・プログラムなので、高機能電卓でも十分楽しめるプログラムが作成できると思います。
この記事では、久しぶりにHP35Sで動くプログラムを作成しました。
# 使い方
HP35S では、文字列の加工が出来ないので、苦肉の策として16進数表示を使ってみました。空白の表示は「C」となっています。
C 試行回数
I, J 配列変数操作インデクス
M 移動するカエルの位置
S 空白の位置
Reg(1)...R(9) ステージ状態
# プログラム
このプログラムでは両側に4匹ずつのカエルが配されています。この場合、最小の手数が24手になるとの事です。
詳しくは、次のサイト様で色々な解説がありますので、御参考下さい。
『カエル跳びゲーム』解答
http://math.a.la9.jp/akaeru.htm
かなり昔に、ポケコンでプログラムを作ったのですが、その時は「最小の手数が24手」というのが、どうにも判らんかったのでした。
# ゲームの目的
一本の木の上に、右を向いたカエル(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手」というのが、どうにも判らんかったのでした。