問3 forしかない世界で集計せよ
初段 / 目安 20分
「Node版の while と forEach で書かれた売上集計、Go に移植を」
凛さんはコードを指しながら続けます。「ご存知のとおり、Go のループは for だけです。3つの繰り返しを全部 for で」
Go には while がありません。do-while も、配列の forEach もありません。それでも困らないのは、for が3つの顔を持っているからです。
回数を決めて回すときは、見慣れた形です。
Go
for i := 0; i < 5; i++ {
}条件だけで回すときは、前後を落とします。これが while の代わりです。
Go
for n > 0 {
}中身を順に見るときは range を添えます。添字と値の両方が取れます。
Go
for i, v := range prices {
}添字が要らなければ for _, v := range prices と書きます。逆に値が要らなければ for i := range prices です。
道具が1つしかないと、どれを使うか迷う時間が消えます。
完成条件
売上の配列を受け取り、3種類の繰り返しで集計した結果を返す関数 sumThreeWays を作ってください。
返す形は次のとおりです。3つとも同じ合計になります。
プレーンテキスト
count=13500 while=13500 range=13500countはfor i := 0; ...の形で、添字を使って足すwhileは条件だけのforで、添字を自分で進めながら足すrangeはfor _, v := rangeの形で足す
0 円が混ざっていても数え落とさないようにしてください。
要件
countはfor i := 0; i < len(prices); i++の形で集計するwhileは条件だけのforで、添字を自分で進めながら集計するrangeはfor _, v := range pricesの形で集計する
入出力例
sumThreeWays([4800,6200,2500]) → "count=13500 while=13500 range=13500"
sumThreeWays([4800]) → "count=4800 while=4800 range=4800"
sumThreeWays([0,2500]) → "count=2500 while=2500 range=2500"
sumThreeWays([100,200,300,400,500]) → "count=1500 while=1500 range=1500"ヒント
前のヒントを開くと次が開きます。開かずに解けると未開封クリアです
ヒント 2ヒント 1 を開くと読めます
ヒント 3ヒント 2 を開くと読めます
編集 ゆめさく編集部