開発^3

Web開発、宇宙開発、ゲーム開発の3種類についてつらつらと

迷路を解くRubyスクリプト

人生を書き換える者すらいた。: 人材獲得作戦・4 試験問題ほか
を解いてみた。一番得意な言語ってわけでは無いが、最近仕事で使っているのでRubyを使用。
正答を出せるまでが40分、ブラッシュアップに10分ってところか。


この方法は有名どころで、ユニット型シミュレーションゲームの移動範囲表示にも使われてたような。

class Maze
    def initialize(inputs)
        @width = inputs[0].length - 1
        @height = inputs.length
        @maze = []
        
        inputs.each do |input|
            linemaze = []
            input.split("").each do |c|
                next if c == "\n"
                @start = {:x => linemaze.length, :y => @maze.length } if c == "S"
                @goal  = {:x => linemaze.length, :y => @maze.length } if c == "G"

                c == " " ? linemaze.push(@width * @height) : linemaze.push(c)
            end
            @maze.push(linemaze)
        end
    end

    def solve
        history = []
        move(@start[:x], @start[:y], history)
        
        @answerHistory.each do |foot|
            next if ["S", "G"].include?(@maze[foot[:y]][foot[:x]])
            @maze[foot[:y]][foot[:x]] = "$"
        end
    end
    
    def move(x, y, history)
        history.push({:x => x, :y => y})

        return if @maze[y][x] == "*"
        return if @maze[y][x] == "S" && history.length > 1
        if @maze[y][x] == "G" then
            if @answerHistory == nil || history.length < @answerHistory.length then
                @answerHistory = history.clone
            end
            return
        end

        if @maze[y][x].kind_of?(Numeric) then
            return if @maze[y][x] <= history.length
            @maze[y][x] = history.length
        end
        
        move(x - 1, y, history)
        history.pop
        move(x + 1, y, history)
        history.pop
        move(x, y - 1, history)
        history.pop
        move(x, y + 1, history)
        history.pop
    end

    def to_s
        str = ""
        str << @maze.map do |line|
            line.map do |c|
                c.kind_of?(Numeric) ? " " : c
            end.join("")
        end.join("\n")

        str << "\n"
        str << "start = #{@start[:x]}, #{@start[:y]}\n"
        str << "goal = #{@goal[:x]}, #{@goal[:y]}\n"
    end
end

if ARGV.length == 0 then
    puts "Usage: solvemaze.rb filename"
    exit
end

inputs = File.open(ARGV[0]).readlines
maze = Maze.new(inputs)
puts maze

puts "--------------------------------"
puts " Now solving......"
puts "--------------------------------"

maze.solve

puts maze

実行結果

続きを読む

iPhoneが欲しくなって色々考えたらW-ZERO3のadesが欲しくなった

最近iPhoneが欲しい。
アップルイベントが終わって新iPod Touchも発表されたことだし、そっちも含めて検討してみた。


条件としてはこんな感じ。

  • 彼女向けに通話定額が欲しい。現在は自分がWillcom、彼女がdocomo(メイン) + Willcom(電話専用)
  • 自分が使ってるAdesは本体の調子が悪い(スピーカがやられたか、イヤホンを使わないと音が出ない)
  • 比較しやすかったので2年間で比較。2年後にはいろいろ環境変わってそうだし
  • iPhoneを買うのであればパケ代抑制なんて考えない
  • 主な使用場所は埼玉、東京辺り。移動中や昼休みが主か。自宅では無線LANを使用。



Willcom W-ZERO3 Advanced[es](現状)
Willcom初期費用:0円
Willcom毎月費用:旧定額(2900円)、データ定額(1000 + 1500円程度)、彼女側旧定額(2900円)
総合計:(2900 + 1000 + 1500 + 2900) * 24 = 199,200


ここ半年を平均すると25万パケット/月。0.01円/パケットなので、データ通信費は2500円ぐらい。
本体の調子がかなり悪くなってるので、現実的では無いがこのまま維持するとしたらこんな感じか。
思ったよりも払っていたようだ。2年まとめると結構高いと感じる。



Willcom 03に機種変更(ジャケット買増)してW-VALUEで2年契約
Willcom初期費用:本体一括(63120円)、ヨドバシのポイント付与(6943P)
Willcom毎月費用:旧定額(2900円)、データ定額(1000 + 1500円程度)、W-VALUE割引(-2230円)、彼女側旧定額(2900円)
総合計:2100 + 63120 - 6943 + (2900 + 2500 - 2230 + 2900) * 24 = 203,957


正直03には余り魅力を感じない。テレビ見ないし、CPU変わってないし。



ヤフオクで03本体だけ購入して現状のWillcom契約を継続
Willcom初期費用:本体(17500円)
Willcom毎月費用:旧定額(2900円)、データ定額(1000 + 1500円程度)、彼女側旧定額(2900円)
総合計:17500 + (2900 + 1000 + 1500 + 2900) * 24 = 216,700


差し替え出来るのはWillcomの利点だと思う。というわけで外側だけ探してみる。
ヤフオクだと15000円〜20000円ぐらい?間を取って17500円とするとこんな感じ。
あれ、W-VALUE SELECTを使った↑の方が安い。そりゃ400 * 24 = 9600円が実質支払額だからその差額が出たか。


Willcomは本体実質0円の機種に変更してW-VALUE SELECTで2年契約+iPhone
Willcom初期費用:本体(51120円)、ヨドバシのポイント付与(5623P)
Softbank初期費用:契約手数料(2835円)、16G本体(57600円)、株主優待券値引(-10000円)*1、優待券購入(2000円)、ヨドバシのポイント付与(6336P)*2
Willcom毎月費用:旧定額(2900円)、彼女側旧定額(2900円)
Softbank毎月費用:パケット定額フル(4410円)、ホワイトプラン(980円)、S!ベーシック(315円)、月々割(-1920円)
Willcom合計:(2900 + 2900) * 24 = 139,200
Softbank合計:2835 + 57600 - 10000 + 2000 - 6336 + (4410 + 980 + 315 - 1920) * 24 = 136,939
総合計:139200 + 136939 = 276,139


データ通信は完全にiPhoneへ移行。Willcomは通話のみ。
Willcom側はスマートフォンである必要が無くなるので、9(nine)とかの電話向き本体の方が良いが一括支払いのポイントを考えると実質0円で一番高いadesがよさげ。
たけぇぇ!


上記プランのiPhoneiPod Touchに変更

Apple初期費用:32G本体(29800円)、ヨドバシのポイント付与(3278P)
Willcom初期費用:本体(51120円)、ヨドバシのポイント付与(5623P)
Willcom毎月費用:旧定額(2900円)、データ定額(1000円)、彼女側旧定額(2900円)、W-VALUE割引(-2130円)
広域無線LAN毎月費用:Livedoor wireless(525円)
総合計:29800 - 3278 + 51120 -5623 + (2900 + 1000 + 525 + 2900 - 2130) * 24 = 196,699


iPhoneの場合、結構な値引が入るとは言え、無駄なホワイトプランとかに費用がかかる。
ならば、ちょうど新型が発表されたiPod Touchはどうだろうと考えてみたらこんな感じ。
広域無線LANを契約することでWillcom側のデータ通信を10万パケット以下に抑えられるとした場合だが、
そもそも広域無線LAN使ったことが無いから、どれぐらい使える物かよくわからない。
移動中には基本使えないだろうから、そんなにパケ代減らせないのかも。
結局は「どこでもつながる3Gサービス」に2年で8万を出せるか否かって問題なのか。


iPhone + Skype Phone

Softbank初期費用:契約手数料(2835円)、本体(57600円)、株主優待券値引(-10000円)、優待券購入(2000円)、ヨドバシのポイント付与(6336P)
Softbank毎月費用:パケット定額(4410円)、ホワイトプラン(980円)、S!(315円)、月々割(-1920円)
Skype Phone:USB型(3980円) or 無線ルータ(10000円程度) + Wi-fi対応型(20000強)

Softbank合計:2835 + 57600 - 10000 + 2000 - 6336 + (4410 + 980 + 315 - 1920) * 24 = 136,939
総合計:136939 + 3980 = 140,919
総合計:136939 + 10000 + 20000 = 166,939

2キャリア持つのはやっぱり(金銭的に)無理だ。そもそもWillcomは本当に必須か?
どうせ長電話は家にいる時。ならSkypeで良いんじゃないか?という考えを元に計算。
こっちはSkype for iPhone + 自宅無線LAN
彼女側はSkype Phone + PC + 自宅有線LAN(USB型の場合)
もしくはSkype Phone + 自宅無線LAN(Wifi対応型の場合)
これだとPCを起動しておく手間があるので、無線LANルータ + Wi-fi対応型Skype Phoneも検討。
これなら普通の電話ライク@無線LANのある場所において。


おを、iPhone手に入れたのに今より安い。どれぐらい不便になるかは神のみぞ知る。


iPhone + 無契約AdesでSkype
Softbank初期費用:契約手数料(2835円)、本体(57600円)、株主優待券値引(-10000円)、優待券購入(2000円)、ヨドバシのポイント付与(6336P)
Softbank毎月費用:パケット定額(4410円)、ホワイトプラン(980円)、S!(315円)、月々割(-1920円)
Willcom?初期費用:無線ルータ(10000円程度)、無契約Ades(7500円程度)
Softbank合計:2835 + 57600 - 10000 + 2000 - 6336 + (4410 + 980 + 315 - 1920) * 24 = 136,939
総合計:136939 + 7500 = 144,439


Wifi対応のSkype Phoneは2万以上する上に生産中止だらけ。
ならば、Windows Mobileに頼ろう。ヤフオクでAdesの本体だけを購入し、Skype for Windows Mobileをインストール。
見た目的にも普通の電話(PHS)になり、値段も抑えられて一石二鳥。
なんともトリッキーだが値段やサービス的には魅力的か。
@1日早ければこのAdesが買えたんだが、相場は5000円〜10000円らしい。
iPhoneW-SIM無しのAdvanced[es]欲しいなー


しかし、昨今の価格体系はもはやパズルだね。*3
こりゃ携帯マイスターが必要になるわけだわ・・・

*1:Softbank株主優待券は新規購入時に端末価格から1万円引き。ヤフオクでは2000円ぐらいで出回っているようだ

*2:一括購入であれば家電販売店のポイントが付く。株主優待券の分は商品券によるキャッシュバックらしいので、57600*11% = 6336Pointが付くはず

*3:たとえば「ただとも」「のりかえ」キャンペーンは株主優待と併用不可ということで今回は適用できず。

スペースシャトル(STS-128)打ち上げ成功!

日本時間12時59分に予定されていたスペースシャトルの打ち上げは予定通りに打ち上げられ、無事軌道に乗りました。
これでスペースシャトル打ち上げの残りは6回。(どれだけ当てになるかは別として)予定では2010年9月が最後の打ち上げになります。
夜間なので上手く撮れたのが少ないですが、例によってNASA TVをキャプチャした打ち上げ写真を。
そろそろ録画にした方が良いんだろうけどなぁ。






スペースシャトル打ち上げ再度延期(STS-128)

見づらい時間だったはずなのに延期延期で見やすい時間になってしまいました。
うれしいはうれしいんだが、延期にかかる費用や残り時間を考えると、さくっと上がってくれた方が良いんだがなぁ。


さて、現在の予定は以下のとおり。
打ち上げ予定(現地時間):2009年8月28日(金) 23時59分
打ち上げ予定(日本時間):2009年8月29日(土) 12時59分


中継は例によってNASA TV(http://www.nasa.gov/ntv)にて。

スペースシャトル打ち上げ予定決定(STS-128)

今回は見づらい時間ですが、スペースシャトルの打ち上げ予定(STS-128)が決定です。


打ち上げ予定(現地時間):2009年8月25日(火) 01時36分
打ち上げ予定(日本時間):2009年8月25日(火) 14時36分
打ち上げ予定(現地時間):2009年8月28日(金) 00時22分
打ち上げ予定(日本時間):2009年8月28日(金) 13時22分
オービター:ディスカバリー(Discovery)
目的地:国際宇宙ステーション(ISS)
積荷:色々


Racking Up New Scienceのミッション名が示す通り、今回は建造というよりも輸送ミッションですね。
ご飯やらの補給物資を持って上へ上がり、三回の宇宙遊泳(EVA)を通して設置作業を行います。


大きな積荷はこんな感じ。
・Leonard:多目的モジュール。要は補給コンテナ。27,510lbs ≒ 12,478 kgも入ります。SI単位系使ってプリーズ。
・Colbert:トレーニング用のトレッドミル
・ARS:空気再生システム
・研究設備。-80度の研究用冷凍庫とか。流体合成機?だとか、微小重力下での素材の研究設備とか。
・乗組員用の個室。JEMのPMに設置ってことは「きぼう」内部か。ISS内で「一番静かな場所」だったらしいからスイートルームですな。今は研究設備が騒音源になりそうだが。
・そして人。今回も7人が上がり、第20次の長期滞在員が交代してやっぱり7人で帰ってきます。


そして、前に出たゴミを詰め込んだモジュールを積み込み、帰還。
シャトル退役後は欧州のATVや日本のHTV、ロシア辺りが担うことになる予定。
まぁ、本当に2010年でシャトルが退役するのかも怪しくなってきましたが・・・


ところで5人の子持ちが居るんだが、向こうではこれが普通なのか?それも2人もいる。
あ、片方の方はTwitterのアカウント持ちだ。@Astro_Jose
英語アカウントが増えると中々に辛いが、ミッション中ぐらいはフォローしておこう。

かぐや(SELENE)のラストショット

JAXA|月周回衛星「かぐや(SELENE)」のハイビジョンカメラ(HDTV)によるラストショット画像の撮影について

日本の月周回衛星「かぐや」の落下運用中に取られたHDTV画像が公開されました。


・・・あれ?
思ったより高度低くない・・・


初期状態では4月20日に撮った動画(高度12km)よりも高いとは・・・
と、調べてみたらそもそも4月24日に撮った動画(高度28km)の方が高いのね。
撮影後に高度を上げたのかな。それとも地形かな。

番号 時間 南緯 東経 高度
1 3時11分 南緯74度 東経261度 27.8km
2 3時12分 南緯77度 東経261度 25.4km
3 3時13分 南緯79度 東経261度 23.0km
4 3時14分 南緯81度 東経261度 20.7km
5 3時15分 南緯83度 東経261度 18.4km
6 3時16分 南緯86度 東経262度 16.2km
7 3時17分 南緯89度 東経266度 14.1km

実際の落下は6月11日 3時25分10秒。てことはラストショットは落下の8分前か。落下地点は南緯65.5度 東経80.4度。
1番から7番までの時間経過は6分。秒単位は出ていないのでズレはありそうだが、グラフ化してみる。



極軌道だから東経はほぼ変化していない。
最後だけ極端に変化しているのはスラスタでもふかしたのかと思ったが、観測地域は月の裏側、落下地点は月の表側。
緯度を見ても分かるように、月の下側(地球から見た場合)を回り込んだので180度変化しただけですな。
多少スラスタは吹かしたのかもしれないが、高度の落ち方を見ても重力任せの自由落下に見える。


もっと接近した(それでいて見た目は変わらない)画像が欲しかったですが、日陰じゃ仕方が無い。
後から搭載されたHDTVですが、本職の研究者でも無い自分(や他の人)にはこの搭載機器の果たした役割は大きかったと思います。