6時だョ!!全員集合!!

Rails・JavaScrictを中心にアウトプットします。

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

Image from Gyazo

Ryuji's answer

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 = 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

参考

Tricky use case