配列メニュー【重複の削除・配列の最大最小・ある数以上以下の要素の列挙・二点間の距離・フィボナッチ数 ほか】
【STEP: 1】コード
const S = new Set([1, 3, 5, 1, 2, 3, 6, 6, 5, 1, 4]); // Set()に同じ値は保存できない
const A = [...S].sort((s, b) => s - b); // Sの値を配列の値として展開し昇順に並べ替え
A.forEach(a => {
console.log(a);
});
Set()
を使って 重複を削除しました。スプレット構文( …S )で 配列 A の要素として展開し sort((s, b) => s - b)
で昇順に並べ替えました。
【STEP: 2】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = lines[1].split(' ').map(Number);
// console.log(Math.max(...A), Math.min(...A));
A.sort((s, b) => b - s);
console.log(A[0], A[N - 1]);
});
sort((s, b) => b - s)
で 数値が大きい順に並べ替えて 左端と右端の要素を出力しました。並べ替えずに(Math.max(...A), Math.min(...A))
でも 同じ結果が得られました。
【STEP: 3】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = lines[1].split(' ').map(Number);
for (let i = 0; i < N; i++) {
if (A[i] >= 5) { // A[i] が 5 以上なら…
console.log(A[i]); // A[i] を表示
}
}
});
for文 で各値にアクセスし if文 で条件分岐。
【STEP: 4】コード
reader.on('close', () => {
const [N, K] = lines[0].split(' ').map(Number);
const A = lines[1].split(' ').map(Number);
for (let i = 0; i < N; i++) {
if (A[i] >= K) {
console.log(A[i]);
}
}
});
【STEP: 3】の応用。
【STEP: 5】コード
reader.on('close', () => {
const N = Number(lines[0]);
const A = lines[1].split(' ').map(Number);
const K = A.reduce((a, c) => a + c) / N;
for (let i = 0; i < N; i++) {
if (A[i] >= K) {
console.log(A[i]);
}
}
});
reduce((a, c) => a + c)
で、A の各値を足し上げた値を返してくれました。詳しくはMDN Plus様をご参照下さい。
【STEP: 6】コード
reader.on('close', () => {
const N = Number(lines[0]);
for (let i = 1; i <= N; i++) {
const [x, y] = lines[i].split(' ').map(Number);
const [X, Y] = [2 - x, 3 - y].map(Math.abs); // 2つの座標の差の絶対値
console.log(X + Y); // マンハッタン距離を出力
}
});
[2 - x, 3 - y].map(Math.abs)
で 2 – xと3 – y の絶対値を求めています。双方を足し合わせることでマンハッタン距離を求めることができました。
【STEP: 7】コード
reader.on('close', () => {
const [N, A, B] = lines[0].split(' ').map(Number);
const [x1, y1] = lines[A].split(' '); // A 番目の座標
const [x2, y2] = lines[B].split(' '); // B 番目の座標
const [X, Y] = [x1 - x2, y1 - y2].map(Math.abs); // 2つの座標の差の絶対値
console.log(X + Y); // マンハッタン距離を出力
});
【STEP: 6】の応用。
【FINAL】コード
reader.on('close', () => {
const N = Number(lines[0]);
const F = [0,1];
for (let i = 0; i < N-2; i++) {
F.push(F[i]+F[i+1]);
}
for (let i = 0; i < N; i++) {
console.log(F[i]);
}
});
フィボナッチ数列 (F
) の値を自動計算。
コメント