2022年5月7日 アルゴ式 番外編
プログラム上で入力を扱う
Ruby
N, V = gets.split(' ').map!(&:to_i) A = gets.split(' ').map!(&:to_i) puts N puts V puts A.class
JavaScript
function main(input) { const args = input.split("\n"); const inputArray = args.map((n) => n.split(" ")); const array1 = inputArray[0].map((n) => parseInt(n, 10)); const N = array1[0]; const V = array1[1]; const A = args[1].split(" ").map((n) => parseInt(n, 10)); console.log(N); console.log(V); console.log(A); } main(require('fs').readFileSync('/dev/stdin', 'utf8'));
- String.prototype.split()は、引数に渡した改行コードや空白文字にマッチする部分を取り除いて、その部分をコンマで要素を区切り配列を返します。
- parseInt()は整数の文字列をNumber型に変更します。第二引数は10進数を指定しています。
今回の問題
配列の全探索 2
Ryuji's answer
function main(input) { const args = input.split("\n"); const inputArray = args.map((n) => n.split(" ")); const array1 = inputArray[0].map((n) => parseInt(n, 10)); const N = array1[0]; const V = array1[1]; const A = inputArray[1].map((n) => parseInt(n, 10)); const results = A.filter(word => word === V); console.log(results.length); } main(require('fs').readFileSync('/dev/stdin', 'utf8'));
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) const results: number[] = list.filter(word => word === v); console.log(results.length);
- 次回から関数で書いていきます!
Yano's answer
N, V = gets.split(' ').map!(&:to_i) A = gets.split(' ').map!(&:to_i) count_v = A.select { |n| n == V }.size puts count_v
- rubyではfilterとselectは同じ結果が得られます。
function main(input) { const args = input.split("\n"); const inputArray = args.map((n) => n.split(" ")); const array1 = inputArray[0].map((n) => parseInt(n, 10)); const N = array1[0]; const V = array1[1]; const A = args[1].split(" ").map((n) => parseInt(n, 10)); countV = A.filter(n => n === V).length console.log(countV); } main(require('fs').readFileSync('/dev/stdin', 'utf8'));
- countVの定義時にconstをつけ忘れていましたが出力に問題はありませんでした。
- 変数宣言が行われていない変数に値を格納した場合は、グローバルスコープの変数として宣言したとみなされます。strictモードではエラーになります。
Yuki'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) type CountSameNum = { (targetNum: number, array: number[]): number; }; const countSameNum: CountSameNum = (targetNum, array) => { const resultArray = array.filter((num) => num === targetNum); return resultArray.length; }; console.log(countSameNum(v, list));
◆ 型エイリアスで呼び出し可能オブジェクトを定義する
省略なし
type Fn = { (num1: number, num2: number): number }
省略記法
type Fn = (num1: number, num2: number) => number