三次元データ (paizaランク B 相当)
解答例
三次元データですが、求めたい答えは二次元配列で求まります。
メソッドを駆使して解いてみました。
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//奥行きn、幅m、高さh,色x
const [n, m, h, x] = lines[0].split(" ").map(Number);
console.log(
lines.slice(1)
.map(line => line.split(" ").filter(v => Number(v) === x).length)
.reduce((a, b) => a + b)
);
少しずつconsole.logしながら書いていくとわかりやすいと思います。
補足
//入力linesの2行目以降をslice(1)で配列にする
console.log(
lines.slice(1)
);
//linesの要素1行1行をlineとしてsplitする
console.log(
lines.slice(1)
.map(line => line.split(" "))
);
//lineの要素を数値にして、xだけ残したいのでfilterする
console.log(
lines.slice(1)
.map(line => line.split(" ").filter(v => Number(v) === x)
);
//残ったxがいくつあるかlengthで求める
console.log(
lines.slice(1)
.map(line => line.split(" ").filter(v => Number(v) === x).length)
);
//「x何個あるか」の配列になったので、reduceで合計する
console.log(
lines.slice(1)
.map(line => line.split(" ").filter(v => Number(v) === x).length)
.reduce((a, b) => a + b)
);
//以上で完成