ハッシュ関数を作ってみよう

ハッシュメニュー【ハッシュ関数とは・やや複雑なハッシュ・文字列のハッシュ・ハッシュ関数を作ってみよう】

【ハッシュ関数とは】コード

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);
   }
});
hogeちゃんの画像

問題分の指示通り 入力値を 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);
   }
});
hogeちゃんの画像

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);
   }
});
hogeちゃんの画像

入力値に ″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));
   }
});
hogeちゃんの画像

入力値の最初と最後の文字コードナンバー値 の 差 を求めてみました。

コメント