
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 LastIndex = {
(numArray: number[], v: number): number
};
const lastIndex: LastIndex = (numArray, v) => {
return numArray.lastIndexOf(v);
};
console.log(lastIndex(list, v));
Yano's answer
- 『IndexOf 最後から JavaScript』と検索したところlastIndexOfという関数があることがわかりました。
- 関数の命名(fetchIndexMatchTheLastV)は『最後のVとマッチする』を英訳すると"match the last V"と出てきたので命名しました。
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 a = alist.split(" ").map(Number)
type FetchIndexMatchTheLastV = {
(v: number, a: number[]): number;
}
const fetchIndexMatchTheLastV: FetchIndexMatchTheLastV = (v, a) => {
return a.lastIndexOf(v);
}
console.log(fetchIndexMatchTheLastV(v, a));
- 命名にtheなどの冠詞は使わない方が良いそうです。
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)
type ArrayType = {
(list: number[], v: number): number;
}
const arraySearchIndex: ArrayType = (list, v) => {
return list.lastIndexOf(v);
};
console.log(arraySearchIndex(list, v));
- 今回は、型エイリアスを定義し、関数に適用しました。
- 「javascript 何番目にあるかを調べる」で調べたところindexOfメソッドに辿り着き、特に配列の最後の要素から探索するlastIndexOfメソッドを見つけました。
- lastIndexOfメソッドは、与えられた要素が配列内で見つかった最後のインデックス番号を返し、見つからなければ-1を返します。
- 最初、問題の意図を正しく理解していなかったため、なかなか正解にならず苦戦しました。
- 具体的には、「最も右にあるVは前から何番目にあるかを出力」という部分をインデックス0番を含めない順番で数えようとしていました。
- しかし、「N 個の整数のうち先頭の要素 A[0]を、前から0番目であると数えることとします。」と書かれていることからインデックス番号0番目から何番目であるかを調べれば要件を満たせたと反省しました。
- 問題を正しく読むように心がけたいと思います。
Yuno'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:number[] = alist.split(" ").map(Number)
const selectLastIndexOfIntegers = (list:number[],v:number)=>{
return list.lastIndexOf(v);
}
console.log(selectLastIndexOfIntegers(list,v))
Yuki's answer
- lastIndexOfを知らなかったので、for文とif文でゴリ押ししました。
- 標準でメソッドが用意してあるので、そちらを使った方が良いです。
- 良い命名をつける、適したメソッドを見つけるのが今後の課題です。
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 IdentifyMostRightPosition = {
(v: number, list: number[]): number;
};
const identifyMostRightPosition: IdentifyMostRightPosition = (
v,
list
) => {
let mostRightPosition = -1;
for(let i = 0; i < list.length; i++) {
if(list[i] === v) {
mostRightPosition = i;
}
}
return mostRightPosition
};
console.log(identifyMostRightPosition(v, list));
参考
アルゴ式