辞書《Cランク UP メニュー》

Cランクレベルアップメニュー【書の基本・辞書のデータ更新・辞書データの順序・辞書】

【STEP: 1】コード

reader.on('close', () => {
   const n = Number(lines[0]);
   const S = lines[n + 1];
   const wealth = new Map();  // マップ wealth を宣言
   for (let i = 1; i <= n; i++) {
      const [s, a] = lines[i].split(' ');
      wealth.set(s, a);  // wealth に要素 {s(キー), a(値)}を追加
   }
   console.log(wealth.get(S));  // wealthS (キー)とペアの値を出力
});
hogeちゃんの画像

マップ wealth を設置し set(s, a) で 要素を追加。get(S) で値を取得しています。

【STEP: 2】コード

reader.on('close', () => {
   const n = Number(lines[0]);
   const m = Number(lines[n + 1]);
   const S = lines[n + m + 2];
   const attack = new Map();  // マップ attack を宣言
   for (let i = 1; i <= n; i++) {
      const s = lines[i];  // s はダメージを受ける人の名前
      attack.set(s, 0);  // attack に 要素 {s, 0(ダメージ)} を追加
   }
   for (let i = n + 1; i <= m + n + 1; i++) {
      const [p, a] = lines[i].split(' ');  // p はダメージを受けた人, a はダメージの数
      attack.set(p, attack.get(p) + Number(a));  // attack.p を {p, p の値 + Number(a)} で上書き
   }
   console.log(attack.get(S));  // attack.S の値を出力
});
hogeちゃんの画像

set(s, 0) set(p, attack.get(p) + Number(a))s, p が同じ値なら s の値が上書きされるみたいね。

【STEP: 3】コード

reader.on('close', () => {
   const n = Number(lines[0]);
   const m = Number(lines[n + 1]);
   const attack = new Map();  // マップ attack を宣言
   for (let i = 1; i <= n; i++) {
      const s = lines[i];
      attack.set(s, 0);  // attack に 要素 {s, 0(ダメージ)} を追加
   }
   for (let i = n + 2; i <= m + n + 1; i++) {
      const [p, a] = lines[i].split(' ');
      attack.set(p, attack.get(p) + Number(a));  // attack.p を {p, p の値 + Number(a)} で上書き
   }
   const A = [];
      attack.forEach((value, key) => {
      A.push(key);  // Aattack の キー のみを保存
   });
   A.sort();  // A を辞書順で並替え
   for (const a of A) {
      console.log(attack.get(a));  // attack.a の値を出力
   }
});
hogeちゃんの画像

attack の キー を 配列 A に保存し A を辞書順 に並べ替え forEach() で各要素を キー として持つ値を順次出力しました。

【FINAL】コード

reader.on('close', () => {
   const [p, q, r] = lines[0].split(' ').map(Number);
   const worker = new Map();  // マップ worker を宣言
   const A = [];
   for (let i = 1; i <= p; i++) {
      const [a, b1] = lines[i].split(' ').map(Number);
  // a は Aグループの人,b1は a が仕事を頼む Bグループの人
      worker.set(a, b1);  // worker に要素 {a, b1}を保存
      A.push(a);  //  Aa を保存
   }
   for (const [key, value] of worker) {
      for (let i = p + 1; i <= q + p; i++) {
         const [b2, c] = lines[i].split(' ').map(Number);
 // b2 は Bグループの人,cb2 が仕事を頼む Cグループの人
         if (value === b2) {  // valueb2 と一致すれば
            worker.set(key, c);  // worker の要素を上書き
            break;
         }
      }
   }
   A.sort((s, b) => s - b);
   A.forEach(a => {
      console.log(a, worker.get(a));
   });
});
hogeちゃんの画像

解答コード例 では マップを 2つ 作っていましたが こちらのコードは マップをひとつだけ作成し {a , b }を{a , c }で上書きしました。

コメント