IQ120関数でも作って遊ぶか

[tex:]

あ〜〜〜ヒマだな。関数でも作って遊ぶか。

www.ajimatics.com

きっかけ

以前Twitterでこんなツイートを見かけました。

これが解けたらIQ120!?

5 + 3 = 28
9 + 1 = 810
8 + 6 = 214
5 + 4 = 19
7 + 3 = ??

#解けたらRT

僕「………」

僕「こういうことかな?」

これが解けたらIQ120!?

5 + 3 = 28 8
9 + 1 = 810 10
8 + 6 = 214 14
5 + 4 = 19 9
7 + 3 = ?? 10

#解けたらRT

僕「もしかしてIQ120!?というのはIQが120!ということか!?調べたら200桁くらいあったぞ。相当なIQなんだな」

真面目に考えよう

まあ真面目に考えるにあたって+演算子を使われると非常に気持ち悪いので、2つの値から1つの値を計算するということで勝手に関数を作っちゃいましょう。

\begin{align}
f(5,3)&=28\\
f(9,1)&=810\\
f(8,6)&=214\\
f(5,4)&=19
\end{align}
このとき、f(7,3)を求めよ

念のため解説します。

自然数m,nに対してm-nm+nを計算し、それを連結したものがf(m,n)の値となります。

よってf(7,3)の値は\begin{align}
7-3&=4\\
7+3&=10
\end{align}となるため、これらを連結してf(7,3)=410となります。これが解けたならあなたはIQ120です!らしいです!おめでとうございます!

数学好きはすぐ一般化したがる

ところでf(m,n)mnを用いた式で表すことはできるのでしょうか?
鯵坂もっちょさん(冒頭記事リンク参照)が結構楽しそうな関数を作っていたので、せっかくなので僕もチャレンジしてみましょう。

方針

mnの和と差を用いて連結するので、とりあえず\begin{align}
A&=m-n\\
B&=m+n
\end{align}としちゃいましょう。
そうするともうmnの和と差について考える必要が無くなり、ABを連結することが次の目標になります。
また、ここではm>nとしておきましょう。

連結ってどうするんや

たとえばA=123B=89を連結しようと考えた場合、ちゃんと計算すると\begin{align}
&123 \times 100 + 89\\
=&12300 + 89\\
=&12389
\end{align}
ということになります。
ここで123にかけられている100(=10^2)は、89が足されるスペースを確保しているわけですね。

ちなみに123789を連結する場合は$$
123\times 1000 + 789
$$となり1000(=10^3)をかける必要があります。

このように、左に連結する数にかけられる数は、10の(右に連結する数の桁数)乗になることがわかります。

桁数ってどうするんや

アイツの出番のようですね。
\log_{10}nです。nの桁数を求めることができます。

ただしこの関数はn100\cdots0というキレイな数字のときはキレイに桁数(+1の値)を得ることができますが、そうでない場合は$$
\log_{10}123=2.08\dots
$$のように汚い(?)値になってしまいます。

なので、Bの桁数を得るには$$
\lfloor\log_{10}B\rfloor+1
$$とすれば良さそうです。\lfloor\>\rfloorというカッコは、中に入っている値を切り捨てて整数にしちゃうすごいカッコです*1

結局どうなったん

Bの桁数を得ることができたので、求める値はこうなりますね。$$
A \cdot 10^{\lfloor\log_{10}B\rfloor+1} + B
$$ABの値を元に戻してみましょう。$$
f(m,n)=(m-n)\cdot 10^{\lfloor\log_{10}(m+n)\rfloor+1} + (m+n)
$$

できた!

遊んでみよう

f(5,3)の値は?(差と和は28)
f:id:canaan1008:20180101002840p:plain
お?

f(9,1)の値は?(差と和は810)
f:id:canaan1008:20180101002920p:plain
おお??

もうちょっと適当な値でもやってみましょう。
f(93,60)の値は?(差と和は33153)
f:id:canaan1008:20180101002953p:plain
おおお〜〜〜!!!

みなさんにもこの感動を分かち合いたいのでDesmosのリンクを貼っておきます。
https://www.desmos.com/calculator/r2d8sc6tvz
みんなもmnをグリグリ弄って遊ぼう!!(ただし自然数であることとm>nであることに注意)

応用

m>nという制約を外したらどんな感じかな……f(3,7)=-410みたいにマイナスが先頭に来るのが妥当かな。
というか自然数という制約を外して整数全体だったら?というか小数でも似た関数を作れたりするのかな。そのまま連結したらf(12.3, 4.56)=7.7416.86になるのか……小数点が増えちゃった!まあいいか(良くない)。

みたいに頭を巡らせていたら年が開けていました。
あけましておめでとうございます。

補足

自然数ABをつなげて新しい数を作ると、$$
A \cdot 10^{\lfloor\log_{10}B\rfloor+1} + B
$$となるのか……普通に使えそう。メモメモ

*1:Desmosに投げて値を計算する際はfloor関数を用いています。意味は同じです。使えるなら\lfloor\>\rfloorこのカッコを使ったほうが見栄えがいいかなと思ったのでこちらを使って記事は書いています。