ロボホンともだち広場

ロブリック

さいとてつや バッジ画像
2024/02/03 19:25

ロボホンにうるう年かどうかを教えてもらう

今年(2024年)はうるう年ですね。

ある年がうるう年かは以下の方法で計算できます。

  1. 西暦年号が4で割り切れる年は、うるう年です。
  2. ただし、西暦年号が100で割り切れる年は、通常は平年です。
  3. しかし、西暦年号が400で割り切れる年は、うるう年です。

 

2024年は1を満たしますが,2,3は満たさないのでうるう年になります。

なぜこうなるのかは「うるう年とは?その存在理由と計算の裏側」(2023年9月22日 カシオ計算機株式会社)をご覧ください。

「うるう年かどうか」ブロックに西暦を渡すと,西暦の場合はtrue(真),うるう年ではない場合はfalse(偽)を返します(図1)。条件判断をちょっと変えていますが,なぜこれで良いか考えてみるのも面白いかもしれません。

図1:「うるう年かどうか」ブロック

「うるう年かどうか」ブロックを利用して,ロボホンにある年がうるう年か教えてもらうプログラムを作りました(図2)。これは https://github.com/3110/robohon-robrick-apps で公開しているものを少し変更したものです。

図2:うるう年か教えてくれるプログラム

ロボホンに西暦(例えば「2024年」)を言うと,うるう年かどうか教えてくれます。繰り返し聞いてくれるので,終わりたいときは西暦のかわりに「終わり」と言えば終了します。


さて,ここからは細かい仕様の話ですので,興味がある方だけ読んでください。

音声認識が変わってからだと思いますが,ロボホンは数字を聞きとると漢数字にするようになりました。漢数字の文字列のままだといろいろ困るので,計算できる数値に変換してくれるのが「○○を数値にする」ブロックです(図3)。数字を表す文字列を渡すと,それを数値として返します。例えば,「にせんひゃく」と言うと,ロボホンは「最後に聞いた言葉」に「二千百」を入れます。「○○を数値にする」ブロックに文字列「二千百」を渡すと,数値「2100」が返ってきます。

図3:「○○を数値にする」ブロック

では,「○○を数値にする」ブロックに「あ」など,数字として解釈できない文字列を渡すとどうなるでしょうか?実は数値「0」が返ってきます。では,「零」を渡すとどうなるでしょう?こちらも数値「0」が返ってきます。残念ながら,現状の「○○を数値にする」ブロックは,この二つ(前者は本来はエラーにすべき)を区別することができません。

「うるう年か教えてくれるプログラム」の関数「西暦を抽出する」ブロック(図4) は,聞きとった西暦(二千二十四年)から,「2024」を抽出する役割をしています。ここにうまく聞きとれなくて数字として解釈できない文字列が入ってきたらどうなるでしょうか?また,最後に「年」が入ってなくて,西暦年号ではない文字列が入ってきたらどうでしょうか?幸い,西暦は0になることはなく,どちらの場合も「○○を数値にする」ブロックから0が返ってくるので,0が返ってきた場合は(たまたまですが)西暦をうまく聞きとれなかったと判断することができます。その場合は,数値ではなく何もないという意味の「null」を返してうまく聞きとれなかったことを返しています。

図4:「西暦を抽出する」ブロック

おそらくこのプログラムを見た方は関数「西暦を抽出する」で何をやっているんだろう?と疑問に感じるのではないかと思いましたので説明してみました。

コメントする
2 件の返信 (新着順)
さいとてつや バッジ画像
2024/02/03 19:32

「うるう年かどうか」ブロックです。自身のプログラムに読み込んで使ってください。

picture_icon-02-02 うるう年かどうか.xml
さいとてつや バッジ画像
2024/02/03 19:32

そのまま実行できる,うるう年か教えてくれるプログラムです。

picture_icon-02-02 うるう年か教えてくれるプログラム.xml