ハッシュメニュー【ハッシュ関数とは・やや複雑なハッシュ・文字列のハッシュ・ハッシュ関数を作ってみよう】
【ハッシュ関数とは】コード
reader.on('close', () => {
const [n, mod] = lines[0].split(' ').map(Number);
for (let i = 1; i <= n; i++) {
const H = lines[i] % mod; // ハッシュ値を計算
console.log(H);
}
});
問題分の指示通り 入力値を mod で割った余り を出力しています。
ハッシュ関数については Wikipedia の解説も参照しました。
【やや複雑なハッシュ】コード
reader.on('close', () => {
const [n, a, b, mod] = lines[0].split(' ').map(Number);
for (let i = 1; i <= n; i++) {
const H = (a * lines[i] + b) % mod; // ハッシュ値を計算
console.log(H);
}
});
H は(a ☓ 入力値 + b) を mod で割った余り。
【文字列のハッシュ】コード
reader.on('close', () => {
const n = Number(lines[0]);
for (let j = 1; j <= n; j++) {
const x = lines[j] + 'paiz';
const p = x.match(/p/g).length - 1;
const a = x.match(/a/g).length - 1;
const i = x.match(/i/g).length - 1;
const z = x.match(/z/g).length - 1;
console.log(p + a + i + z);
}
});
入力値に ″paiz″ を連結して 正規表現で 調べたい文字の個数取得してから -1 した値を足し合わせた値を出力しています。
【ハッシュ関数を作ってみよう】コード
reader.on('close', () => {
const n = Number(lines[0]);
for (let i = 1; i <= n; i++) {
const s = lines[i];
const H = s.codePointAt(0) - s.codePointAt(s.length - 1);
console.log(Math.abs(H));
}
});
入力値の最初と最後の文字コードナンバー値 の 差 を求めてみました。
コメント