ねずみ算の続きあるいは単位換算のこと

　[アドベントカレンダー1日目](https://qiita.com/snowdrops89/items/2b2ce554487cc4c0653c)で、ねずみ算についてやりましたが、実はこのねずみ算の問題には続きがあります。

> https://dl.ndl.go.jp/info:ndljp/pid/3511858/66


# 米を食べるねずみ
>　**この二百七十六億八千二百五十七万四千四百二匹のねずみが、一月に米を一匹あたり半合食べるとすると一月分の米は？**
>
>※　1石(こく)=10斗、1斗(と)=10升、1升(しょう)=10合。1合(ごう)=約180.39ccです。

　という問題で、答えは・・・

>**千三百八十四万千二百八十七石二斗一合**

　ですって！
　お蔵が空になっちゃう！！！
　ていうか、加賀百万石とか言うくらいのもので、一万石以上あったらお大名だったんですから、こりゃ大変なことです。
　ねずみヤバイ＞＜

## 単純に換算
　ねずみどもが一月に食べる米の量は何合かと言えば、一匹あたり半合食べるというのだから、ねずみの数の半分・・・２で割ればいいだけ。
　ねずみ・・・実際は、もっと食べますけどね！

```
ねずみ＝「二百七十六億八千二百五十七万四千四百二」の算用数字。
合＝ねずみを２で割る。
「{ねずみの漢数字}匹のねずみが一月に食べる米の量は」を表示。
「{合の漢数字}合」を表示。　# 百三十八億四千百二十八万七千二百一合
```

　ではこれは何升で、何斗で、何石なのか。
　単位の換算については、大分前ですがマイナビにも記事がありました。

> [第5回　単位変換ツールを作ってみよう](https://news.mynavi.jp/article/nadeshiko-5/)

　**１坪は約3.305㎡**なので、坪から㎡へ変換するなら、

```
　平米＝坪*3.305
```

　㎡から坪へ変換するなら、

```
　坪＝平米/3.305
```

　みたいな？

　**1升は10合**なので合から升を求めるには、**合を10で割**ればいいんですよね。
　1斗は10升なので10*10で100合、1石は10斗なので1000合・・・

```
ねずみ＝「二百七十六億八千二百五十七万四千四百二」の算用数字。
合＝ねずみを２で割る。
升＝合を10で割る。
斗＝合を100で割る。
石＝合を1000で割る。

「{ねずみ}匹」を表示。　# 27682574402匹
「{合}合」を表示。　# 13841287201合
「{升}升」を表示。　# 1384128720.1升
「{斗}斗」を表示。　# 138412872.01斗
「{石}石」を表示。　# 13841287.201石
```

　同じ単位系だし普通に十進法だし別に難しいことも無く、なでしこさんに計算していただくほどのことでもなく、小数点が一個ずつずれてくだけ。
　でも、桁が多すぎてめっちゃ見辛い～(´д｀)
　単位の換算をお試しする例題としてはマッタク相応しくなかったですね・・・
　でも、まけません！　このままがんばる。

　ともかく、こういった単純な1対1の換算をしてくれるサイトは沢山あるんですが、やりたいのはこうじゃない。
　答えのとうりに、単位付きで何石何斗何升何合と表示したいです。

## 単位付きで換算
　大きい単位を求めたら、その整数部分だけを価として、余った部分からさらに小さい単位を求めることを繰り返せばいいんですよね。

```
ねずみ＝「二百七十六億八千二百五十七万四千四百二」の算用数字。
合＝ねずみを２で割る。
石＝合を1000で割って、それの整数部分。
斗＝合を1000で割った余りを100で割って、それの整数部分。
升＝合を100で割った余りを10で割って、それの整数部分。
合＝合を10で割った余り。

「{ねずみの漢数字}匹のねずみが一月に食べる米の量は」を表示。
「{石の漢数字}石」を表示。　# 千三百八十四万千二百八十七石
「{斗の漢数字}斗」を表示。　# 二斗
「{升の漢数字}升」を表示。　# 零升
「{合の漢数字}合」を表示。　# 一合
```

　出ました！
　合っていますね☆

# 海を渡るねずみ
　問題は、もう一つあります。

>　**ねずみ一匹の体長を四寸として、この二百七十六億八千二百五十七万四千四百二匹のねずみが、尾っぽに食いつき食いつきして繋がり、海を渡って唐の国まで行こうとする時、その長さは？**
>
>※　1里(り)=36町、1町(ちょう)=60間、1間(けん)=6尺5寸(*)、1尺(しゃく)=10寸。1寸(すん)=約3.0303cmです。

　答えは、

>**七十八万八千六百七十七里十二町八寸**

　だそうです。

　尻尾に食いついた分で何ミリか短くなるんじゃ？　とかは考えないで下さい。そもそも渡れるかよ！　って話しですｗ
　話は一段と壮大になりましたが、問題の内容から言えば単位が体積から距離に変わっただけ。
　でも、体積の方はそれでも十進法だから良かったですけど、長さ（距離）の単位ときたら！
　とはいえ、考え方は同じハズです。
　寸を基準の１として、換算の係数を順々掛けていけばいいんですよね。

　しかし、間と尺との換算が今とは違うっぽい・・・（*現在は公には尺貫法は認められていませんが、慣例的に用いられる価は1間＝6尺ってことになっています）
　吉田光由さんは上方の人だから、京間の一間なんですかね・・・？

　でもま、今のところは答えを合わせるのが目的ですから、深く考えずこのまま問題どうりに！
　プログラムもそのまま流用して・・・
　おっと、`～の間（あいだ）`構文があるから`間（けん）`が使えない～（＾▽＾；
　日本語は日本語で難しい；；；
　でも、こんな感じ？

```
ねずみ＝「二百七十六億八千二百五十七万四千四百二」の算用数字。
寸＝ねずみに４を掛ける。
里＝寸/(36*60*65)の整数部分。
町＝寸%(36*60*65)/(60*65)の整数部分。
ケン＝寸%(60*65)/(6.5*10)の整数部分。
尺＝寸%(6.5*10)/10の整数部分。
寸＝寸%10。

「四寸のねずみが{ねずみの漢数字}匹、縦一列に繋がった長さは」を表示。
「{里の漢数字}里」を表示。　# 七十八万八千六百七十七里
「{町の漢数字}町」を表示。　# 十二町
「{ケンの漢数字}間」を表示。# 零間
「{尺の漢数字}尺」を表示。　# 零尺
「{寸の漢数字}寸」を表示。　# 八寸
```

　合っています！

　計算部分は、数字が多くなったこともあり、計算式的な書き方にしました。
　「/」は「割る（÷）」を、「%」は「割った余り」を表す演算子です。

> [なでしこ3で使える演算子](https://nadesi.com/v3/doc/index.php?%E6%96%87%E6%B3%95%2F%E6%BC%94%E7%AE%97%E5%AD%90&show)

　何だかんだ言っても、式が長かったり複雑な計算をしようとした時には、むしろこっちの方が見やすいですよね。

# メートル法との換算
　計算して、答えのとうりに表示することはできました☆
　でも、桁が多くてなんかすごそうなことは分かりますが・・・実際のところどのくらいなんですかね？
　現代人にも分かりやすくメートル法に換算してみたい。
　単位系が変わると割りきれない数になったりして、ずらーっと数字並んでうんざりするけど、計算はなでしこさんがやってくれるしやることは変わらない・・・ハズ。

## 換算の係数
### 升とリットル
　日常では、**一合は約180cc**として扱いますが、実際には**180.39068369646882**...てな具合にず～っと続きます(´д｀)
　これは、**1リットルは1331/2401升**ってコトのようです。升が基準なのね。

```
升＝リットル*(1331/2401)
リットル＝升*(2401/1331)
```

　みたいな？

### 寸とメートル
　**1寸は約3.0303センチメートル**。これも割り切れず永遠に続く数ですが**1/33**、ようするに、**1メートルは33寸**ってコトです。

```
寸＝メートル*３３
メートル＝寸/３３
```

### 里とメートル
　ここで問題になるのが、一里は何メートルかってコトですよね～。
　通常であれば、**1里は約3927.27メートル**なのですが、これは**1里＝36町＝2160間**、そして**1間＝6尺**として計算した結果ですが、今回の場合は**1間＝6尺5寸**なわけで、**約4254.54メートル**ってことになる。
　京間の1間＝6尺5寸は建築物の場合かと思っていたら、距離の場合にも普通に使われるとなると・・・えっ、江戸と上方じゃ一里の長さも違うってコトになっちゃいやしませんかΣ（゜д゜；
（[うぃきぺでぃあさまによると](https://ja.wikipedia.org/w/index.php?title=%E9%87%8C&action=edit&section=4#%E4%B8%AD%E4%B8%96%E3%83%BB%E8%BF%91%E4%B8%96)、伊勢道その他で実際にそういう例があるみたい）

　そもそも、元々は寸だったのを里、町表示に換算したんですから、全部寸でやれば良いだけなんですが、なんだかちょっと気になっちゃって（＾▽＾；（こうしてテストの時間を浪費する人でした；；；）

## 変換元をまとめる
　ここでは、いきなり「千三百八十四万千二百八十七石二斗一合」とか「七十八万八千六百七十七里十二町八寸」を換算したい！　とゆうコトにします。
　各単位の数それぞれに係数を掛けてメートル法に直していくことも考えられますが、今回の特に距離の問題など、ややこやしいから全部寸で計算したいよね～。
　そうでなくても、違う単位系への変換係数には割り切れない数が多くて、当然どこかで丸めなきゃなので、掛ける回数が多ければそれだけ誤差が広がっちゃいます。
　とゆうわけで、先に同じ単位系で一つの単位にまとめた方が良さげなので、米は升に、距離は寸にまとめることにします。

　とはいえ、まずは単位ごとにバラさなきゃです。
　なでしこには、`切り取る`という便利な命令がありますよ。ただし、ｖ１とｖ３では仕様がちょっと違うので、注意が必要です。
　・・・て、おぉ！？　ｖ３の`切り取る`命令が、とっても便利になってる！！！

https://nadesi.com/v3/doc/index.php?plugin_system%2F%E5%88%87%E5%8F%96&show

　切り取ったものは特殊変数`それ`に入るのですが、切り取られた残りの部分が`対象`に入るようになっています！（v3.2.28から）
　ｖ３の切り取るはｖ１のに比べて使いづらい印象があったのですが、これでバッチリいい感じ♪
　このサンプルどうりで出来そうですね☆

```
米＝「千三百八十四万千二百八十七石二斗一合」
米の「石」まで切り取って表示。　# 千三百八十四万千二百八十七
対象の「斗」まで切り取って表示。　# 二
対象の「合」まで切り取って表示。　# 一

距離＝「七十八万八千六百七十七里十二町八寸」
距離の「里」まで切り取って表示。　# 七十八万八千六百七十七
対象の「町」まで切り取って表示。　# 十二
対象の「寸」まで切り取って表示。　# 八
```

　できました！
　他に、v3.2.30から追加された[`文字列分割`](https://nadesi.com/v3/doc/index.php?plugin_system%2F%E6%96%87%E5%AD%97%E5%88%97%E5%88%86%E5%89%B2&show)という命令も、同様の処理が可能です。
　今回の記事はもう、ダラダラと着地点を見失いかけていましたが、ここで新しい命令や機能を紹介できて満足です（えっ）

　あとはもう、これらを`算用数字`にして、「単純に換算」した時と同様にして目的の基本の単位に換算し、全部足すだけですね☆

```
石＝「千三百八十四万千二百八十七」の算用数字。
斗＝２。
合＝１。
((石*1000)+(斗*100)+合)/10を表示。　# 1384128720.1升

里＝「七十八万八千六百七十七」の算用数字。
町＝１２。
寸＝８。
(里*36*60*6.5)+(町*60*6.5)+(寸*0.1)を表示。　#11073029760.8寸
```

## 換算する
　まとめた変換元に、換算の係数を掛けるだけ！

```
1384128720.1*(2401/1331)を表示。　# 2496839261.4275734(リットル)
11073029760.8/3.3を表示。　# 3355463563.878788(メートル)
```

　（色々すっ飛ばして）
　おー！　3355463km563m87cm9mmだって！
　335万キロ！
　唐天竺どころか地球を何十周出来るんすかって話です（一周約4万キロ）
　ねずみヤバイ＞＜


　米の方は？
　2496839261L428CC・・・24億9683万9261リットルとか言われても・・・？？？
　ここでありがちなのが、東京ドームを升にして・・・というヤツ。
　１東京ドームは12億4千万リットルだそうですよ。
　って言われても、東京ドームを見たこと無いから全然ピンときませんがね。
　計算してみるとよいでしょう（え）

　それに米って、ご飯に炊く時は五合炊きだの一升炊きだのと言いますが、買う時は五キロとか十キロとか重さですよね～。リットルで量ることってあまりない；
　水なら1リットル＝1キログラムでカンタンだけど、米だと隙間が出来るのでそうはいきません。
　この場合の米が玄米なのか精米なのか問題や、江戸時代の米の粒の大きさは問題などもありますが、現代の白米は**一合＝150g**程度だそうですよ。
　計算してみるとよいでしょう（ええっ）

# おわります
　ようするに、ねずみヤバイ＞＜　とゆう話でした（違；）

### ※おわびと訂正
　当初、ネズミさんが食べる米の量の換算を間違えておりました。
　算数の記事なのにとんでもないですね！　スミマセン。
　升にまとめて換算するはずが、合にまとめて升→リットルの換算式を当てはめてしまってました。
　算数の段階で挫折してる人間だとゆうことを露呈してしまいましたね。あああ＞＜