2022年5月12日 アルゴ式 番外編
Ryuji's answer
TypeScript
import * as fs from 'fs' const input = fs.readFileSync("/dev/stdin", "utf8") const [nv, alist] = input.split("\n") const [n,v,..._] = nv.split(" ").map(Number) const list = alist.split(" ").map(Number) type PlusNumber = { (array: number[]): number; }; const plusNumber: PlusNumber = (array) => { const result = array.filter(word => word > 0); return result.length; }; console.log(plusNumber(list));
- 前回関数を使わずに実装していて、今回は型エイリアスと関数を使ってやると決めて取り組みました。
Yano's answer
- 型エイリアスを使用してみました。
- 『JavaScript 自然数 判定 メソッド』で検索しました。
Math.sign() - JavaScript | MDN
import * as fs from 'fs' const input = fs.readFileSync("/dev/stdin", "utf8") const [nv, alist] = input.split("\n") const [n] = nv.split(" ").map(Number) const list = alist.split(" ").map(Number) type CountNaturalNumber = { (numArray: number[]): number; } const countNaturalNumber: CountNaturalNumber = (numArray) => { return numArray.filter(num => Math.sign(num) === 1).length; } console.log(countNaturalNumber(list));
- Math.sign()は引数に渡した数字が自然数の場合に1を返します。
(マイナスの場合は戻り値が-1になります。) - 利点としては0 < num とする場合は小数点を含めて判定しますが、こちらの場合は整数のみを判定します。
- デメリットは、Math.sign()のメソッドの性質が分からないと読みにくいコードであることです。
- 型エイリアスと関数式の後にセミコロンが抜けていました。
Yui's answer
import * as fs from 'fs' const input = fs.readFileSync("/dev/stdin", "utf8") const [nv, alist] = input.split("\n") const [n,v,..._] = nv.split(" ").map(Number) const list = alist.split(" ").map(Number) const listNumber = (list: number[]): number => { return list.filter( num => num > 0).length; }; console.log(listNumber(list));
Yuki's answer
import * as fs from 'fs' const input = fs.readFileSync("/dev/stdin", "utf8") const [nv, alist] = input.split("\n") const [n, ..._] = nv.split(" ").map(Number) const list = alist.split(" ").map(Number) const findNumThanZero = (list: number[]): number => { return list.filter((num) => num > 0).length; }; console.log(findNumThanZero(list));