Quantcast
Channel: 高機能電卓の情報
Viewing all articles
Browse latest Browse all 149

「Leapfrogs !」

$
0
0
「Leapfrogs」というゲーム(というかパズル ?)があります。

# ゲームの目的

一本の木の上に、右を向いたカエル(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」となっています。
  1.  [XEQ] L [ENTER] で起動
  2. C = 1 の様に、試行回数を表示
  3. つぎの書式でステージを表示

    123456789h    ←インデクス
    BBBBCAAAAh    ←「カエル」表示
  4. 移動対象のカエルをインデクスにて指定し、[R/S] を押して入力します
  5. 「上がり」状態になれば「CLEAR !」と表示され、最後に操作回数を表示して、プログラムは終了します
  6. 上がりでなければ、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手」というのが、どうにも判らんかったのでした。

Viewing all articles
Browse latest Browse all 149

Trending Articles