追加演習
問題1 Distance
- 問題
- 回答例
与えられる二つの点の距離を求める関数を考えなさい。
この時、√の計算には以下を用いると良い。
この時、√の計算には以下を用いると良い。
Math.sqrt(4) // 2
function distance(a, b) {
return Math.sqrt((a.x - b.x) ** 2 + (a.y - b.y) ** 2)
}
問題2 ArrayPrimeFilter
- 問題
- 回答例1
- 回答例2
- 回答例3
2以上の整数値の配列を受け取り、含まれる素数の配列を返す関数を作成しなさい。
例) [2, 3, 4, 5] => [2, 3, 5]
function ArrayPrimeFilter(a) {
const primeInA = []
for (let i = 0; i < a.length; i = i + 1) {
let isPrimeFrag = true
const ai = a[i]
if (ai === 2) {
primeInA.push(ai)
continue
}
for (let j = 2; j < ai; j = j + 1) {
if (ai % j === 0) {
isPrimeFrag = false
break
}
}
if (isPrimeFrag) {
primeInA.push(ai)
}
}
return primeInA
}
function isPrime(n) {
if (n === 2) true
for (let i = 2; i < n; i = i + 1) {
if (n % i === 0) return false
}
return true
}
function ArrayPrimeFilter(a) {
const primeInA = []
for (let i = 0; i < a.length; i = i + 1) {
if (isPrime(a[i])) {
primeInA.push(a[i])
}
}
return primeInA
}
function isPrime(n) {
if (n === 2) true
for (let i = 2; i < n; i = i + 1) {
if (n % i === 0) return false
}
return true
}
function ArrayPrimeFilter(a) {
return a.filter(isPrime)
}
問題3 Multiplying_i
- 問題
- 回答例1
- 回答例2
数値の配列を受け取り、配列の`i`番目(1~)の要素を`i`倍した配列を返す関数を作成しなさい。
例) [2, 3, 4] => [2, 6, 12]
function Multiplying_i(a) {
const result = []
for (let i = 0; i < a.length; i = i + 1) {
result.push(a[i] * (i + 1))
}
return result
}
function Multiplying_i(a) {
return a.map((v, i) => {
return v * (i + 1)
})
}
問題4
function g (f) {
return (function (x) {
return f(f(x))
})
}
function increment (x) {
return x + 1;
}
// g(increment)(0)の結果を考えて、実行してみよ
// g(g(increment))(0)の結果を考えて、実行してみよ
// g(g(g(increment)))(0)の結果を考えて、実行してみよ
// g(g(g))(increment)(0)の結果を考えて、実行してみよ
// g(g(...g(increment)))(0) でgがn個のときの結果を考えてみよ
// g(g(...g(g)))(increment)(0) でgがn個のときの結果を考えてみよ
// 最後の2つは厳密性は無視しても良いので、証明を考えてみてください