paizaの森練習問題コンテスト過去問題6

paizaの森練習問題コンテスト(2022年9月開催)の過去問

【球数制限】コード

reader.on('close', () => {
   const [n, k] = lines[0].split(' ').map(Number);
   const m = new Array(n);  // 各回の投球数
   for (let i = 1; i <= n; i++) {
      m[i - 1] = Number(lines[i]);  // i 回の投球数
   }
   const M = m.reduce((a, c) => a + c);  // m の要素を全て足算した値
   console.log(M < k ? 'Yes' : 'No');  // M が k 未満なら続投・さもなくば降板
});
hogeちゃんの画像

配列の値を全て足し合わせた値が k 未満なら″Yes″でそうじゃなければ ″No″。reduce((a, c) => a + c の戻り値は((返値,現在値)=>返値+現在値を順に処理)→最後の処理結果となるみたいね。

【最大イニング】コード

reader.on('close', () => {
   const k = Number(lines[0]);
   let M = 0;  // 投球数
   for (let i = 1; i <= 9; i++) {
      M += Number(lines[i]);  // 各イニングの投球数を加算
      if (M > k) {  // 投球数が k より多くなれば…
         console.log(i);  // i を出力(降板)
         break;
      }
   }
   if (M <= k) {  // 投球数が k 以下なら…
      console.log('Yes');  // 完投
   }
});
hogeちゃんの画像

余談ですが…。問題文を読んで 元巨人の 江川投手を思い出したゎ。

【ロボットの移動】コード

reader.on('close', () => {
   const [x, y] = lines[0].split(' ').map(Math.abs);  // 入力を絶対値に変換
   console.log(x + y);
});
hogeちゃんの画像

map(Math.abs) で 入力値を 絶対値に変換してから 足し算しています。

【最大の差】コード

reader.on('close', () => {
   const m = new Array(5);  // 要素数 5 個の配列
   for (let i = 0; i < 5; i++) {
      m[i] = Number(lines[i]);  // m に各値を保存
   }
   // 配列 m の値を展開して 最大値(Math.max())と 最小値(Math.min())を取得
   const [MAX, MIN] = [Math.max(...m), Math.min(...m)];
   console.log(MAX - MIN);
});
hogeちゃんの画像
配列の値を スプレット構文(…m)で 展開して 最大値と最小値を取得しています。

【中央値】コード

reader.on('close', () => {
   const m = new Array(5);
   for (let i = 0; i < 5; i++) {
      m[i] = Number(lines[i]);
   }
   m.sort((s, b) => s - b);  // m を昇順に並べ替え
   console.log(m[2]);  // 中央値なので 0 から数えて 2番目 を出力
});
hogeちゃんの画像

配列 m の値の 小さい順への並べ替えはm.sort((s, b) => s - b) で実行できました。

【採点】コード

reader.on('close', () => {
   const n = Number(lines[0]);
   let points = 0;  // 合計得点
   for (let i = 1; i <= n; i++) {
      const m = lines[i];
      switch (m) {  // m が…
      case 'correct':  // 'correct'なら
         points += 2;  // 2 加点
         break;
      case 'incorrect':  // 'incorrect'なら
         points--;  // 1 減点
         break;
      }
   }
   console.log(points);
});
hogeちゃんの画像

switch文 で 条件分岐しています。

コメント