![見出し画像](https://assets.st-note.com/production/uploads/images/114287218/rectangle_large_type_2_c6664d186e5eb33ff1d38fdc2d652b64.jpeg?width=800)
C#で学ぶ!指カレンダーの使い方~指を使ったモジュラ計算(2/4)
yubiの計算について
新旧ともに指カレンダーのコードでは, $${yubi}$$という変数に$${0}$$から$${6}$$までの整数が入力され, それが何度か更新されます. ただし, 更新されたとしても値は再び$${0}$$から$${6}$$までの整数です. その際に行っている入力や計算を, 指を使って行うのが指カレンダーの大きな特徴であり, またその練習次第で大きく回答時間を短縮できる重要な要素です.
指のポジション
では, 指を使ってどう計算するのかの説明に移ります. 左右どちらかの手を使うことになるのですが, 私が慣れていて説明しやすいという都合上, 左手を使う場合について解説します. 右手を使いたい方は説明内容を適当に読み替えてください.
では, 左手を出していただいて, その人差し指, 中指, 薬指に注目すると, 関節で区切られた部分が$${3}$$つずつあると思います. 私たちはこれからそのうちの$${7}$$つに番号をつけます. 人差し指の先, 真ん中, 根もとがそれぞれ$${0}$$, $${1}$$, $${2}$$, 中指の先, 真ん中, 根もとが$${3}$$, $${4}$$, $${5}$$, 薬指の先が$${6}$$です. (なお, 以降では各ポジションは番号のみで呼んだりするのでその際は文脈で判断してください. )
![](https://assets.st-note.com/img/1692248737295-Elhq8QUtah.jpg?width=800)
各ポジションは親指で押さえます. それぞれ無理なく押さえることができるか事前に確認しておいてください. なお, 以降の説明では各位置を親指で押さえた様子を下図のように表します.
![](https://assets.st-note.com/img/1692248829819-Xz7LT4H334.jpg?width=800)
yubiの値を示す方法
$${yubi}$$に対して$${a}$$, ただし$${a=0,1,…,6}$$が入力されていることは, 指のポジション$${a}$$を押さえることによって示します.
例えば$${yubi}$$の値が$${5}$$のときは, 指のポジションの$${5}$$を押さえます. そしてコードのあるタイミングで$${yubi}$$の値が更新されて$${5}$$から$${6}$$へと切り替わったなら, 指のポジションもまた$${5}$$から$${6}$$へと移動させるようにします.
![](https://assets.st-note.com/img/1692248945876-uF29sJ2umc.jpg?width=800)
モジュラ計算
整数$${a}$$,$${b}$$に対して行う$${(a+b) \% 7}$$というような計算は一般にモジュラ計算と呼ばれます. このモジュラ計算はコード内でも使われていて, $${yubi}$$を更新する際に行う$${(yubi + n) \% 7}$$という形の式がそれにあたります. では, この計算を指を使って行う方法を説明します.
1の移動
$${7}$$つある指のポジションのうちで, 好きなところを押さえてみてください. そこから次に, 図のように矢印の先にあるポジションへと押さえているポジションを移動させることを「$${1}$$の移動」と呼びます.
![](https://assets.st-note.com/img/1692249058839-X5NcK4MjVv.jpg?width=800)
まずこの「$${1}$$の移動」を繰り返し行いマッスルメモリーに記憶させましょう. なお, 従来の指カレンダーではこの「$${1}$$の移動」しか使わないので, 続く「$${2}$$~$${6}$$の移動」と「$${0}$$の移動」の説明は飛ばして読んでもかまいません.
2~6の移動
任意のポジションから$${1}$$の移動を$${2}$$回繰り返して到着するところに「ジャンプ」すると, 「$${2}$$の移動」になります.
同様に$${n=3,4,5,6}$$についても, 任意のポジションから$${1}$$の移動を$${n}$$回繰り返したポジションへとジャンプすれば「$${n}$$の移動」となります.
![](https://assets.st-note.com/img/1692249234601-n0P09Jkx0M.jpg?width=800)
![](https://assets.st-note.com/img/1692249257947-nGDL9QAHkG.jpg?width=800)
![](https://assets.st-note.com/img/1692249282992-3mpz9a31vp.jpg?width=800)
![](https://assets.st-note.com/img/1692249304542-NruiPeX0pE.jpg?width=800)
![](https://assets.st-note.com/img/1692249322135-VwTpgRRlTj.jpg?width=800)
0の移動
お気づきかと思いますが, 任意のポジションから$${1}$$の移動を$${7}$$回繰り返したポジションへとジャンプすると元の位置に戻ります. 私たちはそのような移動のことは「$${0}$$の移動」と呼ぶことにします.
![](https://assets.st-note.com/img/1692249343124-lQz46eqHP0.jpg?width=800)
指カレンダーで使うポジションの移動は以上の$${7}$$つですべてとなります. 指カレンダーを使いこなすには, 各々をよく練習して即座に対応できるようにしておく必要があります. その際一番頼りになるのはやはりマッスルメモリーです. とにかく体で覚えましょう. ただ, 次のような視点も持っておくといいかもしれません.
($${1}$$の移動と$${6}$$の移動など)続けて行うと出発点に戻る移動の組み合わせがある.
各ポジションを正方形グリッドの座標と認識する.
指を使ったモジュラ計算
では, 準備が整ったようなので指を使って先ほどのモジュラ計算を行う方法について説明しようと思います. 私たちがしたい計算は$${(a+b) \% 7}$$という形で$${a}$$,$${b}$$は$${0}$$から$${6}$$までの整数です. そこで次のようにしてみてください.
$${a}$$を押さえる.
$${b}$$の移動をする.
すると, 押さえているポジションの番号が$${(a+b) \% 7}$$の計算結果と一致します.
例えば$${(2+3) \% 7}$$という計算なら, 始めに$${2}$$を押さえておいてから, $${3}$$の移動を行います. すると$${5}$$を押さえることになりますが, これが$${(2+3) \% 7}$$の答えです.
![](https://assets.st-note.com/img/1692249397612-7mq4zzvg8U.jpg?width=800)
この記事が気に入ったらサポートをしてみませんか?