[珂太練習]薬水の個数と加算(1/5 WED)


5週目の勉強で言及した薬の個数と加算!
思ったより早く解くことができたのですが、もっと効果的に解けるはずで残念でした.🥲
[今日の質問!#]

質問する
2つの整数の左から右までのすべての数の中で、約数の数に偶数の数を加えて、約数の数に奇数の数を加えて減算する解関数を実現します!
左が24、右が27なら
偶数の数の24、26、27を加算します.
薬水を除く個数は奇数の25です.
24-25+26+27 = 52
求める関数を構築する必要があります.🤓
ろんり
1)約数:分程度で0の数!(left % someNumber == 0)
2)ドアを回している1...左の数に約数を探します.
3)薬液が正しければ空の配列に入れる
4)空配列の数が偶数の場合は空変数sum+=約数,奇数の場合はsum-=約数となる.
『私が作ったコード』
func solution(_ left: Int, _ right: Int) -> Int {
	var sum = 0
    var aliquotArray = [Int]()
    for number in left...right{
    	for i in 1...number {
        	if number % i == 0 {
            aliquotArray.append(i)
        }
        if aliquotArray.count % 2 == 0 {
        	sum += number
        } else {
        	sum -= number
        }
        aliquotArray.removeAll()
    }
    return sum
}
<高次関数を使用するコード>
ろんり
1)既存のレイアウトコードを変更するだけで済むので,map関数を用いてコンテナ内部の既存データを変換し,新しいコンテナを生成することができる.
[24,25,26,27]の配列は[+24,−25+26+27]!
2)1)で新しく作成した配列は,演算により1つの配列にマージできるためreduce関数を用いることができる.😎
func solution2(_ left: Int, _ right: Int) -> Int {
	return (left...right).map({ number -> Int in
    	var count = 0
        for i in 1...number{
        	if number % i == 0 {
            	count += 1
            }
        }
        return count % 2 == 0 ? number : -number
    }).reduce(0,+)
}
また、私のように薬水を空の配列に入れて数えるのではなく、
これは、ある数値が一致するたびに、初期値を0の変数+1に設定し、個数を算出する方法です.
この方法はあまり面倒ではないようです!