小池(仮)的非日常2009年2月



2月8日(日)

録画

何を血迷ったか,装備禁止クリアラスト6連戦の録画に成功したので,ニコニコにうpるという愚行に及んでしまいましたよっと(1/32/33/3)。

意外とまともな画質で録れるもんだ。

当然ではあるが,レポートを書いたときとは違うプレイのため,HP等ステータスも違うし,道具の渡し間違いもある。しかし,一番の大きな違いは,アラキがメラゾーマを習得しなかったことだ。ダメージ効率が悪すぎて泣ける。

以前よよむーをキャプったときはカハマルカの瞳を使ったが,無圧縮がゆえにHDDが大量に必要だったり,HDDに常に大量のデータを書き込むのでCPUパワーを消費し重いものを動かしてのキャプチャが事実上出来なかったりと,不満な点もあった。可逆な圧縮をしながらキャプチャするものもあったが,たいていシェアウエアだったので,使う気になれなかった。

そんな症状にお悩みのあなた(?)には「アマレココ」というソフトがお勧め。独自の可逆圧縮codecを持ちながらもフリーという素晴らしいソフト。これでキャプチャしたあとにAviUtilなどに放り込んで編集も可能。

というわけで,前出の動画はアマレココでキャプチャしたもの。安全を見込んで20fpsでのキャプチャだが,30でも多分行ける。

便利な世の中になったもんだ。

RTA

昨年からやっているRTA調査も,アマレココで録画しながらやっている。録画しておくとあとから振り返ることが出来るので非常によろしい。

しかし,自分のへぼいプレイを自ら振り返るのは精神衛生上非常によろしくない。ガイゴビアでキメラの翼を補充してノースパタに飛んで宿屋に泊まりサースパタを目指すとかひどいな。ノースパタでもキメラの翼買えるのに……。道具屋は宿屋の目の前なのに……。

やっぱりこいけはRTAには向いてないんだろう。でも3時間台を出すまでは頑張る。

2月17日(火)

perl de 数値計算

所事情により数値計算をしてみる。ちなみにこいけが数値計算をする必要に駆られるのは99%がTDQ関連だが気にしてはいけない。そーだよTDQの調査だよ!

ある範囲の数字(例えば1〜3)を10回無作為抽出し,その合計がいくつ以上になる確率を求めたいと思ったとしよう。そう,思ったのです。

これを順列組み合わせでガリガリと解ければいいのだが,ポンコツこいけ脳ではやり方がわからなかった。となれば,実際に羅列して数え上げる一手である。

さて,どうやって数えればいいだろうか。手作業だと死んでしまうので,Perlを使うことにする。数値計算なのになんでPerlなの?とか突っ込むそんな人は嫌いです。うぐぅ。

ただ何も考えずfor文を10回ネストすれば,欲しい情報は一応得られる。ただし,とても頭の悪いソースであることは否めない。

for($i1=1;$i1<=3;$i1++){
  for($i2=1;$i2<=;3;$i2++){
    for($i3=1;$i3<=3;$i3++){
      for($i4=1;$i4<=3;$i4++){
        for($i5=1;$i5<=3;$i5++){
          for($i6=1;$i6<=3;$i6++){
            for($i7=1;$i7<=3;$i7++){
              for($i8=1;$i8<=3;$i8++){
                for($i9=1;$i9<=3;$i9++){
                  for($i10=1;$i10<=3;$i10++){
                      #処理
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

見るからに頭が悪くて泣けますな。

これでは条件が変わったときにいちいち面倒だし,第一無駄が多すぎる。というわけで,再帰を使って書くと,こうなった。

##定数設定

$Inc_high = 3;   #上昇上限
$Inc_low = 1;    #上昇下限
$LvUpTimes = 10; #上昇回数

##ここまで
##定数から計算

$Total = ($Inc_high-$Inc_low+1)**$LvUpTimes;   #ループを回す回数の合計

##こっからメイン

#時間を測らない場合はコメントアウト(1/2)
$start=(times)[0];

@number=();      #生成される数値を格納するグローバル配列
@count=();       #合計を数えるグローバル配列
&make_number(1); #メイン
&print();        #出力

##時間を計らない場合はコメントアウト(2/2)
$end=(times)[0]-$start;
print $end;

sub make_number{
  my $n = $_[0];
  if( $n == $LvUpTimes+1 ){     #回数を満たしたらループを脱出し
    &count;                     #処理(カウント)
  }else{
    my $i;
    for( $i=$Inc_low; $i<=$Inc_high; $i++ ){   #下限から上限に向けてぐるぐる回す
      $number[$n] = $i;
      &make_number( $n+1 );
    }
  }
}

#カウント

sub count{
  my $sum = 0;
  foreach(@number){
    $sum = $sum + $_;
  }
  $count[$sum]++;
}

#出力

sub print{
  my $i;
  my $subtotal;  #そこまでに数えた回数の累計
  my $prob;      #確率
  for( $i=$Inc_low*$LvUpTimes; $i<=$Inc_high*$LvUpTimes; $i++ ){
    $prob = $subtotal/$Total;
    $subtotal = $subtotal + $count[$i];
    print "$i\t$count[$i]\t$subtotal\t".(1-$prob)."\n";
                 #上昇値,回数,累計,達する確率をタブ区切りで出力
                 #1から一つ小さい上昇値までの確率を引くと達する確率になるような気がする
  }
}

サブルーチンmake_numberで再帰を使用している。ここに10回for文がネストされることを思うと,かなりすっきりした。

Perlは可読性が悪いと言われるが,このくらいならなんとかなる。サブルーチンからグローバル変数を直接操作することになるがご愛嬌というものだ。

しかし,予想通り遅い。範囲が1〜3ですら0.3秒かかる。これを1〜5にしたら47秒(!)に跳ね上がった。やっぱり数値計算には向いてないなあ。lispとかだともう少し早いのだろうか。

2月20日(金)

絶望

IDEのHDDがどんどんと品薄になってきているのが罠。500Gを今更7kで購入はしたくないので,SATAの1Tを確保しておいた。これで,SATA→IDE変換器をかまして接続すればいいと踏んでいたのだが……

SATA→IDE変換器すら店頭で見付からない! 通販に頼らないといけませんかそうですか。本当に欲しいのはSATAとIDEを相互変換できる奴ですがそんなのは通販でも見付かりませんかそうですね。

半年くらい前は普通に店で買えたので油断してた(そのときに1つだけ確保した)。罠だったなぁ……。

今日のTDQ

ヤンがルーラをもっと早く覚えてくれれば……。という思考実験をしたが,絶望しか見えない。最速RTAだとしても,開始1時間経ったところにリセットポイントがあると,流石にやる気出ないぞ。