<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2japanesefull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>PamGau</title>
    <link>http://pamgau.net/</link>
    <description>Web周り、サッカーの話、ときどきヌコ</description>
    <language>ja</language>
    <generator>Nucleus CMS v3.31SP1</generator>
    <copyright>Copyright kyorecoba 2006 Some rights reserved</copyright>
    <category>Weblog</category>
    <docs>http://backend.userland.com/rss</docs>
    <image><link>http://pamgau.net/</link><url>http://pamgau.net/kyorecoba48x48.gif</url><title>PamGau</title></image>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/pamgau" /><feedburner:info uri="pamgau" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by/2.0/</creativeCommons:license><feedburner:browserFriendly>これはXMLで作成されたフィードです。RSSリーダーで閲覧したり、他のサイトにRSSを配信したりすることを目的としています。</feedburner:browserFriendly><item>
 <title><![CDATA[裸の英会話]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/aCapXC-SMQs/729</link>
<description>&lt;p&gt;先日、外国の知人(♂)とともに風呂屋に行きました。湯船に浸っていると、"&lt;strong&gt;What's that?&lt;/strong&gt;"との問いが彼から発せられました。&lt;/p&gt;
&lt;p&gt;私、やや&lt;a href="http://oshiete1.goo.ne.jp/qa3385753.html" title="「食い気味」の意味を教えてください。 - 教えて! goo"&gt;食い気味&lt;/a&gt;に答えて曰く、"&lt;strong&gt;The guard of Buddha. He manipulates the flame.&lt;/strong&gt;"&lt;/p&gt;
&lt;p&gt;「や」のつく自由業の方かどうかしりませんが、背中に&lt;a href="http://ja.wikipedia.org/wiki/%E4%B8%8D%E5%8B%95%E6%98%8E%E7%8E%8B" title="不動明王 - Wikipedia"&gt;不動明王&lt;/a&gt;を背負ってらっしゃったのを事前に確認し、子供の頃に近所の爺さんから聞いたことをそのまま云ってみただけでした。&lt;/p&gt;
&lt;p&gt;ただ、その答えが正しかったかどうかに自信がなく、調べてみました。&lt;/p&gt;
&lt;blockquote cite="http://ja.wikipedia.org/wiki/%E4%B8%8D%E5%8B%95%E6%98%8E%E7%8E%8B" title="不動明王 - Wikipedia"&gt;&lt;p&gt;釈迦が成道の修業の末、悟りを開くために「我、悟りを開くまではこの場を立たず」と決心して菩提樹の下に座した時、世界中の魔王が釈迦を挫折させようと押し寄せたところ、釈迦は穏やかな表情のまま降魔の印を静かに結び、魔王群をたちまちに超力で降伏したと伝えられるが、不動明王はその際の釈迦の内証を表現した姿であるとも伝えられる。穏やかで慈しみ溢れる釈迦も、心の中は護法の決意を秘めた鬼の覚悟であったというものである。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;うーん、釈迦の内証を表現した姿だとは知りませんでしたが、まあ間違ってはいないかなぁ…。年寄りの話はよく聞いておくものです。&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=aCapXC-SMQs:cwe4snL9-MU:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=aCapXC-SMQs:cwe4snL9-MU:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=aCapXC-SMQs:cwe4snL9-MU:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/aCapXC-SMQs" height="1" width="1"/&gt;</description>
 <category>Misc</category>
<comments>http://pamgau.net/item/729</comments>
 <pubDate>Wed, 8 Jul 2009 23:57:45 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/729</feedburner:origLink></item><item>
 <title><![CDATA[RubyでProject Euler - Problem 59]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/CwMhrNKlYEk/728</link>
<description>&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2059" title="Problem 59 - Project Euler" class="topic"&gt;Problem 59&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=59"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2059" title="Problem 59 - Project Euler"&gt;&lt;p&gt;暗号化鍵は3文字の小文字である. &lt;a href="http://projecteuler.net/project/cipher1.txt" title="cipher1.txt"&gt;cipher1.txt&lt;/a&gt;は暗号化されたASCIIのコードを含んでいる. また, 平文はよく用いられる英単語を含んでいる. この暗号文を復号し, 平文のASCIIでの値の和を求めよ.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;ちょっとしたハッカー気分でどうぞ。&lt;/p&gt;
&lt;p&gt;要は、英小文字3文字からなるパスワードを用意し、先頭バイトからXOR演算を繰り返し行って、文字に復号してみろ…ということです。&lt;/p&gt;
&lt;p&gt;まず先頭の何文字か分だけを復号し、「ありふれた英単語」が含まれるか否を確認してパスワードを決定します。全てを復号して答えを求めるのはその後がよさそうです。&lt;/p&gt;
&lt;p&gt;最初に何バイトぐらいを復号するか、また「ありふれた英単語」として何を選ぶのかの２点で少し試行錯誤が必要でした。わかってしまえばなんでもないのですけど…。&lt;/p&gt;
&lt;p&gt;復号後の"cipher1.txt"はちょっと意地悪な書き出しになっています。&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=CwMhrNKlYEk:ukxLoDzycyM:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=CwMhrNKlYEk:ukxLoDzycyM:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=CwMhrNKlYEk:ukxLoDzycyM:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/CwMhrNKlYEk" height="1" width="1"/&gt;</description>
 <category>Ruby</category>
<comments>http://pamgau.net/item/728</comments>
 <pubDate>Tue, 23 Jun 2009 22:17:00 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/728</feedburner:origLink></item><item>
 <title><![CDATA[RubyでProject Euler - Problem 58]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/3MFd-MWivqc/727</link>
<description>&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2058" title="Problem 58 - Project Euler" class="topic"&gt;Problem 58&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=58"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2058" title="Problem 58 - Project Euler"&gt;&lt;p&gt;1から初めて, 以下のように反時計回りに数字を並べていくと, 辺の長さが7の渦巻きが形成される.&lt;/p&gt;&lt;p&gt;(中略)&lt;/p&gt;&lt;p&gt;面白いことに, 奇平方数が右下の対角線上に出現する. もっと面白いことには, 対角線上の13個の数字のうち, 8個が素数である. ここで割合は8/13 ≒ 62%である.&lt;/p&gt;
&lt;p&gt;渦巻きに新しい層を付け加えよう. すると辺の長さが9の渦巻きが出来る. 以下, この操作を繰り返していく. 対角線上の素数の割合が10%未満に落ちる最初の辺の長さを求めよ.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://pamgau.net/item/697" title="RubyでProject Euler - Problem 28"&gt;Problem 28&lt;/a&gt;で扱った螺旋数列の問題で、手間が省けて簡単かと思いきや、さすがにこのレベルの問題はひとひねりがあります。&lt;/p&gt;
&lt;p&gt;「エラストテネスの篩」はせいぜい400万ぐらいまでを用意すればよかろうと思ったら、篩で用意した素数の範囲を超えても、なかなか10%を割りません。&lt;/p&gt;
&lt;p&gt;5千万ぐらいまで確保しようとしたところで、当然のことながら、必要なメモリ領域を確保できなくなりました。&lt;/p&gt;
&lt;p&gt;やむなく「ミラー・ラビン」でググると、親切にもWikipediaに素数判定用のRubyコードがあったのでコピペしました。敗北感にまみれながら…orz&lt;/p&gt;
&lt;p&gt;&lt;a href="http://ja.wikipedia.org/wiki/%E3%83%9F%E3%83%A9%E3%83%BC-%E3%83%A9%E3%83%93%E3%83%B3%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A%E6%B3%95" title="ミラー-ラビン素数判定法 - Wikipedia" class="topic"&gt;ミラー-ラビン素数判定法&lt;/a&gt; (Wikipedia)&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=3MFd-MWivqc:Cp0ohx_LGEc:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=3MFd-MWivqc:Cp0ohx_LGEc:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=3MFd-MWivqc:Cp0ohx_LGEc:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/3MFd-MWivqc" height="1" width="1"/&gt;</description>
 <category>Ruby</category>
<comments>http://pamgau.net/item/727</comments>
 <pubDate>Tue, 23 Jun 2009 21:45:00 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/727</feedburner:origLink></item><item>
 <title><![CDATA[RubyでProject Euler - Problem 57]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/nywcqZZRfmw/726</link>
<description>&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2057" title="Problem 57 - Project Euler" class="topic"&gt;Problem 57&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=57"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2057" title="Problem 57 - Project Euler"&gt;&lt;p&gt;2の平方根は無限に続く連分数で表すことができる.&lt;/p&gt;
&lt;p&gt;√ 2 = 1 + 1/(2 + 1/(2 + 1/(2 + … ))) = 1.414213…&lt;/p&gt;
&lt;p&gt;(中略)&lt;/p&gt;
&lt;p&gt;第8項は1393/985である. これは分子の桁数が分母の桁数を超える最初の例である.&lt;/p&gt;
&lt;p&gt;最初の1000項を考えたとき, 分子の桁数が分母の桁数を超える項はいくつか?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;とりあえず、連分数部分の分母・分子の数列をそれぞれ a&lt;sub&gt;n&lt;/sub&gt;, b&lt;sub&gt;n&lt;/sub&gt; とすると、以下の漸化式が成立します。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;a&lt;sub&gt;n&lt;/sub&gt; = 2a&lt;sub&gt;n-1&lt;/sub&gt; + b&lt;sub&gt;n-1&lt;/sub&gt;, a&lt;sub&gt;1&lt;/sub&gt; = 2
&lt;li&gt;b&lt;sub&gt;n&lt;/sub&gt; = a&lt;sub&gt;n-1&lt;/sub&gt;, b&lt;sub&gt;1&lt;/sub&gt; = 1
&lt;/ul&gt;
&lt;p&gt;プログラムで漸化式を扱う場合、そのまま関数にすると再帰呼び出しによる再計算量が異常に多くなり、実行効率が激減します。&lt;/p&gt;
&lt;p&gt;メモリを上手に使うのがうまいやりかたでしょう。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  seq_a = [2] # 分母
  seq_b = [1] # 連分数部分の分子
  ans = 0       # カウンタ

  (1..1000).each do |i|
    seq_a &amp;lt;&amp;lt; seq_a[i-1] * 2 + seq_b[i-1]
    seq_b &amp;lt;&amp;lt; seq_a[i-1]
    ans += 1 if seq_a[-1].to_s.length &amp;lt; (seq_a[-1] + seq_b[-1]).to_s.length
  end
  puts ans&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=nywcqZZRfmw:o7Ad6smFTb8:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=nywcqZZRfmw:o7Ad6smFTb8:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=nywcqZZRfmw:o7Ad6smFTb8:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/nywcqZZRfmw" height="1" width="1"/&gt;</description>
 <category>Ruby</category>
<comments>http://pamgau.net/item/726</comments>
 <pubDate>Tue, 23 Jun 2009 00:45:50 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/726</feedburner:origLink></item><item>
 <title><![CDATA[RubyでProject Euler - Problem 55, 56]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/FsgwfBYBxno/725</link>
<description>&lt;p&gt;初の複数問掲載記事。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2055" title="Problem 55 - Project Euler" class="topic"&gt;Problem 55&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=55"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2055" title="Problem 55 - Project Euler"&gt;&lt;p&gt;10000未満のLychrel数の個数を答えよ.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;50回も題意の処理をしても回文数が表れなければ、Lychrel数と見做しても差し支えないという条件をつけられているので楽です。&lt;/p&gt;
&lt;p&gt;案外、Lychrel数は多いです。また、Lychrel数でありながら、回文数でもある数も他に見つかりました。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2056" title="Problem 56 - Project Euler" class="topic"&gt;Problem 56&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=56"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2056" title="Problem 56 - Project Euler"&gt;&lt;p&gt;a, b &amp;lt; 100について自然数 a&lt;sup&gt;b&lt;/sup&gt; を考える. 桁の和の最大を答えよ.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;云われた通りやるだけです。&lt;/p&gt;
&lt;p&gt;各桁の総和を求める関数を下のように書きました。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  def sum_digits(n)
    n.to_s.split(//).inject(0){|s,v|s+v.to_i}
  end&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=FsgwfBYBxno:KwaBOy1z9uA:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=FsgwfBYBxno:KwaBOy1z9uA:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=FsgwfBYBxno:KwaBOy1z9uA:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/FsgwfBYBxno" height="1" width="1"/&gt;</description>
 <category>Ruby</category>
<comments>http://pamgau.net/item/725</comments>
 <pubDate>Mon, 22 Jun 2009 23:16:45 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/725</feedburner:origLink></item><item>
 <title><![CDATA[RubyでProject Euler - Problem 54]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/wjkeYs-m9YY/724</link>
<description>&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2054" title="Problem 54 - Project Euler" class="topic"&gt;Problem 54&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=54"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2054" title="Problem 54 - Project Euler"&gt;&lt;p&gt;&lt;a href="http://projecteuler.net/project/poker.txt"&gt;poker.txt&lt;/a&gt;には1000個のランダムな手札の組が含まれている. 各行は10枚のカードからなる (スペースで区切られている): 最初の5枚がプレイヤー1の手札であり, 残りの5枚がプレイヤー2の手札である. 以下のことを仮定してよい&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;全ての手札は正しい (使われない文字が出現しない. 同じカードは繰り返されない)&lt;/li&gt;
&lt;li&gt;各プレイヤーの手札は特に決まった順に並んでいるわけではない&lt;/li&gt;
&lt;li&gt;各勝負で勝敗は必ず決まる&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;1000回中プレイヤー1が勝つのは何回か?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;問題文の引用は一部だけにとどめました。&lt;/p&gt;
&lt;p&gt;独りポーカーなんかでは各役に以下のような得点をつけることがあります。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;005点&lt;/strong&gt; : ワンペア&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;010点&lt;/strong&gt; : ツーペア&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;015点&lt;/strong&gt; : スリーカード&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;020点&lt;/strong&gt; : ストレート&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;025点&lt;/strong&gt; : フラッシュ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;030点&lt;/strong&gt; : フルハウス&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;050点&lt;/strong&gt; : フォーカード&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;080点&lt;/strong&gt; : ストレートフラッシュ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100点&lt;/strong&gt; : ロイヤルストレートフラッシュ&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;こうした問題で見通しをよくするにはクラスを作ってしまうことでしょう。&lt;/p&gt;
&lt;p&gt;カード単体(Card)とカードを5枚保持する手札(Hands)とにそれぞれ相当するクラスがあれば十分です。&lt;/p&gt;
&lt;p&gt;カード単体相当のクラスを作ると、"initialize"が使えるだけでもファイル読み込みの処理が随分楽になります。&lt;/p&gt;
&lt;p&gt;また、5枚のカードを保持する手札相当のクラスでは"initialize"と同時に役相応の点数を計算保持するとともに、他者との勝負判定用に不等号演算子の再定義も行いました。&lt;/p&gt;
&lt;p&gt;同役の際の勝負判定には役に関わるカードの数値が使われるので、当該数値を上記の得点の小数点以下に埋め込みます。&lt;/p&gt;
&lt;p&gt;ちょっと処理が面倒だったのが、同役同数値の場合の勝負判定でした。役に付随するカード以外のカードの数値に基づいて判定されるので、役の点数とは別のインスタンス変数を設けました。&lt;/p&gt;
&lt;p&gt;"poker.txt"は完全にランダムに作成されたらしく、無役の割合が多くて、高い役はありませんでした。なお、同ファイル中、&lt;strong&gt;"10"は"T"と1文字で表記されています&lt;/strong&gt;。&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=wjkeYs-m9YY:BmYgEwWdYyM:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=wjkeYs-m9YY:BmYgEwWdYyM:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=wjkeYs-m9YY:BmYgEwWdYyM:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/wjkeYs-m9YY" height="1" width="1"/&gt;</description>
 <category>Ruby</category>
<comments>http://pamgau.net/item/724</comments>
 <pubDate>Mon, 22 Jun 2009 21:16:04 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/724</feedburner:origLink></item><item>
 <title><![CDATA[RubyでProject Euler - Problem 53]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/WZ9s3expQjE/723</link>
<description>&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2053" title="Problem 53 - Project Euler" class="topic"&gt;Problem 53&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=53"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2053" title="Problem 53 - Project Euler"&gt;&lt;p&gt;12345から3つ選ぶ選び方は10通りである.&lt;/p&gt;
&lt;p&gt;123, 124, 125, 134, 135, 145, 234, 235, 245, 345.&lt;/p&gt;
&lt;p&gt;組み合わせでは, 以下の記法を用いてこのことを表す: &lt;sub&gt;5&lt;/sub&gt;C&lt;sub&gt;3&lt;/sub&gt; = 10.&lt;/p&gt;
&lt;p&gt;一般に, r &amp;lt;= n について&lt;sub&gt;n&lt;/sub&gt;C&lt;sub&gt;r&lt;/sub&gt; = n!/(r!(n-r)!) である. ここで, n! = n×(n-1)×...×3×2×1, 0! = 1と階乗を定義する.&lt;/p&gt;
&lt;p&gt;n = 23になるまで, これらの値が100万を超えることはない: &lt;sub&gt;23&lt;/sub&gt;C&lt;sub&gt;10&lt;/sub&gt; = 1144066.&lt;/p&gt;
&lt;p&gt;1 &amp;lt;= n &amp;lt;= 100について, 100万を超えるnCrは何通りか?&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;Rubyに関する限り、この程度の問題で数値のオーバーフローを気にする必要はありません。導入も親切な問題ですし、そのまま書いて終わりです。&lt;/p&gt;
&lt;p&gt;スペースが余ったのでコードを載せます。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  def fact(n)  # 階乗
    return 1 if n == 0 || n == 1
    (2..n).to_a.inject(1){|v, i| v*i}
  end

  def combination(n, r) # 組み合わせ(コンビネーション)
    fact(n) / (fact(r) * fact(n-r))
  end

  cnt = 0

  (1..100).each do |n|
    (1..n).each do |r|
      cnt += 1 if combination(n, r) &amp;gt; 100_0000
    end
  end

  puts cnt&lt;/code&gt;&lt;/pre&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=WZ9s3expQjE:BH_3OUJifNg:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=WZ9s3expQjE:BH_3OUJifNg:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=WZ9s3expQjE:BH_3OUJifNg:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/WZ9s3expQjE" height="1" width="1"/&gt;</description>
 <category>Ruby</category>
<comments>http://pamgau.net/item/723</comments>
 <pubDate>Sun, 21 Jun 2009 21:49:50 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/723</feedburner:origLink></item><item>
 <title><![CDATA[RubyでProject Euler - Problem 52]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/Stv8-tqWhJw/722</link>
<description>&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2052" title="Problem 52 - Project Euler" class="topic"&gt;Problem 52&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=52"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2052" title="Problem 52 - Project Euler"&gt;&lt;p&gt;125874を2倍すると251748となる. これは元の数125874と同じ数を含む.&lt;/p&gt;&lt;p&gt;2x, 3x, 4x, 5x, 6xがxと同じ数を含むような最小の正整数xを求めよ&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;求める正の整数xは、6倍しても桁数が増えないことにまず気づきます。&lt;/p&gt;
&lt;p&gt;また5倍しても同じ数を含むのですから、&lt;strong&gt;xの各桁のいずれかには0か5かは含まれます&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;3倍しても同じ数を含むのですから、各桁の総計は3の倍数であって、xも3の倍数です。&lt;/p&gt;
&lt;p&gt;というわけで、ざっと考えると上の太字の条件を確認しつつ、下記のような範囲の整数を「3つ飛ばし」で走査していけばよいことになります。
&lt;ol&gt;
&lt;li&gt;3桁 : 102 - 165&lt;/li&gt;
&lt;li&gt;4桁 : 1002 - 1665&lt;/li&gt;
&lt;li&gt;5桁 : 10002 - 16665&lt;/li&gt;
&lt;li&gt;6桁 : 100002 - 166665&lt;/li&gt;
&lt;li&gt;7桁 : 1000002 - 1666665&lt;/li&gt;
&lt;li&gt;8桁 : 10000002 - 16666665&lt;/li&gt;
&lt;li&gt;9桁 : 100000002 - 166666665&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;問題文には各桁の数字が全て異なるか否かについての言及はありませんので、この際無視しました。&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=Stv8-tqWhJw:l667M00WrZ0:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=Stv8-tqWhJw:l667M00WrZ0:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=Stv8-tqWhJw:l667M00WrZ0:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/Stv8-tqWhJw" height="1" width="1"/&gt;</description>
 <category>Ruby</category>
<comments>http://pamgau.net/item/722</comments>
 <pubDate>Sun, 21 Jun 2009 21:48:24 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/722</feedburner:origLink></item><item>
 <title><![CDATA[RubyでProject Euler - Problem 51]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/QGrSKBGOhGw/721</link>
<description>&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2051" title="Problem 51 - Project Euler" class="topic"&gt;Problem 51&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=51"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2051" title="Problem 51 - Project Euler"&gt;&lt;p&gt;*57の第1桁を置き換えることで, 157, 257, 457, 557, 757, 857という6つの素数が得られる.&lt;/p&gt;
&lt;p&gt;56**3の第3桁と第4桁を同じ数で置き換ることを考えよう. この5桁の数は7つの素数をもつ最初の例である: 56003, 56113, 56333, 56443, 56663, 56773, 56993. よって, この族の最初の数である56003は, このような性質を持つ最小の素数である.&lt;/p&gt;
&lt;p&gt;桁を同じ数で置き換えることで8つの素数が得られる最小の素数を求めよ. (注:連続した桁でなくても良い)&lt;/p&gt;&lt;/blockquote&gt;
&lt;a href="http://www.amazon.co.jp/exec/obidos/ASIN/4431710795/aaaaaaaa0be7-22/ref=nosim/"&gt;&lt;img src="http://ecx.images-amazon.com/images/I/511VGW33W9L._SL160_.jpg" alt="オイラー入門 (シュプリンガー数学リーディングス)" class="pict-r" /&gt;&lt;/a&gt;
&lt;p&gt;素数大好きオイラー先生。右の本は&lt;a href="http://books.google.co.jp/books?id=GAVW17pgexEC&amp;amp;lpg=PP1&amp;amp;as_brr=3&amp;amp;client=firefox&amp;amp;pg=PP1"&gt;Googleの書籍検索&lt;/a&gt;でプレビューが提供されています。&lt;/p&gt;
&lt;p&gt;さて、ある数の各桁の和が３の倍数であれば、元の数字も３の倍数であることはよく知られています。&lt;/p&gt;
&lt;p&gt;この事実を踏まえると、求める素数に設けられる&lt;strong&gt;"*"は３の倍数個&lt;/strong&gt;でなければならないことが判明します。その理由は次の通りです。&lt;/p&gt;
&lt;p&gt;"*"に当てる数字を、0から9のうちからどのように選ぼうとも、8つもあると3による剰余系(mod 3)の0, 1, 2の全てを満たすことになります。従って、"*"が３の倍数個でなければ、"*"にこれらの数字を順次当てはめていくうちに3の倍数ができてしまい、元の数が素数であるという条件を満たすことがないからです。&lt;/p&gt;
&lt;p&gt;問題には「&lt;strong&gt;最小の&lt;/strong&gt;」とあるのですから、さし当たっては"*"は3個に限定して、以下のような処理手順で書くことにしました。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;100万までの素数配列を作成&lt;/li&gt;
&lt;li&gt;同じ数字を3個以上含む素数に限定&lt;/li&gt;
&lt;li&gt;各素数の同一の数の桁に"*"マスクをかけた文字列に置換&lt;/li&gt;
&lt;li&gt;同一文字列が8個ある組み合わせを特定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ここで面倒だったのが、同じ数字が4個以上ある素数に"*"マスクをかける処理でした。同じ数字が都合4桁ある素数に対しては3個、同じく5桁に対しては10個のマスクされた文字列を作らなければなりません。&lt;/p&gt;
&lt;p&gt;完成したプログラムを走らせると20秒ぐらいで答えが出ましたが、正解にこぎつけるまでに要した時間はその何倍か…。&lt;/p&gt;
&lt;p&gt;結局、今回は数学というよりも、Rubyでの文字列処理の問題だったように感じます。&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=QGrSKBGOhGw:ZNaDcY6H_iY:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=QGrSKBGOhGw:ZNaDcY6H_iY:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=QGrSKBGOhGw:ZNaDcY6H_iY:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/QGrSKBGOhGw" height="1" width="1"/&gt;</description>
 <category>Ruby</category>
<comments>http://pamgau.net/item/721</comments>
 <pubDate>Sun, 21 Jun 2009 21:46:47 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/721</feedburner:origLink></item><item>
 <title><![CDATA[RubyでProject Euler - Problem 50]]></title>
 <link>http://feedproxy.google.com/~r/pamgau/~3/795twZsrQZg/720</link>
<description>&lt;p&gt;&lt;a href="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2050" title="Problem 50 - Project Euler" class="topic"&gt;Problem 50&lt;/a&gt; (Project Euler) [&lt;a href="http://projecteuler.net/index.php?section=problems&amp;amp;id=50"&gt;原文&lt;/a&gt;]&lt;/p&gt;
&lt;blockquote cite="http://odz.sakura.ne.jp/projecteuler/index.php?Problem%2050" title="Problem 50 - Project Euler"&gt;&lt;p&gt;素数41は6つの連続する素数の和として表せる:&lt;/p&gt;
&lt;p&gt;41 = 2 + 3 + 5 + 7 + 11 + 13.&lt;/p&gt;
&lt;p&gt;100未満の素数を連続する素数の和で表したときにこれが最長になる.&lt;/p&gt;
&lt;p&gt;同様に, 連続する素数の和で1000未満の素数を表したときに最長になるのは953で21項を持つ.&lt;/p&gt;
&lt;p&gt;100万未満の素数を連続する素数の和で表したときに最長になるのはどの素数か?&lt;/p&gt;&lt;/blockquote&gt;
&lt;img src="http://pamgau.net/media/1/cube.gif" width="100" height="107" alt="Level 2 symbol" title="Level 2 symbol" class="pict-r" /&gt;
&lt;p&gt;2を先頭要素とする素数配列:$p_listとします。$p_listの先頭要素から順次各要素を加算して求められる部分和が初めて100万を超えるときの要素のインデックスは546です。&lt;/p&gt;
&lt;p&gt;従って、題意の項数を目一杯大きく見積もっても547個であり、実際にはこれ以下の項数でしか表せないことがわかります。&lt;/p&gt;
&lt;p&gt;ですから、この項数を順次減らすとともに加算の起点となる素数をずらすことで、題意の素数を探索していくという方針にしました。&lt;/p&gt;
&lt;p&gt;また、項数は必ず奇数であることに注意します。これを忘れるとどえらいことになります(笑)&lt;/p&gt;
&lt;p&gt;Level 2 到達を記念して小汚いコードを曝します。汚いけど実行速度は悪くないと思います。&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=795twZsrQZg:pUm_IwI2s3M:spdCosxkSQE"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=spdCosxkSQE" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=795twZsrQZg:pUm_IwI2s3M:OAQBO0PjnPA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=OAQBO0PjnPA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/pamgau?a=795twZsrQZg:pUm_IwI2s3M:4xZOgp06t7o"&gt;&lt;img src="http://feeds.feedburner.com/~ff/pamgau?d=4xZOgp06t7o" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/pamgau/~4/795twZsrQZg" height="1" width="1"/&gt;</description>
 <category>Ruby</category>
<comments>http://pamgau.net/item/720</comments>
 <pubDate>Fri, 19 Jun 2009 21:02:00 +0900</pubDate>
<feedburner:origLink>http://pamgau.net/item/720</feedburner:origLink></item>
  </channel>
</rss>
