<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ハッシュメニュー - IQパズルステップ</title>
	<atom:link href="https://chokomon.com/tag/hash_problems/feed/" rel="self" type="application/rss+xml" />
	<link>https://chokomon.com</link>
	<description>ちょこっと頭を良くするIQパズル問題集</description>
	<lastBuildDate>Fri, 22 Jul 2022 03:58:07 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://chokomon.com/wp-content/uploads/2022/02/cropped-icon512-32x32.png</url>
	<title>ハッシュメニュー - IQパズルステップ</title>
	<link>https://chokomon.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【ハッシュメニュー】ハッシュテーブルを使おう (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/37-hash_problems-02-03-00504/</link>
					<comments>https://chokomon.com/37-hash_problems-02-03-00504/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Fri, 22 Jul 2022 03:58:06 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[ハッシュメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-1800]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=5893</guid>

					<description><![CDATA[【ハッシュメニュー】> FINAL問題 ハッシュテーブルを使おう (paizaランク C 相当) [難易度: 1811 ±40] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例 解説 問題文の解読に苦労しましたが…]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/37-hash_problems/">ハッシュメニュー</a>】> <a href="https://paiza.jp/works/mondai/hash_problems/hash_problems__hashtable_boss" target="_blank" rel="noreferrer noopener">FINAL問題 ハッシュテーブルを使おう (paizaランク C 相当)</a> [難易度: <strong>1811 ±40</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img fetchpriority="high" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/07/37-02-03-01.png" alt="" class="wp-image-5894"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>ハッシュテーブル (チェイン法) を作り、データ (整数値) の挿入クエリと検索クエリを処理してください。<br><br>ハッシュテーブルは要素数 100 の配列とし、配列の各要素にはデータのリストを格納することとします。なお、各要素の初期値は空リストとします。各リストには複数のデータが含まれる可能性がありますが、格納された順番にデータが並ぶように実装してください。<br><br>ハッシュ関数は、入力で与えられる整数 a, b を用いて <code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">H(x) = (a * x + b) % 100</mark></code> とします。<br><br>クエリは、以下の形式で入力されます。<br></p>



<p class="has-gray-background-color has-background"><code>1 x</code><br>ハッシュテーブルにデータ x を格納してください。<br><br><code>2 x</code><br>ハッシュテーブルにデータ x が格納されているかどうかを調べてください。格納されているなら <code>Yes</code> と、格納されていないなら <code>No</code> と出力してください。</p>



<p></p>



<p>すべてのクエリを処理したあと、ハッシュテーブルの状態を出力してください。</p>



<p></p>



<p><strong>入力値（例）</strong><br>17 13<br>10<br>1 1<br>1 2<br>1 3<br>1 4<br>1 5<br>2 4<br>2 7<br>2 2<br>2 1<br>2 6</p>



<p><strong>出力値（例）</strong><br>Yes<br>No<br>Yes<br>Yes<br>No<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>1<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>2<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>3<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>4<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>5<br></p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    for ($i = 0; $i &lt; 100; $i++) {
        $query[$i] = [];
    }
    
    list($a, $b) = explode(" ", trim(fgets(STDIN)));
    
    $q = trim(fgets(STDIN));
    
    for ($i = 0; $i &lt; $q; $i++) {
        list($k, $x) = explode(" ", trim(fgets(STDIN)));
        
        $hash = ($a * $x + $b) % 100;
        
        if ($k == 1) {
            array_push($query[$hash], $x);
            
        } elseif ($k == 2) {
            echo (in_array($x, $query[$hash])) ? "Yes" : "No";
            echo "\n";
        }
    }
    for ($i = 0; $i &lt; 100; $i++) {
        
        if (empty($query[$i])) {
            echo "\n";
        } else {
            echo implode(" ", $query[$i]). "\n";
        }
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="660" height="800" src="https://chokomon.com/wp-content/uploads/2022/07/37-02-03-02.png" alt="" class="wp-image-5895"/></figure>



<h2 class="wp-block-heading">解説</h2>



<p>問題文の解読に苦労しましたが、クエリの処理の後にハッシュテーブル（配列）を出力するという解答のようです。</p>



<p>クエリは「2 x」がYes、Noの出力なので、in_array()で検索して出力しました。</p>



<p></p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">} elseif ($k == 2) {
            echo (in_array($x, $query[$hash])) ? "Yes" : "No";</pre></div>



<p></p>



<p>そのあとに、配列を出力します。<br>配列は、クエリ「1 x」で処理したクエリを出力するのですが、</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">if ($k == 1) {
            array_push($query[$hash], $x);</pre></div>



<p></p>



<p class="has-gray-background-color has-background">$hash = ($a * $x + $b) % 100;</p>



<p></p>



<p>このハッシュ計算をすると、</p>



<p>1 1　→　30<br>1 2　→　47<br>1 3　→　64<br>1 4　→　81<br>1 5　→　98</p>



<p>となるので、配列の$query[30]、$query[47]...とそれぞれの番号に$xを入れます。</p>



<p>YesNoの後に出力すると配列の空は改行になり30番まで空白でそのあと「1」が出力される...となります。分かりにくかったですｗ</p>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/37-hash_problems-02-03-00504/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【ハッシュメニュー】ハッシュテーブル(チェイン法) (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/37-hash_problems-02-02-00503/</link>
					<comments>https://chokomon.com/37-hash_problems-02-02-00503/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Thu, 21 Jul 2022 12:45:22 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[ハッシュメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-1500]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=5888</guid>

					<description><![CDATA[【ハッシュメニュー】> 【ハッシュテーブルを使おう】STEP: 2 ハッシュテーブル(チェイン法) (paizaランク C 相当) [難易度: 1512 ±40] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/37-hash_problems/">ハッシュメニュー</a>】> <a href="https://paiza.jp/works/mondai/hash_problems/hash_problems__hashtable_step1" target="_blank" rel="noreferrer noopener">【ハッシュテーブルを使おう】STEP: 2 ハッシュテーブル(チェイン法) (paizaランク C 相当)</a> [難易度: <strong>1512 ±40</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/07/37-02-02-01.png" alt="" class="wp-image-5889"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>n 個の整数 x_1, x_2, ..., x_n が順に与えられます。ハッシュ関数<mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color"> <code>H(x) = x % 10</code></mark> を用いて、この n 個の整数をハッシュテーブルに格納してください。ハッシュテーブルは要素数 10 の配列とし、配列の各要素にはデータのリストを格納することとします。なお、各要素の初期値は空リストとします。各リストには複数のデータが含まれる可能性がありますが、格納した順番にデータが並ぶように実装してください。最後に、ハッシュテーブルの状態を出力してください。</p>



<p>入力例 1 を用いて説明します。<br>最初に格納するデータは 17 です。このデータのハッシュ値は 17 % 10 = 7 ですから、配列の添字 7 の位置にあるリストにデータ 17 を格納します。リストは <code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">[17]</mark></code> となります。<br>次に格納するデータは 188 で、ハッシュ値は 8 となるので、添字 8 の位置にあるリストにデータ 188 を格納します。リストは <code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">[188]</mark></code> となります。<br>次に格納するデータは 38 で、ハッシュ値は 8 となるので、添字 8 の位置にあるリストにデータ 38 を格納します。リストは <code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">[188, 38]</mark></code> となります。<br>次に格納するデータは 77777 で、ハッシュ値は 7 となるので、添字 7 の位置にあるリストにデータ 77777 を格納します。リストは <code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">[17, 77777]</mark></code> となります。</p>



<p>以上で全データの格納が終了しました。最終的なハッシュテーブルの状態は、</p>



<p class="has-gray-background-color has-background">[]<br>[]<br>[]<br>[]<br>[]<br>[]<br>[]<br>[17, 77777]<br>[188, 38]<br>[]



<p>となります。</p>



<p></p>



<p><strong>入力値（例）</strong><br>4<br>17<br>188<br>38<br>77777</p>



<p><strong>出力値（例）</strong><br><br><br><br><br><br><br>17 77777<br>188 38<br></p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    for ($i = 0; $i &lt; 10; $i++) {
        $a[$i] = [];
    }
    
    $n = trim(fgets(STDIN));
    for ($i = 0; $i &lt; $n; $i++) {
        $x = trim(fgets(STDIN));
        
        $hash = $x % 10;
        
        array_push($a[$hash], $x);
    }
    //print_r($a);
    
    for ($i = 0; $i &lt; 10; $i++) {
        
        if (empty($a[$i])) {
            echo "\n";
            
        } else {
            echo implode(" ", $a[$i]). "\n";
        }
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="280" src="https://chokomon.com/wp-content/uploads/2022/07/37-02-02-02.png" alt="" class="wp-image-5890"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/37-hash_problems-02-02-00503/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【ハッシュメニュー】ハッシュテーブル(オープンアドレス法) (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/37-hash_problems-02-01-00502/</link>
					<comments>https://chokomon.com/37-hash_problems-02-01-00502/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Tue, 19 Jul 2022 22:11:41 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[ハッシュメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-1500]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=5883</guid>

					<description><![CDATA[【ハッシュメニュー】> 【ハッシュテーブルを使おう】STEP: 1 ハッシュテーブル(オープンアドレス法) (paizaランク C 相当) [難易度: 1524 ±37] ※リンク先へ移動するためには[paiza]へのログインが必要です。 …]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/37-hash_problems/">ハッシュメニュー</a>】> <a href="https://paiza.jp/works/mondai/hash_problems/hash_problems__hashtable_step0" target="_blank" rel="noreferrer noopener">【ハッシュテーブルを使おう】STEP: 1 ハッシュテーブル(オープンアドレス法) (paizaランク C 相当)</a> [難易度: <strong>1524 ±37</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/07/37-02-01-01.png" alt="" class="wp-image-5884"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>n 個の整数 x_1, x_2, ..., x_n が順に与えられます。ハッシュ関数 <code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">H(x) = x % 10</mark></code> を用いて、この n 個の整数をハッシュテーブルに格納してください。ハッシュテーブルは要素数 10 の配列とし、配列の各要素にはデータそのものを格納することとします。なお、各要素の初期値は -1 とします。ハッシュ値が衝突した場合は、空いている添字が見つかるまで <code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">H(x) ← (H(x) + 1) % 10</mark> </code>による再計算をおこなってください。最後に、ハッシュテーブルの状態を出力してください。</p>



<p>入力例 1 を用いて説明します。<br>最初に格納するデータは 17 です。このデータのハッシュ値は 17 % 10 = 7 ですから、配列の添字 7 の位置にデータを格納しようとします。添字 7 の位置にはまだいずれのデータも格納されていないので、ここにデータ 17 を格納します。<br>次に格納するデータは 188 で、ハッシュ値は 8 となります。添字 8 の位置にはまだいずれのデータも格納されていないので、ここにデータ 188 を格納します。<br>次に格納するデータは 38 で、ハッシュ値は 8 となります。添字 8 の位置にはすでにデータ 188 が格納されているため、データ 38 をこの位置に格納することはできません。従って、<code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">H(x) ← (H(x) + 1) % 10</mark> </code>を用いてハッシュ値を再計算します。すると、(8 + 1) % 10 = 9 となります。添字 9 の位置にはまだいずれのデータも格納されていないので、ここにデータ 38 を格納します。<br>次のデータ 77777 は、ハッシュ値が 7 となりますが、添字 7 の位置にはすでにデータ 17 が格納されています。<code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">H(x) ← (H(x) + 1) % 10</mark> </code>を用いて再計算すると 8 となりますが、添字 8 の位置にもすでにデータ 188 が格納されています。そこでさらに再計算すると 9 となりますが、この位置にもデータ 38 が格納されています。さらに再計算すると 0 となり、添字 0 の位置にはまだいずれのデータも格納されていないためここにデータ 77777 を格納します。</p>



<p>以上で全データの格納が終了しました。最終的なハッシュテーブルの状態は、<code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">77777, -1, -1, -1, -1, -1, -1, 17, 188, 38</mark></code> となります。出力の際は、先頭から 1 要素ずつ改行区切りで、計 10 行で以下のように出力してください。</p>



<p class="has-gray-background-color has-background">77777<br>-1<br>-1<br>-1<br>-1<br>-1<br>-1<br>17<br>188<br>38</p>



<p></p>



<p></p>



<p><strong>入力値（例）</strong><br>4<br>17<br>188<br>38<br>77777</p>



<p><strong>出力値（例）</strong><br>77777<br>-1<br>-1<br>-1<br>-1<br>-1<br>-1<br>17<br>188<br>38</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    for ($i = 0; $i &lt; 10; $i++) {
        $a[$i] = -1;
    }
    
    $n = trim(fgets(STDIN));
    for ($i = 0; $i &lt; $n; $i++) {
        $x = trim(fgets(STDIN));
        
        $hash = $x % 10;
        
        while ($a[$hash] != -1) {
            $hash = ($hash + 1) % 10;
        }
        $a[$hash] = $x;
    }
    foreach($a as $value) {
        echo $value. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="400" src="https://chokomon.com/wp-content/uploads/2022/07/37-02-01-02.png" alt="" class="wp-image-5885"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/37-hash_problems-02-01-00502/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【ハッシュメニュー】ハッシュ関数を作ってみよう (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/37-hash_problems-01-04-00501/</link>
					<comments>https://chokomon.com/37-hash_problems-01-04-00501/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Tue, 19 Jul 2022 04:32:45 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[ハッシュメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-1600]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=5878</guid>

					<description><![CDATA[【ハッシュメニュー】> FINAL問題 ハッシュ関数を作ってみよう (paizaランク C 相当) [難易度: 1600 ±31] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例 解説 ハッシュ関数を好きに作って…]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/37-hash_problems/">ハッシュメニュー</a>】> <a rel="noreferrer noopener" href="https://paiza.jp/works/mondai/hash_problems/hash_problems__basic_boss" target="_blank">FINAL問題 ハッシュ関数を作ってみよう (paizaランク C 相当)</a> [難易度: <strong>1600 ±31</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/07/37-01-04-01.png" alt="" class="wp-image-5879"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>文字列を受け取り、0 以上 100 未満の整数を返すハッシュ関数を作成してみましょう。<br><br>ハッシュ関数は、以下のような性質を持っていることが期待されます。</p>



<p class="has-gray-background-color has-background">・ 同じ入力に対して、常に同じ出力を返す<br>・ 出力から入力を推測することが難しい<br>・ 出力が一様に分布している (出力値に偏りがない)</p>



<p></p>



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



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



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



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



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



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



<p></p>



<p><strong>入力値（例）</strong><br>5<br>abc<br>bca<br>cab<br>aaa<br>abc</p>



<p><strong>出力値（例）</strong><br>14<br>11<br>11<br>6<br>14</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    $n = trim(fgets(STDIN));
    
    for ($i = 0; $i &lt; $n; $i++) {
        $s = trim(fgets(STDIN));
        
        $hash = 0;
        
        for ($j = 0; $j &lt; mb_strlen($s); $j++) {
            $hash += ($j + 1) * (ord($s[$j]) - ord('a') + 1);
        }
        $hash %= 100;
        echo $hash. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="240" src="https://chokomon.com/wp-content/uploads/2022/07/37-01-04-02.png" alt="" class="wp-image-5880"/></figure>



<h2 class="wp-block-heading">解説</h2>



<p>ハッシュ関数を好きに作っていいという問題で、色々作れそうでしたが公式の解答を参考にしました。</p>



<p>文字列"a"に1、"b"に2、...、"z"に26を割り当てて入力文字列に対して、</p>



<p class="has-gray-background-color has-background">H(s) = (c_1 * 1 + c_2 * 2 + ... + c_n * n) % 100</p>



<p></p>



<p>をハッシュ関数として採用しています。</p>



<p></p>



<p>ord()というのは、アルファベットを数値に変換する関数です。</p>



<p>ord関数は以下の文法で使用できます。</p>



<p class="has-gray-background-color has-background">ord('文字列') <br><br>ord("A") //65<br>ord("a") //97</p>



<p></p>



<p>返り値は文字列のUnicodeコードポイントを表す整数が返されます。</p>



<p>ord関数は1文字に対して有効なので、文字列は1文字しか設定できませんので注意が必要です。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/37-hash_problems-01-04-00501/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【ハッシュメニュー】文字列のハッシュ (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/37-hash_problems-01-03-00500/</link>
					<comments>https://chokomon.com/37-hash_problems-01-03-00500/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Tue, 19 Jul 2022 02:38:52 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[ハッシュメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-1200]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=5873</guid>

					<description><![CDATA[【ハッシュメニュー】> 【ハッシュ関数を作ってみよう】STEP: 3 文字列のハッシュ (paizaランク C 相当) [難易度: 1221 ±35] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/37-hash_problems/">ハッシュメニュー</a>】> <a href="https://paiza.jp/works/mondai/hash_problems/hash_problems__basic_step2" target="_blank" rel="noreferrer noopener">【ハッシュ関数を作ってみよう】STEP: 3 文字列のハッシュ (paizaランク C 相当)</a> [難易度: <strong>1221 ±35</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/07/37-01-03-01.png" alt="" class="wp-image-5874"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>前問までで実装したハッシュは、ともに整数値を入力としてとるものでした。ハッシュの入力として与えられるデータは、整数値に限りません。文字列、オブジェクトなどさまざまです。本問では、文字列を入力とするハッシュ関数を実装してみましょう。<br><br>n 個の文字列 x_1, x_2, ..., x_n が与えられます。各 x_i について、以下のハッシュ関数を用いてハッシュ値を計算してください。<br></p>



<p class="has-gray-background-color has-background">H(x) = x.count('p') + x.count('a') + x.count('i') + x.count('z')</p>



<p></p>



<p>なお、文字列 s と文字 c について、<code><mark style="background-color:rgba(0, 0, 0, 0)" class="has-inline-color has-light-orange-color">s.count(c)</mark></code> は s に含まれる文字 c の個数を表します。</p>



<p></p>



<p><strong>入力値（例）</strong><br>5<br>paiza<br>pizza<br>kirishima<br>aizap<br>neko</p>



<p><strong>出力値（例）</strong><br>5<br>5<br>4<br>5<br>0</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
    $n = trim(fgets(STDIN));
    for ($i = 0; $i &lt; $n; $i++) {
        $s = trim(fgets(STDIN));
        
        $len = mb_strlen($s);
        $count = 0;
        
        for ($j = 0; $j &lt; $len; $j++) {
            $x = "paiz";
            for ($k = 0; $k &lt; 4; $k++) {
                if ($s[$j] == $x[$k]) {
                    $count++;
                }
            }
        }
        echo $count. "\n";
    }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="240" src="https://chokomon.com/wp-content/uploads/2022/07/37-01-03-02.png" alt="" class="wp-image-5875"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/37-hash_problems-01-03-00500/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【ハッシュメニュー】やや複雑なハッシュ (paizaランク C)-解答例-PHP編</title>
		<link>https://chokomon.com/37-hash_problems-01-02-00499/</link>
					<comments>https://chokomon.com/37-hash_problems-01-02-00499/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Mon, 18 Jul 2022 22:11:25 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[ハッシュメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクC]]></category>
		<category><![CDATA[難易度-1000]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=5867</guid>

					<description><![CDATA[【ハッシュメニュー】> 【ハッシュ関数を作ってみよう】STEP: 2 やや複雑なハッシュ (paizaランク C 相当) [難易度: 1034 ±38] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/37-hash_problems/">ハッシュメニュー</a>】> <a href="https://paiza.jp/works/mondai/hash_problems/hash_problems__basic_step1" target="_blank" rel="noreferrer noopener">【ハッシュ関数を作ってみよう】STEP: 2 やや複雑なハッシュ (paizaランク C 相当)</a> [難易度: <strong>1034 ±38</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/07/37-01-02-01.png" alt="" class="wp-image-5869"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>前問で実装したハッシュは、とてもシンプルなものでした。本問では、やや複雑なハッシュを計算してみましょう。<br><br>n 個の整数 x_1, x_2, ..., x_n と、整数 a, b, mod が与えられます。各 x_i について、以下のハッシュ関数を用いてハッシュ値を計算してください。<br></p>



<p class="has-gray-background-color has-background">H(x) = (a * x + b) % mod</p>



<p></p>



<p></p>



<p><strong>入力値（例）</strong><br>5 3 4 7<br>12<br>9<br>1<br>3<br>7</p>



<p><strong>出力値（例）</strong><br>5<br>3<br>0<br>6<br>4</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
     list($n, $a, $b, $mod) = explode(" ", trim(fgets(STDIN)));
     
     for($i = 0; $i &lt; $n; $i++) {
         $x = trim(fgets(STDIN));
         
         $h = ($a * $x + $b) % $mod;
         echo $h. "\n";
     }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="240" src="https://chokomon.com/wp-content/uploads/2022/07/37-01-02-02.png" alt="" class="wp-image-5870"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/37-hash_problems-01-02-00499/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【ハッシュメニュー】ハッシュ関数とは (paizaランク D)-解答例-PHP編</title>
		<link>https://chokomon.com/37-hash_problems-01-01-00498/</link>
					<comments>https://chokomon.com/37-hash_problems-01-01-00498/#respond</comments>
		
		<dc:creator><![CDATA[東鳥子]]></dc:creator>
		<pubDate>Mon, 18 Jul 2022 21:57:02 +0000</pubDate>
				<category><![CDATA[paiza-問題集]]></category>
		<category><![CDATA[ハッシュメニュー]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[ランクD]]></category>
		<category><![CDATA[難易度-1200]]></category>
		<guid isPermaLink="false">https://chokomon.com/?p=5861</guid>

					<description><![CDATA[【ハッシュメニュー】> 【ハッシュ関数を作ってみよう】STEP: 1 ハッシュ関数とは (paizaランク D 相当) [難易度: 1214 ±28] ※リンク先へ移動するためには[paiza]へのログインが必要です。 解答例]]></description>
										<content:encoded><![CDATA[
<p>【<a href="https://chokomon.com/paiza_mondai/37-hash_problems/">ハッシュメニュー</a>】> <a href="https://paiza.jp/works/mondai/hash_problems/hash_problems__basic_step0" target="_blank" rel="noreferrer noopener">【ハッシュ関数を作ってみよう】STEP: 1 ハッシュ関数とは (paizaランク D 相当)</a> [難易度: <strong>1214 ±28</strong>]



<p>※リンク先へ移動するためには[<a href="https://paiza.jp/works" target="_blank" rel="noreferrer noopener">paiza</a>]へのログインが必要です。</p>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="300" src="https://chokomon.com/wp-content/uploads/2022/07/37-01-01-01.png" alt="" class="wp-image-5863"/></figure>



<div class="wp-block-dvaux-frame sc_frame_wrap inline"><div class="sc_frame_title inline" style="background-color:#ccc">問題文</div><div class="sc_frame" style="background-color:#fff;border-color:#ccc">
<p>n 個の整数 x_1, x_2, ..., x_n と、整数 mod が与えられます。各 x_i について、以下のハッシュ関数を用いてハッシュ値を計算してください。</p>



<p class="has-gray-background-color has-background">H(x) = x % mod</p>



<p></p>



<p></p>



<p><strong>入力値（例）</strong><br>5 7<br>3<br>9<br>12<br>15<br>17</p>



<p><strong>出力値（例）</strong><br>3<br>2<br>5<br>1<br>3</p>
</div></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">解答例</h2>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
     list($n, $mod) = explode(" ", trim(fgets(STDIN)));
     for($i = 0; $i &lt; $n; $i++) {
         $x = trim(fgets(STDIN));
         
         $h_x = $x % $mod;
         echo $h_x. "\n";
     }
?&gt;</pre></div>



<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>



<figure class="wp-block-image aligncenter size-full"><img loading="lazy" decoding="async" width="660" height="240" src="https://chokomon.com/wp-content/uploads/2022/07/37-01-01-02.png" alt="" class="wp-image-5864"/></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://chokomon.com/37-hash_problems-01-01-00498/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
