Bランクレベルアップメニュー【重複の判定・配列のソート・数字のみの出力・昇順ソート出力・文字と整数の組のソート2 ほか】
Task
【インクリメント】コード
reader.on('close', () => {
let n = Number(lines[0]);
n++; // n = n + 1
console.log(n);
});
n の値を n + 1 で上書きして出力しました。
【重複の判定】コード
const A = ['HND', 'NRT', 'KIX', 'NGO', 'NGO'];
const S = new Set(A); // セットには 重複した値は保存できない → 重複が削除される
console.log(S.size < A.length); // S の要素数が A の要素数より小さければ true
セット には 重複した値は保存できないので 配列を まるごと セットに 変換すると 重複が削除されます。なので S.size (Sの要素数)が A.length (Aの要素数)より少なければ A に重複があったことがわかります。
【配列(リスト)の重複カウント】コード
const A = ['HND', 'NRT', 'KIX', 'NGO', 'NGO', 'NGO', 'NGO', 'NGO'];
const S = new Set(A); // Set(4) [ "HND", "NRT", "KIX", "NGO" ]
console.log(A.length - S.size + 1); // 5
A.length - S.size + 1
は 8 – 4 + 1。
【配列のソート】コード
const A = [1, 3, 5, 6, 3, 2, 5, 23, 2];
A.sort((s, b) => s - b); // 小さい順に並替え
A.forEach(a => {
console.log(a);
});
sort((s, b) => s - b)
で 数値 を 小さい順に並べ替えることができました。【数字のみの出力】コード
reader.on('close', () => {
const n = Number(lines[0]);
for (let i = 1; i <= n; i++) {
const [S, D] = lines[i].split(' '); // アルファベットをS・数字を D で受取り…
console.log(D); // D のみ出力
}
});
n 行の入力を 半角スペース区切りで分割。アルファベットの部分をS・数字の部分を D で受取り D のみ出力しました。
【昇順ソート出力】コード
reader.on('close', () => {
const n = Number(lines[0]);
const a = lines[1].split(' ').map(Number);
a.sort((s, b) => s - b); // 小さい順に並替え
for (let i = 0; i < n; i++) {
console.log(a[i]);
}
});
a.sort((s, b) => s - b)
で a の要素を 昇順に並べ替えることができました。
【文字と整数の組のソート2】コード
reader.on('close', () => {
const M = new Map();
const n = Number(lines[0]);
for (let i = 1; i <= n; i++) {
const [S, D] = lines[i].split(' ');
if (M.has(S)) { // M に S (キー) が含まれていれば…
M.set(S, M.get(S) + Number(D)); // (S (キー) の値を元の値 + Number(D) で上書き
} else { // さもなくば…
M.set(S, Number(D)); // M に要素(キー = S, 値 = Number(D)) を追加
}
}
const A = []; // M の [キー, 値] を要素として持つ2次元配列
M.forEach((value, key) => {
A.push([key, value]); // A に M の [キー, 値] を保存
});
A.sort((s, b) => b[1] - s[1]); // A[i][1](M の値)を基準に並替え
A.forEach((value) => {
console.log(...value); // A の値を展開して出力
});
});
マップ は キー が重複すると 値が上書きされるので M.set(S, M.get(S) + Number(D))
を実行すると 値は 先に保存した値 + Number(D)
になりました。値を並替えるために M の各 [キー , 値] を 配列 A に 保存し A[i][1] を基準に並替えを行い A の値を出力しました。
コメント