Coding Challengeとは、Google先生によると、プログラミング能力を競う競技や、スキルを向上させるための課題を解くこと、とのこと。
Coding Challengeを行う場や機会がウエッブサイトにて多数提供されている。
MIT App Inventor2 は、子供から大人までが手軽にスマホのアプリを作れるようにと開発されたツールなので、Coding Challengeのようなものには向かないと思うが。componentの使い方やアルゴリズムの練習にはいいかもしれない。
今回のCoding ChallengeはProject Eulerという有名な(?)サイトにある906個の問題の中で、もっともやさしい問題2つにチャレンジするもの。
実行画面のビデオ(Problem 1 and Problem 2):
問題は以下の通り。
Problem 1
If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23. Find the sum of all the multiples of 3 or 5 below 1000.
要するに、1000未満の自然数で、3または5の倍数の合計を計算せよ、という問題。
スクリーン・デザイン:
コード・ブロック:
problemLabelに問題の内容を表示し、倍数のリストと合計を表示するlabelを初期化。
該当の倍数を格納する変数numPickedを初期化(0)。
該当の倍数をリスト形式で格納する変数pickedNumsListを初期化。
1000未満までの自然数なので、範囲は1から999。
各数字が3あるいは5の倍数かをチェックし、もしその条件に該当する場合は、その数を変数pickedNumsListに格納。
なお、3または5の倍数ではなく、3と5の公倍数の場合は、「or」の代わりに「and」を指定すればOKか。
変数numPickedに3または5の倍数だった数を加算して行く。
999までチェックが終わったら、該当の数を合計した数字が格納されているnumPickedをaddedUpAmountLabelに表示。また、picked NumsListの数字をlistOfNumsLabelに表示。
Probelm 2(2番目にやさしい問題)
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1,2,3,5,8,13,21,34,55,89...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
要するに、4,000,000未満のフィボナッチ数列の偶数のみを合計せよ、という問題(?)
フィボナッチ数列の全ての数を合計した場合と偶数のみを合計してた場合に分けて表示するようにした。
スクリーン・デザイン:
コード・ブロック:
変数firstNumに1をセット。(1番目の数字で、最初に1が与えられている)
変数secondNumに2をセット。(2番目の数字で、最初に2が与えられている)
変数thirdNumには0をセット。
数列を格納する変数numsListを初期化。
偶数の数列を格納する変数evenNumsListを初期化。(この数字の合計が今回の問題の解答)
2番目の数字が4,000,000未満であれば、
=>変数firstNum(1番目の数字=1)に同secondNum(2番目の数字=2)を加算し、結果を変数thirdNumに格納
=>次に1番目の数字としてsecondNumを設定
=>また、2番目の数字としてthirdNumを格納
さらに、thirdNumの数字が4,000,000未満であれば、thirdNumの数字をnumsListに追加
そして、このthirdNumの数字が偶数であれば、
=>thirdNum の数字をevenNumsListに追加する。
わざわざ図解するほどでもないが、
関数addFirstTwoNums、関数addFirstEvenNum、関数sumUpNumbers、関数sumUpEvenNumbersを実行し、それぞれのLabelに結果を表示する。
関数addFirstTwoNums:
=>所与の一番最初の数字(1)と2番目の数字(2)をnumsListの最初に(index =1)追加する関数
関数addFirstEvenNum:
=>また、偶数である所与の2番目の数字(2)をevenNumsListの最初に(index =1)追加
関数sumUpNumbers:
=>numsListに保存されている数字を合計し、変数summedNumに格納
=>extensionを使って3桁毎にカンマを入れている
関数sumUpEvenNumbers:
=>evenNumsListに保存されている数字を合計し、変数summedEvenNumに格納(これが解答)
=>extensionを使って3桁毎にカンマを入れている
***********************************************
以上が正解かどうかはわからないが。
ちょうどいいコーディング(アルゴリズム)の練習になり、頭の体操にもなる。でも、「Start」ボタンを押したら一瞬で終了で、それ以上の動きがないのはちょっと寂しい。やはり普通のアプリの方が動きがあって、作っていても楽しい。
もう少し、アプリらしく作った方がいい。
***********************************************
次回は、別のCoding Challengeにも挑戦したい。