PamGau

Web周り、サッカーの話、ときどきヌコ

RubyでProject Euler - Problem 55, 56

初の複数問掲載記事。

Problem 55 (Project Euler) [原文]

10000未満のLychrel数の個数を答えよ.

50回も題意の処理をしても回文数が表れなければ、Lychrel数と見做しても差し支えないという条件をつけられているので楽です。

案外、Lychrel数は多いです。また、Lychrel数でありながら、回文数でもある数も他に見つかりました。

Problem 56 (Project Euler) [原文]

a, b < 100について自然数 ab を考える. 桁の和の最大を答えよ.

云われた通りやるだけです。

各桁の総和を求める関数を下のように書きました。

  def sum_digits(n)
    n.to_s.split(//).inject(0){|s,v|s+v.to_i}
  end

RubyでProject Euler - Problem 54

Problem 54 (Project Euler) [原文]

poker.txtには1000個のランダムな手札の組が含まれている. 各行は10枚のカードからなる (スペースで区切られている): 最初の5枚がプレイヤー1の手札であり, 残りの5枚がプレイヤー2の手札である. 以下のことを仮定してよい

1000回中プレイヤー1が勝つのは何回か?

問題文の引用は一部だけにとどめました。

独りポーカーなんかでは各役に以下のような得点をつけることがあります。

こうした問題で見通しをよくするにはクラスを作ってしまうことでしょう。

カード単体(Card)とカードを5枚保持する手札(Hands)とにそれぞれ相当するクラスがあれば十分です。

カード単体相当のクラスを作ると、"initialize"が使えるだけでもファイル読み込みの処理が随分楽になります。

また、5枚のカードを保持する手札相当のクラスでは"initialize"と同時に役相応の点数を計算保持するとともに、他者との勝負判定用に不等号演算子の再定義も行いました。

同役の際の勝負判定には役に関わるカードの数値が使われるので、当該数値を上記の得点の小数点以下に埋め込みます。

ちょっと処理が面倒だったのが、同役同数値の場合の勝負判定でした。役に付随するカード以外のカードの数値に基づいて判定されるので、役の点数とは別のインスタンス変数を設けました。

"poker.txt"は完全にランダムに作成されたらしく、無役の割合が多くて、高い役はありませんでした。なお、同ファイル中、"10"は"T"と1文字で表記されています

«Prev | | 1 | 2 | 3 | 4 | 5 | 6 |...| 324 | 325 | 326 || Next»
Recent Entries
京都御苑の「自転車道」
Googleの左サイドバーを消すユーザスタイルシート for Firefox , Opera
"Ruby Way"章頭の言葉
"The worst feelings in life"より
裸の英会話
RubyでProject Euler - Problem 59
RubyでProject Euler - Problem 58
RubyでProject Euler - Problem 57
RubyでProject Euler - Problem 55, 56
RubyでProject Euler - Problem 54
Links
PamGau 系
PamGau::Memo
PamGau::Dust
PamgauSigh Wiki
はてなブックマーク
パンパでガウチョ
kyorecobaのdel.icio.us
BLOGNAVI
XREA.COM
VALUE-DOMAIN
PHP ver 4.4.2
Powered by Nucleus CMS Creative Commons
feedberner banner この日記のはてなブックマーク数
BlogPeople
あわせて読みたい