- 基礎からTypeScriptを勉強したいと思い、paizaのスキルチェックCランクを進めている
- アウトプットのために何を学んだか書く
- 今回書いたコードはユーザーランキングを出力するプログラム
-
node.js
とTypeScript
をインストールして、tsc
とnode main.js
コマンドを叩いて処理を実行
書いたコード
const calculateRanking = (input: string): string => {
const lines = input.trim().split("\n");
const [N, M, K] = lines[0].split(" ").map(Number);
const coefficients = lines[1].split(" ").map(Number);
const userItems = lines.slice(2).map((line) => line.split(" ").map(Number));
const userScores: number[] = userItems.map((items) => {
let score = 0;
for (let i = 0; i < N; i++) {
score += coefficients[i] * items[i];
}
return Math.round(score);
});
userScores.sort((a, b) => b - a); // 降順にソート
return userScores.slice(0, K).join("\n");
};
// 入力例1
const input1 = `4 10 3
1.5 1.2 2 0.4
208 200 3 99988
255 150 50 65472
103 748 39 48571
159 403 32 89928
254 300 67 78492
249 298 47 45637
253 382 89 37282
250 350 78 76782
251 371 69 67821
256 312 89 54382`;
console.log(calculateRanking(input1));
結果は以下の通り
40553
36757
32272
使用したメソッドの説明
- trimメソッドは文字列の先頭と末尾にある空白文字(スペース、タブ、改行など)を削除するメソッド(今回のように、入力値の先頭と末尾に空白が見られない場合は不要かも)
- splitメソッドは文字列を指定した文字で区切って配列を作成する
- sliceメソッドは配列の指定した要素を抽出する
- .map(Number)は文字列の配列を数字の配列にする
振り返り
- まだまだAIを使わないと0からコードを書けないので、引き続き、paizaを使って勉強していく
-
const userScores
の中身の記述の理解が不十分なので明日復習する