1. paizaラーニングトップ
  2. レベルアップ問題集
  3. ハッシュメニュー(言語選択)
  4. 問題一覧 COBOL(Beta)編
  5. ハッシュ関数を作ってみよう COBOL(Beta)編

ハッシュメニューのサムネイル
ハッシュ関数を作ってみよう COBOL(Beta)編(paizaランク C 相当)

問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう!

問題

下記の問題をプログラミングしてみよう!

文字列を受け取り、0 以上 100 未満の整数を返すハッシュ関数を作成してみましょう。

ハッシュ関数は、以下のような性質を持っていることが期待されます。

・ 同じ入力に対して、常に同じ出力を返す
・ 出力から入力を推測することが難しい
・ 出力が一様に分布している (出力値に偏りがない)


これらの条件をなるべく満たすような、オリジナルのハッシュ関数を作ってみましょう。

n 個の文字列が与えられるのでそれぞれの文字列について、あなたが作ったハッシュ関数を用いてハッシュ値を計算し、出力してください。

この問題は決まった答えがないため、スペシャルジャッジを採用しています。ジャッジプログラムは、あなたの作成したハッシュ関数が 1 つめの条件を満たしている場合に正答とします。

どんな文字列に対しても 0 を返すハッシュ関数を用いてもこの問題は正解することができますが、この関数は 3 つめの条件を全く満たせていません。

また、文字列の長さを返すハッシュ関数を用いてもこの問題は正解することができますが、この関数は 2 つめの条件を満たせていません。

2 つめと 3 つめの条件がなるべく満たされるように、工夫してみましょう。

入力される値

n
s_1
s_2
...
s_n


入力値最終行の末尾に改行が1つ入ります。
文字列は標準入力から渡されます。 標準入力からの値取得方法はこちらをご確認ください
期待する出力

n 行出力してください。
i 行目 (1 ≦ i ≦ n) には、あなたが作ったハッシュ関数を用いて計算した、文字列 s_i のハッシュ値 (0 以上 100 未満) を出力してください。
また、末尾に改行を入れ、余計な文字、空行を含んではいけません。

条件

すべてのテストケースにおいて、以下の条件をみたします。

・ 1 ≦ n ≦ 100,000
・ s_i は 英小文字のみからなる 1 文字以上 10 文字以下の文字列

入力例1

5
abc
bca
cab
aaa
abc

出力例1

14
11
11
6
14

問題一覧へ戻る

ページの先頭へ戻る