2015/02/20

テンキーを回転させる計算式

このエントリーをはてなブックマークに追加
なんていうか練習問題です。頭の体操と思っていただければいいです。
テンキーというのは、1-9までの数字が、ちょうど5を中心に八方を示す配置ですね。下から123と三つずつ、三列並んでいるやつです。
これをぐるっと90度づつ回転させることを考えてみましょう。
if文を9つ(この場合はswitch文だけど)書いてもいいけど。任意のキーnを回転させたとして、計算式で求めてみよう。

右に90度回転させる

右に90度がっと回したとき。
こういうふうにしたい。

計算式
計算式は3掛けて、10でわったあまり。
n=(n * 3) % 10;

180度回転させる

180度回転。反転です。
という感じ。

計算式
計算式は、10引くだけ。
n=10-n;

左に90度回転させる

っていう。

計算式
右に90度回転させて、それを180度回転させると、左に90度回転させたことになる。
n=10-(n*3)%10;

左に90度回転させる(別解)

もしくは、右に回転するときは3掛けたので、その逆算、3でわってあげればいい。
ただし十のくらいが面倒で、3でわれない数字をわれるように十のくらいを補間する必要があります。2桁の数字は、桁のそれぞれの数字を足して3でわれるなら、元の数字も3でわれるという性質があります。

計算式
ごちゃごちゃしますが、下の計算でOKです。(上のほうが簡単ですね)
n = ((2 - (n - 1) % 3) * 10 + n) / 3;

まとめ

ずいぶん前にこういう感じのプログラムを書いたのを、昨日ふと思い出したので書きました。
ものすごく狭いノウハウなので実践で使うことはまずないだろうけれど、頭の体操としての練習課題としては楽しい問題です。
計算式が、こんなんでいいの?っていうくらい簡潔なのがいい。

0 件のコメント :

コメントを投稿