数の分解
NumberDecomposeは,数を,例えば貨幣のようないくつかの単位に分解して表す.
バハマドル(BSD)は次の紙幣を使っている.
In[1]:=
![Click for copyable input](assets.ja/decomposition-of-numbers/In_14.png)
denominations = {100, 50, 20, 10, 5, 3, 2, 1, 1/2};
BSDには3ドル札があるため,指定された額を分解する方法が他の通貨よりも多い.次は,連続する単位の間の商である.
In[2]:=
![Click for copyable input](assets.ja/decomposition-of-numbers/In_15.png)
Divide @@@ Subsequences[denominations, {2}]
Out[2]=
![](assets.ja/decomposition-of-numbers/O_14.png)
ほとんどの通貨システムでは,商は2と5/2しかないが,この場合は5/3と3/2もある.
In[3]:=
![Click for copyable input](assets.ja/decomposition-of-numbers/In_16.png)
Divide @@@ Subsequences[denominations, {2}];
BarChart[%]
Out[3]=
![](assets.ja/decomposition-of-numbers/O_15.png)
ある金額をバハマドルの紙幣で表すとすると,それぞれの紙幣が何枚ずつ必要であるかを調べる.
In[4]:=
![Click for copyable input](assets.ja/decomposition-of-numbers/In_17.png)
NumberDecompose[598.50, denominations]
Out[4]=
![](assets.ja/decomposition-of-numbers/O_16.png)
NumberComposeを使ってもとの金額に戻す.
In[5]:=
![Click for copyable input](assets.ja/decomposition-of-numbers/In_18.png)
NumberCompose[{5, 1, 2, 0, 1, 1, 0, 0, 1.}, denominations]
Out[5]=
![](assets.ja/decomposition-of-numbers/O_17.png)
次は,それぞれの紙幣を1枚ずつ使った場合の合計金額である.
In[6]:=
![Click for copyable input](assets.ja/decomposition-of-numbers/In_19.png)
NumberCompose[Table[1, Length@denominations], denominations] // N
Out[6]=
![](assets.ja/decomposition-of-numbers/O_18.png)