Skip to content

Instantly share code, notes, and snippets.

@ntk1000
Last active August 29, 2015 14:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ntk1000/af21ff930261f5dbd9eb to your computer and use it in GitHub Desktop.
Save ntk1000/af21ff930261f5dbd9eb to your computer and use it in GitHub Desktop.
paizaでアレした話

はま先生のエントリを受けて

これ チャレンジしてみました

jsどうなっているのか

サイ本をちゃんと読んでいないのでググってみる

mapreduceがあった

kao1

1問目

在庫計算プログラムを作成してください。改行区切りで N 個の商品の各在庫数 S が入力されるので、その合計を出力して下さい

  • 入力される値

入力は標準入力にて以下のフォーマットで与えられます。

N 
S_1 
S_2 
・ 
・ 
S_N
  • 期待する出力

全ての商品の在庫数を足した数を出力してください。

最後は改行し、余計な文字、空行を含んではいけません。

書いた

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data',function(chunk){
  var array = chunk.trim().split('\n');
  array.shift();
  var sum = array
    .map(function(line){
      return (/^\d/).test(line) ? parseInt(line,10) : 0;
    })
    .reduce(function(pre,cur){
      return pre + cur
    });

  console.log(sum);
});

2問目

改行区切りで N 個の各商品の在庫数 S が入力されるので、その合計を出力して下さい。

  • 入力される値

入力は以下のフォーマットで与えられる。

N 
T_1 S_1 P_1 
T_2 S_2 P_2 
・ 
・ 
・ 
T_N S_N P_N

  • 期待する出力

在庫数を最低限必要な在庫数を満たすために必要な金額の合計を出力してください。

最後は改行し、余計な文字、空行を含んではいけません。

書いた

foreachしてるところが臭い

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data',function(chunk){
  var array = chunk.trim().split('\n');
  array.shift();
  var sum = array
    .map(hogeMapper)
    .reduce(function(pre,cur){
      return pre + cur
    });

  console.log(sum);
});

function hogeMapper(line){
  var array = line.trim().split(' ');
  var sum = 0;
  array
    .map(function(line){
      return (/^\d/).test(line) ? parseInt(line,10) : 0;
    })
    .forEach(function(item,idx,array){
      if(idx===0 && item > array[1]){
        sum = (item - array[1]) * array[2];
      }
    });
    return sum;
}

3問目

累積和としゃくとり法を予め勉強しながら試す

process.stdin.resume();
process.stdin.setEncoding('utf8');

process.stdin.on('data',function(chunk){
  var array = chunk.trim().split('\n');
  var t= array.shift().split(' ').shift();
  //console.log(t);

  var csum = array
    .map(function(line){
      return (/^\d/).test(line) ? parseInt(line,10) : 0;
    })
    .reduce(function(pre,cur){
      if(pre.length > 0){
          cur +=pre[pre.length - 1];
      }
      pre.push(cur);
      return pre;
    }, []);

  //console.log(csum);

  var s = csum.map(function(cur,idx,array){
    if(idx < t){
      return cur;
    }
    var val= array[idx] - array[idx - t];
    return val;

  });

  //console.log(s);

  var max = Math.max.apply(Math,s);

  console.log(max);
});

残念ながら60点... TestCase4で失敗

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment