当日は10時からメイン会場すぐとなりの松江オープンソースラボを開場して、Ruby技術者との相談ができるようにしております。お時間のある方は午前中から会場にお越しください。
まつもとゆきひろ - Ruby開発者
Ruby開発者のまつもとさんに、Rubyを使っていて気になったことや、Rubyの実装に関する分からないことを質問してみましょう。当日、気軽に質問していただけるように配慮します。また、事前に質問内容を matsue02 _at_ rubykaigi.org に送っていただければ、当日、司会からまつもとさんに質問いたします。
各発表は15分の発表時間と10分の質疑応答を予定しています。
来年度に予定しているRubyによるプログラミングコンテストに関する説明を行います。
松江在住の著者によるRuby関連書籍を紹介します。また、Rubyに関するクイズに答えると、その書籍をゲットできるプレゼント企画も行います。
持ち時間5分のLTを行います。それにともないLTの発表者を募集します。発表いただける方は以下のフォーマットで matsue02 _at_ rubykaigi.org までご連絡ください。当然、当日の飛び入り参加もOKです。
----- 氏名: 連絡先のメールアドレス: プログラムに載せる名前(氏名と異なる場合): タイトル:
LTの表彰式を行います。そして、閉会式で本イベントは終了です。
会費3,000円の懇親会を行います。懇親会はメイン会場の隣(松江テルサ1階のテルサホール)で行います。定員は60名ですが、人数が前後しても問題ないようにします。当日、受付にて懇親会の会費を集めさせていただきます。みなさま、ふるってご参加ください。
以下は 松江Ruby会議02で行う 来年度に行うプログラミングコンテストについてです。
「Rubyによるオセロの人工知能の戦い!頂点に立つRubyistは誰だ!!」
プログラミングコンテスト in 松江Ruby会議02は、Rubyで作成した人工知能同士をオセロで対戦させて競います。
オセロのシステム側のソースコードはgithubで公開しています。 http://github.com/takaokouji/othello
基本的に通常のオセロと同じルールです。ゲーム性を高めるために以下のルールを追加しています。2/1までにはデモ用サーバを用意して実際に試していただけるようにしますので、もうしばらくお待ちください。
オセロの人工知能はsolveメソッドに実装します。solveメソッドは1つの引数contextを取ります。
def solve(context) # ここにオセロの人工知能を実装する。 end
このsolveメソッドを実装したら、本コンテスト用のサーバに「def solve(context)」と最後の「end」を含むsolveメソッド全体をアップロードします。solveメソッド以外の部分(オセロのゲーム部分やsolveメソッドを管理する部分など)はこちらで用意します。
contextにはオセロの人工知能を実装するために必要な次の情報が格納されています。
pieces: 現在の版の状態を示す2次元の配列。pieces[2][8]が、左から3で上から9のマスの状態が格納されている。trueが格納されていれば自分の駒、falseであれば相手の駒、nilは何も置かれていないことを表す。
candidates: 自分の駒を配置できる位置(x、y)の配列。左から3、上から9に配置できる場合は[ [2,8] ]となる。左から6、上から12にも配置できるならば[ [2,8], [5, 11] ]となる。位置は0から始まることに注意する。
使用例
# とにかく最初の候補を次の手とする。 next_piece = context.candidates.first
left_sec: ゲーム全体の残り時間。単位は秒。
使用例
if context.left_sec < 15 # 残りが15秒なので自分の駒が最大となる手を打つ end
next_time: 持ち時間(次の手を打つまでの時間)
使用例
if context.next_time > Time.now # 次の手を打った後に、時間が余っていれば先を読む。 end
また、次に打つ手もcontextに設定します。
context.set_next_piece(x, y): 次に打つ手を設定する。
使用例
# 左から3、上から9のマスに次の手を打つ。 context.set_next_piece(2, 8)
なお、オセロの人工知能を作り易くするために次のメソッドを用意しています。よろしければお使いください。また、このようなメソッドがほしいというリクエストも受け付けています。matsue02 _at_ rubykaigi.org までメールにてご連絡ください。
context.count_changed_pieces(player, pieces, x, y): xとyの位置に一方の駒を配置したときに他方の駒が入れ替わる数を取得する。playerにtrueを設定すると自分、falseを設定すると相手の駒を配置した結果を取得できる。
context.changed_pieces(player, pieces, x, y): xとyの位置に一方の駒を配置したときに他方の駒が入れ替わる駒の位置(x,y)を配列で取得する。playerにtrueを設定すると自分、falseを設定すると相手の駒を配置した結果を取得できる。
context.next_candidates(player, pieces): 指定したプレイヤーが駒を配置できる位置(x、y)を配列で取得する。playerにtrueを設定すると自分、falseを設定すると相手のプレイヤーの情報が取得できる。
松江Ruby会議02に関するお問い合わせは、matsue02 _at_ rubykaigi.orgまでメールにてご連絡ください。