文字と整数の組のソート2《Bランク UP メニュー》

Bランクレベルアップメニュー【重複の判定・配列のソート・数字のみの出力・昇順ソート出力・文字と整数の組のソート2 ほか】

【インクリメント】コード

reader.on('close', () => {
   let n = Number(lines[0]);
   n++;  // n = n + 1
   console.log(n);
});
hogeちゃんの画像

n の値を n + 1 で上書きして出力しました。

【重複の判定】コード

const A = ['HND', 'NRT', 'KIX', 'NGO', 'NGO'];
const S = new Set(A);  // セットには 重複した値は保存できない → 重複が削除される
console.log(S.size < A.length);  // S の要素数が A の要素数より小さければ true
hogeちゃんの画像

セット には 重複した値は保存できないので 配列を まるごと セットに 変換すると 重複が削除されます。なので 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
hogeちゃんの画像

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);
});
hogeちゃんの画像
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 のみ出力
   }
});
hogeちゃんの画像

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]);
   }
});
hogeちゃんの画像

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)) {  // MS (キー) が含まれていれば…
         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]);  // AM の [キー, 値] を保存
   });
   A.sort((s, b) => b[1] - s[1]);  // A[i][1](M の値)を基準に並替え 
   A.forEach((value) => {
      console.log(...value);  // A の値を展開して出力
   });
});
hogeちゃんの画像

マップ は キー が重複すると 値が上書きされるので M.set(S, M.get(S) + Number(D)) を実行すると 値は 先に保存した値 + Number(D) になりました。値を並替えるために M の各  [キー , 値] を 配列 A に 保存し A[i][1] を基準に並替えを行い  A の値を出力しました。

コメント