2011-12-12
■JavaScriptでRubyのブロックみたいなの
以下は適当なコードです。
JavaScriptでRubyのブロック風に書けると言う例です。
function fopen(filename, block) { var file = open(filename); try { block(file); } finally { file.close(); } } fopen("hoge.txt" , function (f) { var l; while (l=f.gets()) { alert(l); } // ここでブロックが終了するので // 例外が出ても出なくてもファイルは自動的に閉じられる。 });
ちなみにRubyだと
puts f.read # ブロックの最後で、ファイルが自動的に # 閉じられるようになっている。 }
2011-06-21
■[Ruby]ぷよぷよ in Ruby
人生を書き換える者すらいた。: 人材募集企画 2011年版を読んでRubyでぷよぷよを書いてみた。
45分くらいかかった。
4つ以上の隣接した同色のぷよ達を消すために、隣接した同色のぷよ達でグループ分けし、サイズが4以上のグループのぷよを全部消す。
その後、浮いているぷよを落とす。
浮いているぷよを落とすのは、String::gsubで空白を消したあとに末尾に同じだけ空白を足してやるのが楽。縦一列を取り出すためにtranspose(転置)して一行ずつ処理。
この問題、Code Golfしたら面白いかも。
class Puyopuyo TATE = 15 YOKO = 10 SPACE = " " def initialize(file) @puyo = Array.new(TATE) { Array.new(YOKO) { SPACE } } file.readlines.reverse.each_with_index do |s, y| s.chomp.split(//).each_with_index do |c, x| @puyo[y][x] = c end end end def in?(y, x) (0...TATE).include?(y) and (0...YOKO).include?(x) end def visit(y, x, orig_y, orig_x) orig_color = @puyo[orig_y][orig_x] @visited[y][x] = true @rinsetu_doushoku[[orig_y, orig_x]] += [[y, x]] [[1, 0], [-1, 0], [0, 1], [0, -1]].each do |dx, dy| yy = y + dy xx = x + dx if in?(yy, xx) and !@visited[yy][xx] and @puyo[yy][xx]==orig_color visit(yy, xx, orig_y, orig_x) end end end def kesu @visited = Array.new(TATE) { Array.new(YOKO) { false }} @rinsetu_doushoku = Hash.new { [] } for y in 0...TATE for x in 0...YOKO if !@visited[y][x] and @puyo[y][x]!=SPACE visit(y, x, y, x) end end end @rinsetu_doushoku.each do |orig, rinsetu_puyos| if rinsetu_puyos.size>=4 rinsetu_puyos.each do |y, x| @puyo[y][x] = SPACE end end end end def otosu @puyo = @puyo.transpose.map {|a| a.join("").gsub(SPACE, "").ljust(TATE, SPACE).split(//) }.transpose end def main loop do before = @puyo.clone kesu p self gets otosu p self gets break if before==@puyo end end def inspect @puyo.reverse.map {|a| a.join("") + "\n" } end end puyopuyo = Puyopuyo.new(DATA) puyopuyo.main __END__ GYRR RYYGYG GYGYRR RYGYRG YGYRYG GYRYRG YGYRYR YGYRYR YRRGRG RYGYGG GRYGYR GRYGYR GRYGYR
2010-12-28
■おサiPhone
iPhone + カードスロット付iPhoneケース + Suica でおサイフケータイ!!!
年の瀬で忙しい人のために結論から書いておくと、2〜3千円でiPhoneでおサイフケータイっぽいことが実現できます。
まず、カードを収納可能なiPhoneケース(2000円程度)を購入します。
僕は、 VariousGear iPhone4 ハードケース カードスロット付 ホワイト を買いました。*1
VariousGear iPhone4 ハードケース カードスロット付 ホワイト
- 出版社/メーカー: 株式会社MovieSD
- メディア:
- クリック: 18回
- この商品を含むブログ (2件) を見る
そしてカードスロットに Suica や PASMO を入れればOKです。
ただし、チャージする度にカードをケースから取り出すのは面倒(かなり取り出しづらい)なので、オートチャージにしておくといいと思います。*2
あとは、後述のようにiPhone4の場合はコンビニなどでうまく使えないので、干渉防止シート(1000円)をiPhoneの背中に貼ります。
PIT-Mobile 干渉エラー防止シール ICカード収納型 iPhone ケース対応 「ピット・モバイル」/ブラック
- 出版社/メーカー: FROMWEST
- メディア:
- 購入: 11人 クリック: 43回
- この商品を含むブログ (7件) を見る
これで駅の改札やコンビニではiPhoneをかざせばOK! サイフいらず!!
素晴らしいですね。
コンビニのレジで読み取れなかった問題(解決済み)
iPhone 4 だけの問題かもしれませんが、ケースのカードスロットにSuicaを入れただけでは、コンビニのレジのICカードリーダーで読み込んでもらえませんでした。
コンビニのカードリーダーをよく見てみると、「カードを接触させてください」と書いてある。
どうやら駅の改札にあるリーダーとは違うようだ。
調べてみると、駅のリーダーは『非接触型』、コンビニのリーダーは『接触型』というらしい。
ケースにカードを入れている場合、カードを直に接触させることは不可能です。。。
改札で便利になったのはいいが、コンビニでの使用はあきらめるしかないのか。
電波干渉防止シート
購入したカードケースのAmazonのページの「よく購入されている商品」に PIT-Mobile 干渉エラー防止シール という商品があるのに気づいた。
PIT-Mobile 干渉エラー防止シール ICカード収納型 iPhone ケース対応 「ピット・モバイル」/ブラック
- 出版社/メーカー: FROMWEST
- メディア:
- 購入: 11人 クリック: 43回
- この商品を含むブログ (7件) を見る
レビューによると、iPhoneの電波による干渉を防ぎ、コンビニでも使えるようになるという情報を得たのですぐに注文した。
実際にそれを貼ってみると、コンビニでもちゃんと使えるようになりました!!!
↓kiririmodeさんから指摘があったので消しました。
***接触型?非接触型?
接触型と聞くと、カードリーダーとカードを接触させる必要がありそうに思えるが、実際には違う。
現に、iPhoneのケースに入れたままカードを使うことができた。
接触型というのは、ユーザーに分かりやすいようにそういう名前にしているだけであって、たぶん、磁気を読み取る力が弱いので「触れるくらい近づけてください」ということなんだと思う。
そして読み取る力が弱いので iPhone の電波の影響が大きかったのかも。
ICカードやICカードリーダーの技術的な仕様とかは調べてないけど、なんとなく納得しました。
