Hatena::ブログ(Diary)

ぼよーん このページをアンテナに追加 RSSフィード

2011-12-12

JavaScriptRubyのブロックみたいなの

以下は適当なコードです。

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

[]ぷよぷよ 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 

2011-01-18

MacBook Air 11インチ欲しい!

MacBook Air 11インチ欲しい!

UNIXは使えるし、薄いし、SSDだし、超欲しいです。

2010-12-28

おサiPhone

iPhone + カードスロット付iPhoneケース + Suicaおサイフケータイ!!!

年の瀬で忙しい人のために結論から書いておくと、2〜3千円でiPhoneでおサイフケータイっぽいことが実現できます。

まず、カードを収納可能なiPhoneケース(2000円程度)を購入します。
僕は、 VariousGear iPhone4 ハードケース カードスロット付 ホワイト を買いました。*1

そしてカードスロットに Suica や PASMO を入れればOKです。
ただし、チャージする度にカードをケースから取り出すのは面倒(かなり取り出しづらい)なので、オートチャージにしておくといいと思います。*2

あとは、後述のようにiPhone4の場合はコンビニなどでうまく使えないので、干渉防止シート(1000円)をiPhoneの背中に貼ります。

これで駅の改札やコンビニではiPhoneをかざせばOK! サイフいらず!!

素晴らしいですね。

コンビニのレジで読み取れなかった問題(解決済み)

iPhone 4 だけの問題かもしれませんが、ケースのカードスロットにSuicaを入れただけでは、コンビニのレジのICカードリーダーで読み込んでもらえませんでした。

コンビニのカードリーダーをよく見てみると、「カードを接触させてください」と書いてある。
どうやら駅の改札にあるリーダーとは違うようだ。
調べてみると、駅のリーダーは『非接触型』、コンビニのリーダーは『接触型』というらしい。

ケースにカードを入れている場合、カードを直に接触させることは不可能です。。。
改札で便利になったのはいいが、コンビニでの使用はあきらめるしかないのか。

電波干渉防止シート

購入したカードケースのAmazonのページの「よく購入されている商品」に PIT-Mobile 干渉エラー防止シール という商品があるのに気づいた。

レビューによると、iPhoneの電波による干渉を防ぎ、コンビニでも使えるようになるという情報を得たのですぐに注文した。

実際にそれを貼ってみると、コンビニでもちゃんと使えるようになりました!!!

↓kiririmodeさんから指摘があったので消しました。

***接触型?非接触型?

接触型と聞くと、カードリーダーとカードを接触させる必要がありそうに思えるが、実際には違う。
現に、iPhoneのケースに入れたままカードを使うことができた。

接触型というのは、ユーザーに分かりやすいようにそういう名前にしているだけであって、たぶん、磁気を読み取る力が弱いので「触れるくらい近づけてください」ということなんだと思う。
そして読み取る力が弱いので iPhone の電波の影響が大きかったのかも。

ICカードやICカードリーダーの技術的な仕様とかは調べてないけど、なんとなく納得しました。

*1
白以外にもいろいろな色がありますが、iPhone4白を心待ちにして3Gでずっと耐えてきたのに白の発売が延期されて仕方なく黒を買った、という経緯があったので白ケースにしました。おれの iPhone は白い!!!

*2
僕はビックカメラView Suicaを使っています。普通に使用していれば年会費はかかりません。

2009-10-29

[]リクルート

リクルート式 1人1000万の利益を生む人の創り方

リクルート式 1人1000万の利益を生む人の創り方

リクルートでは、常に「あなたはどうしたいの?」と問い続ける。

俺がどう生きたいか、どうなりたいか、そのためにどうしたいのか、それだけなんだ。

俺の行動から「やるべきこと」「やらなければいけないこと」は一つもなくなって、なりたい自分になるために「やりたいこと」だらけになる、はず。