乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

数学

100日後に亡くなってしまう確率を考えてみました。

解説動画はこちら




人が死ぬ確率をどう出すか

一番詳しいのは
保険会社だと聞いています。

死亡した方のデータを持っていて
そこから会社が損しないように
保険料を算出していますので
そのやり方でいきます。

平成30年簡易生命表(男)が発表されているので
それを用いて行きます。

まずはデータ化します。
import numpy as np

rate = [0.00196,0.00025,0.00019,0.00014,0.00011,0.00010,0.00008,0.00007,0.00007,0.00007,
0.00007,0.00008,0.00009,0.00011,0.00014,0.00016,0.00020,0.00024,0.00029,0.00035, 
0.00040,0.00044,0.00047,0.00049,0.00049,0.00049,0.00049,0.00050,0.00051,0.00053, 
0.00055,0.00057,0.00060,0.00063,0.00065,0.00068,0.00072,0.00076,0.00081,0.00087,
0.00094,0.00102,0.00112,0.00123,0.00136,0.00149,0.00164,0.00181,0.00200,0.00221, 
0.00245,0.00274,0.00305,0.00336,0.00368,0.00401,0.00437,0.00481,0.00532,0.00589, 
0.00651,0.00717,0.00788,0.00864,0.00948,0.01047,0.01159,0.01283,0.01419,0.01555, 
0.01695,0.01854,0.02036,0.02240,0.02465,0.02709,0.02964,0.03261,0.03621,0.04053, 
0.04565,0.05149,0.05812,0.06555,0.07417,0.08412,0.09532,0.10774,0.12093,0.13456, 
0.14830,0.16406,0.18130,0.20011,0.22060,0.24284,0.26691,0.29287,0.32075,0.35056, 
0.38229,0.41587,0.45119,0.48808,0.52633]

データは10万人あたりの死亡者数を元に
死亡率を弾き出しています。

40才くらいまで生き残れる確率は?
1-sum(rate[0:40])
0.98

日本に生まれたら
9割以上の確率で40才くらいまでは
生き残れるようです。


死亡率が一番低いのは何歳の時?
np.argmin(rate) , rate[np.argmin(rate)]
(7,7e-05)


7才の時が一番死亡率は低いようです。

逆に死亡率が一番高いのは?
 np.argmax(rate) , rate[np.argmax(rate)]
(104 , 0.52633)

当たり前ですが、高齢になれば生き残る確率も
下がりますね。


20才の時の死亡率は?
 '{:f}%'.format(rate[20] * 100)
0.040000%

20才であれば年間で1万人に4人ほどしか
亡くならない計算ですね。

40才だと死亡率はその2倍以上になっています。

明日なくなる確率は?
 '{:f}%'.format(rate[20] / 365 * 100)
0.000110%


20の人が明日亡くなる確率は
年間の確率を365で割れば良いと思います。

1日あたりだと100万人に一人くらいでしょう。


100日後(まで)に死ぬ確率は?
 '{:f}%'.format(rate[20] / 365 * 100 * 100)
0.010959%

単純に100倍すれば良いかなと

1万人に1人の確率で
100日後に亡くなります。

正直な話
ピンとはこないですよね。

ただし
人が亡くなる時は突然です。

いきなりやってきます。

心構えもなく唐突にです。

家族が亡くなるのは避けられない事です。

その時に思うことは
「何でもっと沢山話しておかなかったんだろう」です。

死ぬ事について考えることは
普通はほとんど無いかと思います。

でも時を重ねるにつれ
その確率はどんどん上がっていきます。

いつかは誰しも経験する事になるのです。

それが明日かもしれないし
100日後かもしれない。

わからないから今日1日を
大切にした方が良いんだと思いますね。

今日はここまでです
それでは

さて、今年も受験シーズンですねーー

数学の問題をプログラムで解くという
無駄なことをやっていきたいと思います。

解説動画はこちら





2020年の数学1の問題です。

さてまず最初は

スクリーンショット 2020-01-26 16.48.25

問題見るだけだと
なんだかよく分からないですよねー

まずはこの直線L君を作図してあげましょう。
そうすれば分かりやすくなるはずです。

Python言語では
数学的な作図が非常に楽です。

数式用、作図用のライブラリを
インポートします。
import numpy as np
import warnings
import matplotlib.pyplot as plt
warnings.simplefilter('ignore')
%matplotlib inline

作図では直線を描くので
x軸、y軸の値が必要になります。

y軸の値は数式を元に生成されるので
x軸の値を適当に生成します。

numpyのlinspaceで
数値を適当に生成することができます。
a=1
x = np.linspace(-5, 5, 100)
y = (a**2-2*a-8)*x + a
plt.plot(x, y,label=str(a))
plt.legend()
plt.show()
download



aが1の時を作図してみると
傾きは右肩下がりで負の値になっています。

今度はaが8の時を試してみます。
download-1

そうすると右肩上がりで
傾きが正の値になりました。

どこかに境界線があるはずです。

aの値を複数用いて
まとめて作図してみます。
for a in range(1,6):
    x = np.linspace(-5, 5, 100)
    y = (a**2-2*a-8)*x + a
    plt.plot(x, y,label=str(a))

plt.legend()
plt.show()
download-2
aの値を1から5までで作図すると
4の時に平行になったように見えます。
5になると正の値になっているように見えます。

と言うことで4が境界線に
なっていると言えそうです。

ただし、aの値は負の値を取ることも
考えられますので、aが負の時も
作図してみます。
for a in range(-6,0):
    x = np.linspace(-5, 5, 100)
    y = (a**2-2*a-8)*x + a
    plt.plot(x, y,label=str(a))

plt.legend()
plt.show()
download-3
aが負の場合
-2で平行になっているように見えますね。

合わせると回答すべきポイントは
アイ< a < ウなので

-2 < a < 4

と言う感じになりますね。

ただしこれだと
図からの判断なので
実際に傾きを求めてみましょう。

傾きは
スクリーンショット 2020-01-26 16.48.46
にて求めることができます。

x,yの共分散は
np.cov(x,y)[0,1]

xの分散は
np.var(x)

これで求めることができます。

これでaを入れて傾きを求めてみると
for a in range(-5,6):
    x = np.linspace(-5, 5, 100)
    y = (a**2-2*a-8)*x + a
    
    # 傾き = x,yの共分散 / xの分散
    coef = np.cov(x,y)[0,1] / np.var(x)
    print(a,'\t',coef)
-5 	 27.27272727272728
-4 	 16.161616161616156
-3 	 7.070707070707068
-2 	 0.0
-1 	 -5.050505050505051
0 	 -8.080808080808078
1 	 -9.090909090909092
2 	 -8.080808080808078
3 	 -5.050505050505051
4 	 0.0
5 	 7.070707070707068




はい、これで-2と4のところで
ちゃんと傾きは0で平行になっていますので
それを越えれば傾きが正になることが確認できました。


続いて

スクリーンショット 2020-01-26 16.48.55

先ほどの直線Lとx軸の交点と言っているので
x軸を作図してあげれば
交点bが分かりやすくなります。

プログラム上では
単純にy=0とし、xを適当な値で結んで
直線を描けばx軸になります。
a=1
x = np.linspace(-5, 5, 100)
y = (a**2-2*a-8)*x + a

# 直線Lを作図
plt.plot(x, y,label=str(a))
# x軸を作図
plt.plot([-5,5], [0,0],c='red')
plt.legend()
plt.show()
download-4

はい、赤線と青線の交わる部分が交点bですねー

さてaが変われば傾きが変わり
交わる部分も変わってくるのですが

求めたい交点bについては
yの値は0なのでxの値を求めてあげれば
良いと言うことになります。

と言うことで
直線の式を変形して
xの値を求めてみましょう。

式を変形すると
y = (a**2-2*a-8)*x + a

y-a = (a**2-2*a-8)*x

(y-a)/(a**2-2*a-8) = x

x = (y-a)/(a**2-2*a-8)
y=0なので、yの部分を0に変えてあげれば
xの値をすぐに求めることができますね。

aを変えてxを求めてみましょう。

まずは a > 0 の場合

for a in range(0,11):
    if (a**2-2*a-8)!=0:
        x = (0-a)/(a**2-2*a-8)
        print(a,'\t',x)
0 	 -0.0
1 	 0.1111111111111111
2 	 0.25
3 	 0.6
5 	 -0.7142857142857143
6 	 -0.375
7 	 -0.25925925925925924
8 	 -0.2
9 	 -0.16363636363636364
10 	 -0.1388888888888889

これでみると4のところが無くて
5から負の値になっていますね。

4の値をもう少し細かく見てみましょう。
for a in np.linspace(3.9, 4.1, 21):
    if (a**2-2*a-8)!=0:
        x = (0-a)/(a**2-2*a-8)
        print('{:.03}'.format(a),'\t',x)
3.9 	 6.610169491525415
3.91 	 7.3510058281631725
3.92 	 8.277027027027007
3.93 	 9.467598169115819
3.94 	 11.054994388327726
3.95 	 13.277310924369653
3.96 	 16.610738255033528
3.97 	 22.166387493020434
3.98 	 33.277591973244355
3.99 	 66.6110183639381
4.01 	 -66.72212978369552
4.02 	 -33.38870431893784
4.03 	 -22.277501381979285
4.04 	 -16.72185430463576
4.05 	 -13.388429752066106
4.06 	 -11.166116611661277
4.07 	 -9.578724405742625
4.08 	 -8.388157894736848
4.09 	 -7.462141944900592
4.1 	 -6.721311475409841

と言うことで4を越えると
xが0未満になり成立しません。

a > 0 の場合、b > 0となるのは エ < a < オ
なので

答えは

0 < a < 4

ですね。


a<=0の場合は
for a in range(-10,0):
    if (a**2-2*a-8)!=0:
        x = (0-a)/(a**2-2*a-8)
        print(a,'\t',x)
-10 	 0.08928571428571429
-9 	 0.0989010989010989
-8 	 0.1111111111111111
-7 	 0.12727272727272726
-6 	 0.15
-5 	 0.18518518518518517
-4 	 0.25
-3 	 0.42857142857142855
-1 	 -0.2

-2で負の値に切り替わりますね。
-2付近を細かく見ると
 for a in np.linspace(-3, -1, 21):
    if (a**2-2*a-8)!=0:
        x = (0-a)/(a**2-2*a-8)
        print('{:.03}'.format(a),'\t',x)
-3.0 	 0.42857142857142855
-2.9 	 0.466988727858293
-2.8 	 0.5147058823529413
-2.7 	 0.5756929637526651
-2.6 	 0.6565656565656565
-2.5 	 0.7692307692307693
-2.4 	 0.9375000000000004
-2.3 	 1.2169312169312176
-2.2 	 1.774193548387094
-2.1 	 3.4426229508196755
-1.9 	 -3.220338983050848
-1.8 	 -1.551724137931033
-1.7 	 -0.9941520467836252
-1.6 	 -0.7142857142857142
-1.5 	 -0.5454545454545454
-1.4 	 -0.4320987654320987
-1.3 	 -0.3504043126684635
-1.2 	 -0.28846153846153844
-1.1 	 -0.2396514161220043
-1.0 	 -0.2

はい、これで-2を界に
負の値になることが確認できたので

a <= 0 の場合、b > 0となるのは a < カキ

a < -2

となりました。

ふう
普通に問題を解くのに比べて
3倍ほどは時間がかかるんじゃないでしょうかね

このように
無駄なコードを書くことで
プログラミングを上達させることが
できるかもしれません。

お暇であれば試してみるのもいかがでしょうか?

今回はこれまでです。
それでは

さて
またまた東大の問題です。

確率を求めたりする計算は
プログラムの得意とするところで
業務でもよく出てきます。

いかに東大の問題と言えども
プログラミングができれば
簡単に解けてしまうと思います。

解説動画はこちら




2019年の問題

正八角形の頂点を反時計回りにA,B,C,D,E,F,G,Hとする。
また投げたときにおもて裏の出る確率がそれぞれ2分の1のコインがある。

点Pが最初に点Aにある。次の操作を10回繰り返す。
操作:コインを投げ表が出れば点Pを反時計回りに隣接する頂点に移動させ
裏が出れば点Pを時計回りに隣接する頂点に移動させる。
例えば点Pが点Hにある状態で、投げたコインの表が出れば点Aに移動させ
裏が出れば点Gに移動させる。

以下の事象を考える。

事象S:操作を10回行った後に点Pが点A上にある。
事象T:1回目から10回目の操作によって、点Pは少なくとも1回点Fに移動する。
(1)事象Sが起こる確率を求めよ
(2)事象Sと事象Tがともに起こる確率を求めよ


まずは問題文だけでは分かりづらいので
可視化してみましょう。

正8角形
反時計回りにA,B,C,D,E,F,G,H

この二つの条件で図形を描画してみます。

ライブラリを読み込んで
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
fig = plt.figure(figsize=(2,2),dpi=200)

r = 8
x = [np.sin(i) for i in np.linspace(0,2*np.pi,r+1)]
y = [np.cos(i) for i in np.linspace(0,2*np.pi,r+1)]
plt.plot(x,y)

t = ['A','H','G','F','E','D','C','B','']
for i ,(x1,y1) in enumerate(zip(x,y)):
    plt.text(x1,y1,t[i],ha='center',va='bottom')

plt.show()
8kakkei

このように描画できます。

x,yには正8角形の各x,yの座標

plt.plotではx,y座標を指定し
plt.textで図形に文字を付け加えられます。

生成した座標値は時計回りの座標なので
それを見越して表示させる文字を変えています。

それではイメージできたところで
問題を解いていきましょう。

1つめの問いは

(1)事象Sが起こる確率を求めよ
事象S:操作を10回行った後に点Pが点A上にある。 

まずは問題を解くのに必要なライブラリを読み込みます。
import itertools
from fractions import Fraction
coins = [i for i in itertools.product([1,-1],repeat=10)]
print(len(coins))

base = ['C','B','A','H','G','F','E','D','C','B','A','H','G','F','E','D','C','B','A','H','G’]
print(base[10])
1024
A

コインを10回ふった際の結果をcoinsという変数に格納します。

itertools.productで表裏の結果10回繰り返した際の順列が生成できます。
引数はその1回の組み合わせをリストで定義し
repeat=回数 で繰り返し回数が指定できます。

表は-1、裏は1として定義してrepaetが10回ですね。

単純に2の10乗回数だけコインをふることになりますね。

baseという変数にはAから始まって
時計回りに最大10回
反時計回りに最大10回
移動した際の点を入れます。
真ん中のbase[10]が開始地点です。


用意ができたらあとは計算だけですね。
10回ふった際の最終地点を求めて
その結果を辞書に格納してあげます。

最終地点:回数

とすることで確率が求められます。

calc_dict = {}
for coin in coins:
    key = base[10+sum(coin)]
    if key in calc_dict:
        calc_dict[key] +=1
    else:
        calc_dict[key] =1

for k,v in calc_dict.items():
    print(k,v)
C 256
A 272
E 240
G 256

print(calc_dict['A']/len(coins))
print(Fraction(calc_dict['A'],len(coins)))
0.265625
17/64

コインを10回ふった組み合わせ1024回のうち
Aに戻るのは272回でした。

なので確率としては
272/1064 

約分して
17/64となります。

Fractionで分数計算ができて
約分もしてくれます。

Pythonはこういうところが
めちゃくちゃ便利です。


2つめの問いは

(2)事象Sと事象Tがともに起こる確率を求めよ
事象S:操作を10回行った後に点Pが点A上にある。 
事象T:1回目から10回目の操作によって、点Pは少なくとも1回点Fに移動する。

条件が二つに増えます。

それではコインを10回ふった際の
軌跡を求めてみましょう。
coin_result = []
for coin in coins:
    tmp = 10
    result = ''
    for c in coin:
        tmp += c
        result += base[tmp]
    coin_result.append(result)

組み合わせの数だけ試行して
移動結果を文字としてつなげます。
リスト型に結果を保存します。

最終的に求める条件は
1.Fを通る(Fがある)
2.Aで終わる
この二つを満たす結果があれば
1カウントし、全組み合わせの中から
合致するものの個数を数えます。
count = 0
for row in coin_result:
    if 'F' in row and row[-1]=='A':
        count+=1
print(count)

66
print(count/len(coins))
print(Fraction(count,len(coins)))
0.064453125
33/512

最終的な答えの確率は
66/1024

約分して
33/512
となりました。

さていかがだったでしょうか?
確率を求めたりする計算は
日常業務ではよくでてきます。

数学的な可視化や
その計算については
numpyやmatplotlibライブラリを
用いることが多いです。

単純な計算については
通常のPythonプログラムだけでも
行うことができます。

問題を読み間違わなければ
このくらいの計算は
プログラミングで簡単に行うことができるので

プログラミングを覚えていない方
これから覚えたい方は
ぜひPythonを覚えてみてください。

Pythonについては無料の動画講座を用意しています。
乙py式5時間で学ぶプログラミング基礎(python編)

興味のある方はぜひこちらをご参照くださいませ。

それでは。


今回はヒマなので
なーんか面白いことないかーとか
思っていましたら

東の方に
有名な大学が有るらしいんですよ。


東京大学って知ってます?

自分は行ったことないんで
よく知らないんですけど
有名大学みたいなので
数学の問題を解いてみることにしました。

解説動画はこちら



2003年の東大の入試問題より
 
円周率が 3.05 より大きいことを証明せよ。


さて
どう解きましょうかねー

とりあえず
円周の長さ > 内接X角形の外周

になるはずなので
この内接する多角形の外周を求めて
それが3.05よりも大きければ

総じて
円周率> 3.05 
となるのではないかと思います。

まずは円を描いてみましょう。

Pythonのライブラリを用いて
円を描いてみます。

# ライブラリの読み込み
import numpy as np
import matplotlib.pyplot as plt
% matplotlib inline


描画用のライブラリとして
matplotlibを読み込んでおきます。

# 半径5の円を描く
plt.figure(figsize=(2,2),dpi=300)
r = 5
x = [np.sin(np.radians(_x))*r for _x in np.linspace(-180,180,361)]
y = [np.cos(np.radians(_y))*r for _y in np.linspace(-180,180,361)]
plt.plot(x,y)

plt.xticks([i for i in range(-r,r+1)])
plt.yticks([i for i in range(-r,r+1)])
plt.axes().set_aspect('equal','datalim')
plt.show()
en1
円を描くにはx,y座標が必要ですが
その点を求めるのにnumpyを使います。

numpy.linspaceで等間隔の配列が作成できます。

あとはx,y座標の点を求めるのに
numpy.sin , numpy.cos を使います。
sin , cos に渡せるのはradianでないといけないので
一旦numpy.radiansで変換します。

これで円を描くことができます。


次にこの円に内接する多角形を描いてみましょう。
今回は12角形を描くこととします。

わかりやすくするために
三角形の辺の長さが3:4:5になるという法則を用いて
座標を決めていきます。

一番長い5の辺は円に接する先端ですね。
あとはx,yの座標は3か4になります。

一番上をx=0,y=5として座標点をプロットしてあげます。
# 内接する12角形を描画
plt.figure(figsize=(2,2),dpi=300)
r = 5
x = [np.sin(np.radians(_x))*r for _x in np.linspace(-180,180,361)]
y = [np.cos(np.radians(_y))*r for _y in np.linspace(-180,180,361)]
plt.plot(x,y)

x2 = [0,3,4,5,4,3,0,-3,-4,-5,-4,-3,0]
y2 = [5,4,3,0,-3,-4,-5,-4,-3,0,3,4,5]
plt.plot(x2,y2)

plt.xticks([i for i in range(-r,r+1)])
plt.yticks([i for i in range(-r,r+1)])
plt.axes().set_aspect('equal','datalim')
plt.show()
en2
はいこれで円に接する12角形が描けました。

あとはこの辺の長さを求めて
あげれば良いということになります。

辺の長さを求めるにはどうすれば良いでしょうか?

これはnumpyを使って
ユークリッド距離を求めることで
辺の長さを計算することができます。

numpy.linalg.norm(座標a - 座標b)

これで2点のユークリッド距離を求めることができます。

12角形のうち
全部を求める必要はなく

右上部分の4点を用いて
3辺の長さを計算してみましょう。

x,y座標はそれぞれ
0,5
3,4
4,3
5,0
となるので
そのうち2点を使って計算します。
l = np.array([[0,5],[3,4],[4,3],[5,0]])
c1 = np.linalg.norm(l[0]-l[1])
c2 = np.linalg.norm(l[1]-l[2])
c3 = np.linalg.norm(l[2]-l[3])
ans1 = 4 *(c1+c2+c3)
print(ans1)

30.9550755308

さてこれで多角形の辺の長さが計算できました。

問題文は3.05より大きいことを証明せよなので
比率を合わせます。

この円は半径5の円なので直径は10です。
なので10倍します。
30.5


10倍した30.5よりも
12角形の外周は30.95のため大きくなり

必然的にそれよりも円周は大きいので

円周率>3.05

になるはずです。

さて
描画などについては
Pythonのライブラリを用いると簡単に
描くことができ
また座標間の距離なども
簡単に計算することができます。

数学の問題では
このnumpyとmatplotlibライブラリを使って
いろいろ問題に応用することができます。

数学的な可視化や
その計算については
numpyやmatplotlibライブラリを
用いることが多いです。

単純な計算については
通常のPythonプログラムだけでも
行うことができます。

問題を読み間違わなければ
このくらいの計算は
プログラミングで簡単に行うことができるので

プログラミングを覚えていない方
これから覚えたい方は
ぜひPythonを覚えてみてください。

Pythonについては無料の動画講座を用意しています。
乙py式5時間で学ぶプログラミング基礎(python編)

興味のある方はぜひこちらをご参照くださいませ。

それでは。

またまた数字のトリビアです

解説動画はこちら



まず最初のトリビアは
数字のトリビア.016


一人につき50人の知り合いがいるとして
それを6人まで巡ると地球の人口を超えるというものです。

50を人数の数だけ掛け合わせれば答えが出ます。

コードは
p = 50
for i in range(1,7):
    print('{0: 12}'.format(p ** i))
50
2500
125000
6250000
312500000
15625000000

はい見事に150億となり地球の70億人を越えました。
30人の知り合いでも7億となり日本の人口を越えます。

前に
「水曜日のダウンタウン」で
明石家さんまさんの知り合いそうな人に手紙を送り、
それを繰り返すことで何人たどればさんまさんにたどり着けるかを
検証した際は7人くらいだと思いました。

友達の友達は・・・
を6人繰り返せば
世界中の人と繋がる可能性があるわけです。

これを6次元の隔たりと言うとか言わないとか。
あのGREE社の語源ですね。

お次は
数字のトリビア.017

ちょっとロマンティックな関数が有ります。

それをPythonで再現します。

数学の方の関数を描画するのに
Sympyというのを使います。

from sympy.plotting import plot_parametric
from sympy import Symbol , cos ,sin

def draw_heart():
    t = Symbol('t')
    x = 16 * sin(t) ** 3
    y = 13 * cos(t) -5 * cos(2 * t) -2 * cos(3 * t) - cos(4 * t)
    plot_parametric(x,y,autoscale=True , title='heart' , show=False).show()

draw_heart()

結果は:
heart

なかなか綺麗なハートになりますね。
Sympyは数学的な計算を描画させたりできるので
高校生とかにはちょうどいいかもしれません。


お次は
数字のトリビア.018

平方数
その数値を掛け合わした結果と
その数値の個数,1からの奇数を足した結果が同じになります。

コードは
for i in range(1,21):
    print('{0:02} ** 2'.format(i) , i ** 2)
s = [a for a in range(1,1000,2)]
for i in range(1,21):
    print(i,sum(s[0:i]))

どちらとも同じ結果になります。

1 1  1
2 4  1+3
3 9  1+3+5
4 16 1+3+5+7
5 25 1+3+5+7+9

不思議ですね。
こんな法則があるんです。

はい、次は
数字のトリビア.019

なんとも不思議な計算結果ですね

コードは
for i in range(1,11):
    res = 49 ** i
    print('{0:017}'.format(res) , str(res)[len(str(res))-2:])

結果は:
00000000000000049 49
00000000000002401 01
00000000000117649 49
00000000005764801 01
00000000282475249 49
00000013841287201 01
00000678223072849 49
00033232930569601 01
01628413597910449 49
79792266297612001 01

1から10乗までかけてみました。

確かに奇数乗は末尾が49
偶数乗は末尾が01になりますね。

これを発見した人
相当暇人なんだろうなーと思うトリビアですね。

最後のトリビアは
数字のトリビア.020

単に365回101%かけ続けるだけですが
プログラムなら一瞬です。
1.01 ** 365
37.78343433288728

1日1%成長できるとすると
1年後には約38%成長できることになります。
R天のM谷さんが言っていたとか言わないとか。

ライバルは「昨日の自分」
これを常に心がけたいものです。

今回のトリビアはここまでです。

このページのトップヘ