タグ

ブックマーク / www.timedia.co.jp (9)

  • JavaScript でオセロを実装する(原始モンテカルロAI編) | Webシステム開発/教育ソリューションのタイムインターメディア

    以前、オセロの対戦AIの作成しましたが、そこでは実装を簡略化する為に盤面の価値を 盤面の価値 = 自分の石の数 – 相手の石の数 という単純な方法で決めていました。 でも、これには問題があります。 同じ石でも配置場所によって価値は異なるはずです(例: 角は最強)。それが考慮されていません。ゲーム終盤になってくると石の数が重要になってきます。でも序盤から石の数を重視するのは方向性としておかしいです。 という訳で、 序盤から中盤では石の配置場所を重視する終盤では石の数を重視する 形で盤面の価値を算出すれば、結構良さそうなAIになりそうです。 しかし、今度は 「序盤」「中盤」「終盤」をどのように区別するのか?石の配置場所の強弱はどう決めるのか?同じ配置場所でも周囲の状況次第で強弱が異なるのでは? という問題が出てきます。これは作るのが面倒臭そうです。 どうにかしてお手軽かつそこそこ強そうなAI

    JavaScript でオセロを実装する(原始モンテカルロAI編) | Webシステム開発/教育ソリューションのタイムインターメディア
    theatrical
    theatrical 2015/06/01
    カナさんのこの記事って最初は新人プログラマの技術力確認のためにオセロ実装させてみようと思うけど、自分で作らないのもあれだからまず自分で実装してみようっていうストーリーだったけど、そのまま教育に使えそう
  • JavaScript でオセロを実装する(ネット対戦編) | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 以前、JavaScript でオセロを実装していたのですが、この実装には一つ大きな問題がありました。 AI相手にゲームをするのは、それはそれで楽しいものの、 やはりこの手のゲームは人間同士で対戦したくなるものです。 一応、あの実装は人間同士で対戦できると言えばできるのですが、 同じPCの前に座って交代しながら操作する形になので、色々と不便です。 インターネット全盛のこの時代、やはりネット対戦できるようにしたいですよね。 しかしプレイヤー間の通信やプレイ中のゲームの状態の共有は一体どうすれば良いのやら。 オセロのようなターン制の単純なゲームでさえネット対戦対応するには課題が山盛りです。 どうにかして簡単にサクサクっとネット対戦できるようにできないものでしょうか。 回答 実はFirebaseを使えば簡単にサクサクっと対応できます。 これは JSONなデータを読み書きできるストレージサービ

    JavaScript でオセロを実装する(ネット対戦編) | Webシステム開発/教育ソリューションのタイムインターメディア
    theatrical
    theatrical 2015/03/23
    大変そうだなーっと思って開いてみたけど、読んでみると意外に簡単そうだなぁ
  • RailsでExcel出力しないといけなくなった時の対処法 | Webシステム開発/教育ソリューションのタイムインターメディア

    みんな大好き、Excelの話題です。 Excelは万能です。来表計算ソフトであるはずのExcelですが、プロジェクトのドキュメントがExcelなのはもちろん、帳票もExcel, 挙げ句スクリーンショットもExcelに貼付けられて送られてくるなど、ありとあらゆる場面で活用されています。当やめてほしいです。 これだけ広く使われていると、お客様からExcelで読めるようなデータを出力してほしい! という要望もあるかと思います。業務システムの場合、Excelでのデータ出力は必須ではないか、とさえ思われます。 今回はExcelで開けるファイルを出力してほしいと言われた場合、Railsではどのように実装すればいいのか、について考えてみます。 CSVデータを出力する カラフルな表を出力して欲しいとかそういうのではなく、単にExcelでデータを見たいだけかもしれません。 そういったケースでは、CSV

    RailsでExcel出力しないといけなくなった時の対処法 | Webシステム開発/教育ソリューションのタイムインターメディア
    theatrical
    theatrical 2014/10/17
    2014年にもなって未だにshiftjis(正確にはCP932)を使わなきゃいけない事に辛みを感じますね
  • LINQと他言語のリスト処理ライブラリの対比(Scheme編) | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 美しいプログラムを書く(リスト処理ライブラリ編) では「ちょっとした数のデータを相手に何か処理を行う」(=リスト処理を行う)ことを例題に、 既存のライブラリを適切に使えばコードを簡潔かつ明瞭にできることを示しました。 一度コツを掴めば開発効率がどんどん向上します。 ところが、現実には複数の言語を並行して利用する機会は少なからずあります。 不慣れな言語でコードを書いていると 「あの言語でいうところのアレはこの言語でいうとどうなるんだろう」 と思うことが頻繁に発生します。 特にリスト処理については頻出しますから、 各言語での書き方の比較表が欲しいところです。 しかし探してみても案外見つかりません。 という訳で見つからないなら作ってしまいましょう。 前提 比較対照する言語は以下の通り: C# 4.0Scheme 比較表 LINQ のメソッド対応する Scheme の関数

    LINQと他言語のリスト処理ライブラリの対比(Scheme編) | Webシステム開発/教育ソリューションのタイムインターメディア
  • JavaScript でオセロを実装する(本格AI作成編) | Webシステム開発/教育ソリューションのタイムインターメディア

    これまでのあらすじ 一人二役の寂しいオセロから脱却すべく、オセロの対戦が務まるAIの作成を始めた。 しかし、一通り動きはするものの、このAIは形勢判断を全くせずにテキトーに手を選んでいるだけなので非常に弱い。 なので少しは歯ごたえのあるまともなAIを作ろうと思うのであった。 どうすればまともなAIになるのか 前回作成したAIは 取り得る手のうち最も上の行に石が置ける手を選ぶ。同一行に指せる手が複数あるなら最も左の列に石が置ける手を選ぶ。 という単純な実装でした。これには 二つ問題 があります。 各手の価値を全く考慮していません。 来ならばどの手が最も勝利に近付くものなのかを判断すべきです (「左上に置ける手ほど価値が高い」という誤った判断基準で動いているとも言えます)。現在指せる手しか調べていません。 来ならば先の先を読むべきです。 オセロは最終的に石の数が最も多いプレイヤーが勝利する

    JavaScript でオセロを実装する(本格AI作成編) | Webシステム開発/教育ソリューションのタイムインターメディア
  • JavaScript でオセロを実装する(遅延評価編) | Webシステム開発/教育ソリューションのタイムインターメディア

    これまでのあらすじ 新人の力量を測るための課題としてオセロの作成を指示したが、 指示した当人が作れないようでは話にならないので実際に作り始めた。 一先ず盤面が4×4で黒も白も人間が指す一人二役の寂しいオセロは実装できたのだが、 快適に遊ぶには大きな問題が潜んでいたのであった。 実は4×4で既に重い問題 実際に前回作成したオセロを実行すると、 ゲームが遊べるようになるまでに割りと待たされます。 それもそのはずで、あの実装は ゲーム中で取り得る局面を予め全て列挙 していたからです。 しかも4×4という最小限の盤面のオセロですらゲーム中に出現し得る局面 = ゲーム木に含まれるノード数は 284,881個 あります(※回転すると同じになる盤面等は個別に数えて、同一盤面でも手番のプレイヤーが異なるなら別と数えて、パスした場合も1個と数えています)。 そりゃあ待たされるに決まってますし、無闇矢鱈にメモ

    JavaScript でオセロを実装する(遅延評価編) | Webシステム開発/教育ソリューションのタイムインターメディア
  • Vim で素数を最小の手数で列挙する | Webシステム開発/教育ソリューションのタイムインターメディア

    問題 Vim は何でもできます。 何でもできるのですから当然 Vim で素数を列挙することもできます。 ただ列挙するだけだと面白みに欠けますから、 Vim で最少の手数で素数を少ない順に100個だけ列挙するときっとモテるに違いありません。 一体どうすればよいのでしょうか。 方法1: 素朴に列挙する まずは素数を列挙してリストとして返す関数を作りましょう。 function ListPrimes() let primes = [2] let n = 3 while len(primes) < 100 if empty(filter(copy(primes), 'n % v:val == 0')) call add(primes, n) endif let n += 2 endwhile return primes endfunction

    Vim で素数を最小の手数で列挙する | Webシステム開発/教育ソリューションのタイムインターメディア
    theatrical
    theatrical 2012/11/20
    Vim業界怖い><
  • 美しいプログラムを書く(脱添字職人編) | Webシステム開発/教育ソリューションのタイムインターメディア

    あらすじ あなたはとある業務用アプリケーションの開発・保守を任されています。 このアプリケーションはC#で記述されており、 とある企業におけるプロジェクト(Project)の管理を主目的としています。 プロジェクトには何名かの社員がアサインされており(AssignedStaffs)、 プロジェクト内には必ずマネージャーが1名存在します(ManagerStaffId)。 大まかなイメージとしては以下のようなコードになっています: public class Staff { public String Id {get; set;} public String Name {get; set;} ... } public class Project { public ArrayList AssignedStaffs {get; set;} public String ManagerStaffId {

    美しいプログラムを書く(脱添字職人編) | Webシステム開発/教育ソリューションのタイムインターメディア
    theatrical
    theatrical 2012/10/11
    「 常に注意深くコードを書く羽目になってしまいます。 そして常に注意深くコードを書くことができる人は存在しません。」
  • gitでアレを元に戻す108の方法 | Webシステム開発/教育ソリューションのタイムインターメディア

    以前gitで一度行った変更をなかったことにする方法4つを紹介しましたが、 日常的に git を使用していると他にも様々な 「なかったことにしたい」「元に戻したい」 という状況に遭遇します。 そのひとつひとつについて対処方法を紹介していきます。 目次 問題1: ライブラリの新機能を試すためにあれこれ適当なコードを書いてみた。でももう要らない。問題2: トピックブランチをマージしたけど実はまだ不完全だった。マージをやり直したい。問題3: リリース後に発覚したバグ。原因は30日前に自分が行ったコミットだった。なかったことにしたい。問題4: 新しいコミットしようとして間違えてgit commit –amendで書き換えてしまった。元に戻したい。問題5: 色々作業していたら作業ディレクトリの内容が混沌としてきた。一度綺麗な状態にしたい。問題6: 作業ディレクトリにゴミファイルが溜まってきた。一度綺麗

    gitでアレを元に戻す108の方法 | Webシステム開発/教育ソリューションのタイムインターメディア
    theatrical
    theatrical 2012/07/09
    覚えよう
  • 1