daily gimite RSSフィード

2015/12/26

[] Flexboxと<input type="text">を組み合わせるときはsize="1"が必要 00:50

<div style="display: flex;">
  <div style="flex: 1 1 auto;">hoge:</div>
  <input type="text" style="flex: 1 1 auto;">
</div>

とした場合のこのinput要素、画面サイズが大きいぶんにはちゃんと伸びてくれるのですが、画面サイズが小さい場合にある程度以上小さくなってくれません。

<div style="display: flex;">
  <div style="flex: 1 1 auto;">hoge:</div>
  <input type="text" size="1" style="flex: 1 1 auto;">
</div>

size="1" をつければ良いようです。sizeを省略した場合はデフォルトのsizeが適用されるわけですが、その幅以下には縮んでくれないようです。ちなみにsize="0"は不正な値なようで、駄目でした。動作確認はChrome

トラックバック - http://d.hatena.ne.jp/Gimite/20151226

2013/09/19

[programming][mahjong] シャンテン数計算アルゴリズムで各言語をベンチマーク 23:30

ymatsuxさんのシャンテン数計算アルゴリズムをいろんな言語に移植して速度を比較してみました。

結果(所要時間):

タスクは天鳳牌譜中のランダムな手牌1000個のシャンテン数計算です。同一マシンのtimeコマンドで計測した3回の平均。

感想:

  • V8かなり頑張ってる。C++の約2.4倍程度。
  • Scala意外と遅い。JavaScriptに負けてる。
  • Rubyめっちゃ遅い。こういうのを書く言語じゃないんでしょうけど。

注:

  • Scalaの数字が前回と変わってるのは、Hayatoさんの勧めに従ってforをwhileに書き換えたのと-optimizeオプションを付けたことで合計2倍程度高速化したためです。
  • もちろんこういうのはタスク依存でコードの書き方依存なので色々と一概には言えない。
  • アルゴリズム自体は色々と改良の余地があると思っている。とりあえず3倍程度に高速化するアルゴリズムは実装済み。
  • Java版以外は七対子を考慮してません。どの実装も国士無双を考慮していません。計測時はJava版に手を入れて七対子の計算を無効化してます。

というわけでJavaScriptが意外と速いので麻雀AI JavaScriptで書こうかなー。

ソースコード:

牌は1m, 2m, ..., 9m, 1p, 2p, ..., 9p, 1s, 2s, ..., 9s, 東, 南, 西, 北, 白, 發, 中の順の0-originの通し番号で表現されています。

2013/9/21追記: yuizumiさんにC#版をもらったので追加。

nikoniko 2014/01/30 12:03 Javaのソースコードが見れないようなのでお時間があれば更新してくださるとありがたいです

nikoniko 2014/01/30 12:03 Javaのソースコードが見れないようなのでお時間があれば更新してくださるとありがたいです

トラックバック - http://d.hatena.ne.jp/Gimite/20130919

2012/10/19

[mahjong][tenhou] 天鳳牌譜の統計による麻雀危険牌分析 11:34

ネット麻雀の天鳳で公開されている、天鳳位の人の牌譜17670ゲームを集計して、牌の危険度を分析しました。詳細はこちら:

統計による麻雀危険牌分析

得られた主な知見:

  • 大雑把な危険度:
    • 字牌 = 中スジ = ノーチャンス < 表スジ << ワンチャンス < 片スジ << 無スジ
  • 中スジ(2p, 8pに対する5pなど)は表スジ(4pに対する1pなど)より安全。
  • 生牌の字牌はスジの通った数牌よりやや危険、片スジよりは安全。
  • 序盤の捨て牌の外側はスジと同程度に安全。
  • 暗刻スジはやや危険度が上がる。
  • 裏スジは危険度に影響しない。序盤の裏スジに限っても特に危険ではない。
  • ただし序盤に5を捨てている場合の1, 9は危険度が上がる。
  • 間四間も危険度に影響しない。
  • またぎスジは基本的に危険度が下がる。リーチ牌のまたぎスジであってもノーヒントよりはやや安全。
  • ここのブログの放置ぶりがひどい。
トラックバック - http://d.hatena.ne.jp/Gimite/20121019

2012/04/30

[mahjong] 麻雀AIと麻雀AI対戦サーバを公開 00:09

最近麻雀AIを作っています。現状のAI同士を対戦させるとこんな感じです(たぶんChromeでしか見れません)。一応それっぽく動いています。まだまだナイーブで、あまり強くないですが。まだ役やドラの価値を考慮してないので、赤ドラをガンガン切ってますね…。

このAIのために対戦サーバを作りました。TCPこんな感じのJSONを送り合って対戦できます。もし使いたい人がいたらご自由にどうぞ。詳細はこちら:

Mjai 麻雀AI対戦サーバ

ソースはこちら:

トラックバック - http://d.hatena.ne.jp/Gimite/20120430

2012/04/29

[ruby][googledrive] Google DriveにアクセスするRubyライブラリを作りました 17:28

google-drive-ruby - Github

作りました、というか、google-spreadsheet-rubyにスプレッドシート以外のファイルをアップロード/ダウンロードする機能を加えて改名しました。

Google Drive Appを作るライブラリではありません。Google Driveにアクセスする2種類のライブラリの違いについてはこちら

インストール:

$ sudo gem install google_drive

使用例:

require "rubygems"
require "google_drive"

# Logs in.
# You can also use OAuth. See document of
# GoogleDrive.login_with_oauth for details.
session = GoogleDrive.login("username@gmail.com", "mypassword")

# Gets list of remote files.
for file in session.files
  p file.title
end

# Uploads a local file.
session.upload_from_file("/path/to/hello.txt", "hello.txt", :convert => false)

# Downloads to a local file.
file = session.file_by_title("hello.txt")
file.download_to_file("/path/to/hello.txt")

# Updates content of the remote file.
file.update_from_file("/path/to/hello.txt")

google-spreadsheet-rubyは

require "google_drive"
GoogleSpreadsheet = GoogleDrive

するだけのライブラリになる予定です。