2

私はポーカーサイトからのハンド履歴ログを解析するためにRubyで小さなプログラムを書いています。ログは数行に分割され、次のようになります。

Table 123456 NL Hold'em $1/$2
5 Players
Seat 3 is the button
Seat 1: randomGuy112 $152.56
Seat 2: randomGirl99 $200
Seat 3: PokerPro $357.12
Seat 4: FishCake556 $57.19
Seat 6: MooMoo $188.98
Dealt to MooMoo [Ah, Ks]
randomGuy112 folds
randomGirl99 raises to $7

etc.. etc..

この情報をオブジェクトに要約したいのですが、たとえば、別の方法でレンダリングしたり、データベースに保存したりできます。私が最初にこの問題について考えたとき、私は、いくつかの正規表現といくつかのif/elseステートメントを備えた1つの本当に単純なクラスがあると思っていました。次に、これが非常に大きな方法になり、デバッグ/保守するのに悪夢になる可能性があることに気付きました。プレーヤーのアクションを収集するには、ゲームの各段階(プリフロップ、フロップなど)でループする必要があることに注意してください。

また、TDDアプローチでこれに取り組みたいのですが、「1つの長い方法」の方法は、後の入力をチェックするためのテストが、以前のテストに依存することを意味します。

私はRubyにまったく慣れておらず、「Rubyの方法」をクリックして物事を行うことはまだありません。私は別の言語でC#コードを書いていることに気づいています。

if / elseステートメントの大きな混乱ではなく、よりテストしやすいように、パーサーを設計する方法についていくつかの指針を教えてください。

4

7 に答える 7

2

Treetopを使用する

アドホックな文字列照合とREが適していることと、実際のパーサーが必要なこととの境界線上にいるように見えます。

手書きのパーサーには何の問題もありません。メソッドを短くし、特定のメソッドをそれほど複雑にしないif限り、パーサーが必要とする数のステートメントを合計しても問題ありません。

理解できない正規表現を含む10行が、見栄えの良い30行のコードよりも優れているかどうかはわかりません。

現在、Rubyには高度なPEGパーサジェネレータがあります。この場合、やり過ぎかどうかは気にせず、Treetopを使用するだけだと思います。

于 2009-10-08T16:54:20.423 に答える
1

このオープンソースポーカーゲームのハンドパーサーをチェックアウトできます

正規表現のハッシュを作成した後、おそらく正規表現のデータ構造を反復処理しているようです。これはパーサーよりも単純なマシンであり、おそらくより軽量なアプローチです。

于 2009-10-08T13:54:56.153 に答える
1

ステートマシン、誰か?

ポーカーハンドのプレーのどの時点でも、可能な次のアクションの明確に定義されたセットがあります。それらをステートマシンにカプセル化できると思います。周りにはいくつかありますが、その中には(推奨事項はありません、恐れています-十分な経験がありません)

于 2009-10-08T16:56:58.470 に答える
1

PokerStarsログファイルのハンドヒストリーパーサーを作成しましたhttps://github.com/malikbakt/pokerstars

于 2012-03-18T22:08:43.033 に答える
0

ルビーの方法でコードを書く方法について、解決策を示す2つの異なるポインターがあります。

  • ルビーの本を手に入れよう。ルビーの本には、ルビーの方法でコードを書く方法に関する多くの例があります。私の個人的な経験から、私はあなたにpixake(これは正しいスペルですか?)の本をお勧めすることができます:http ://www.ruby-doc.org/docs/ProgrammingRuby/html/index.html
  • 既存のルビーコードを読みます。あなたはコードを書くのに十分なルビーを知っているようですか?そうすれば、確かに既存のコードを読み取ることができるはずです。すでにシステムにrubyをインストールしていると思います。もしそうなら、あなたはあなたのハードドライブにたくさんのソースコードを見つけるでしょう。インターネットを使用するだけではない場合。
于 2009-10-08T21:14:29.697 に答える
0

あなたは見たいかもしれません:StringScanner

于 2009-10-08T12:22:34.857 に答える
0

Martin Fowlerによる本リファクタリング(デッドツリー形式と電子形式の両方で利用可能、IIRC)をお勧めします。彼は、あなたが求めている設計上の問題に対するオブジェクト指向の救済策を、すべてテスト駆動のコンテキストでカバーしています。これは、専門家の誰もが読むべき本の1つです。

于 2009-10-28T19:55:37.090 に答える