2010年12月25日土曜日

BottomCoder SRM403 DIV2

これからは本番はTopCoderってタイトルで、練習はBottomCoderってタイトルにします。
最近TopCoderの記事が多いのでもっとほかの記事も書きたいです。

250
public class TheLargestLuckyNumber {
 public int find(int n) {
  outer: for(int i = n; i >= 4; i--) {
   for(int j = 0; j < Integer.toString(i).length(); j++) {
    if(Integer.toString(i).charAt(j) != '7' && Integer.toString(i).charAt(j) != '4') {
     continue outer;
    }
   }
   return i;
  }
  
  return 0;
 }
}
早く解けた。2重ループだとラベル便利。

500
public class TheLuckyNumbers {
 public int count(int a, int b) {
  int count = 0;
  String sa = Integer.toString(a);
  String sb = Integer.toString(b);
  int len = sb.length();
  for(int j = 1; j <= len; j++) {
   for(int mask = 0; mask < (1 << j); mask++) {
    String str = "";
    for(int i = 0; i < j; i++) {
     if((mask & (1 << i)) > 0) {
      str += "7";
     } else {
      str += "4";
     }
    }
    if((str.length() > sa.length() || (str.length() == sa.length() && str.compareTo(sa) >= 0)) && (str.length() < sb.length() || str.compareTo(sb) <= 0)) {
     count++;
    }
   }
  }
  return count;
 }
}
250のように全探索すると、2秒以内に終わらないので計算量を減らす必要がある問題。
いろいろな解き方でアプローチしてて時間内に終わらなかった。
自力で解くことはできたけど、これぐらいの問題を解けないと緑安定はしないし、解けるようになりたい。
roseとlilyのときにも使ったビットを使った方法で解いてます。この問題は解き方いくつかありそう。

2010年12月14日火曜日

TopCoder練習 SRM424 DIV2

250問題文
public class MagicSpell {
 public String fixTheSpell(String spell) {
  String magic = new String();
  for(int i = 0; i < spell.length(); i++) {
   if(spell.charAt(i) == 'A' || spell.charAt(i) == 'Z') {
    magic += spell.charAt(i);
   }
  }
  String magicSpell = new String();
  int count = 0;
  for(int i = 0; i < spell.length(); i++) {
   if(spell.charAt(i) == 'A' || spell.charAt(i) == 'Z') {
    magicSpell += magic.charAt(magic.length()-1-count);
    count++;
   } else {
    magicSpell += spell.charAt(i);
   }
  }
  return magicSpell;
 }
}
問題文が読めれば解ける。コードは汚い。

500

import java.util.ArrayList;

public class ProductOfDigits {
 public int smallestNumber(int N) {
  if(N < 10) return 1;
  
  ArrayList<Integer> list = new ArrayList<Integer>();
  for(int i = 9; i > 1; i--) {
   if(N % i == 0) {
    list.add(i);
   }
  }
  if(list.size() < 1) return -1;
  
  int index = 0;
  int a = 0;
  while(N > 1) {
   if(N % list.get(index) == 0) {
    a++;
    N /= list.get(index);
   } else {
    if(index < list.size() -1) {
     index++;
    } else {
     return -1;
    }
   }
  }
  return a;
 }
}
問題文の意味よく分からなくて1文字もかけなかった。

2010年12月13日月曜日

TopCoder練習 SRM 423 DIV2

250問題文
public class TheSimpleGame {
 public int count(int n, int[] x, int[] y) {
  int a = (n+1)/2;
  int b = 0;
  for(int i = 0; i < x.length; i++) {
   b += (x[i] <= a) ? x[i] - 1 : n - x[i];
   b += (y[i] <= a) ? y[i] - 1 : n - y[i];
  }
  return b;
 }
}
簡単。

600
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

public class TheTower {
 public int[] count(int[] x, int[] y) {
  int[] a = new int[x.length];
  a[0] = 0;
  if(x.length == 1) {
   return a;
  }
  ArrayList<Integer> xList = new ArrayList<Integer>();
  ArrayList<Integer> yList = new ArrayList<Integer>();
  for(int i = 0; i < x.length; i++) {
   boolean flag1 = false;
   boolean flag2 = false;
   for(int j = 0; j < xList.size(); j++) {
    if(x[i] == xList.get(j)) {
     flag1 = true;
     break;
    }
   }
   if(!flag1) {
    xList.add(x[i]);
   }
   for(int j = 0; j < yList.size(); j++) {
    if(y[i] == yList.get(j)) {
     flag2 = true;
     break;
    }
   }
   if(!flag2) {
    yList.add(y[i]);
   }
  }
  for(int i = 1; i < x.length; i++) {
   ArrayList<Integer> list = new ArrayList<Integer>();
   for(int j = 0; j < xList.size(); j++) {
    for(int k = 0; k < yList.size(); k++) {
     list.add(checkCell(xList.get(j), yList.get(k), i+1, x, y));
    }
   }
   Collections.sort(list);
   a[i] = list.get(0);
  }
  return a;
 }
 
 private int checkCell(int x, int y, int n, int[] arrayX, int[] arrayY) {
  int[] array = new int[arrayX.length];
  for(int i = 0; i < array.length; i++) {
   array[i] = (int)Math.abs((double)(x - arrayX[i])) + (int)Math.abs((double)(y - arrayY[i]));
  }
  Arrays.sort(array);
  int move = 0;
  for(int i = 0; i < n; i++) {
   move += array[i];
  }
  return move;
 }
}
間違えたので後で修正した解答。
問題文は読めても結構難しい問題だと思う。これが600か。
おそらく、移動先のx,yはそれぞれのメジアン(中央値)になる。(ただしチェッカーが偶数のときは中央2つの平均ではなく、その2つのどちらかになる
そう考えると、x座標のリストと、y座標のリストの組み合わせ分だけ考慮すればいいので、その中で一番移動数が少ないものを選ぶ。

TopCoder SRM490 DIV2

2回目。落ち込む。チャレンジやってみたくてやったけど失敗した。
250 ○
500 未提出
1000 未提出
Rate 955 -> 789

TopCoder SRM489 DIV2

初めてのTopCoder本番ってわけだったんですが、結果は何とも言えないものにw
250 チャレンジ
500 未提出
1000 未提出

1問も解けなく、点数はもちろん0なわけですが、レートは955というそれなりに高いという結果に。いきなり緑。
どうやら250の正解率が低かったみたい。

2010年12月9日木曜日

最近買ったの

先日ホリパッドEX2ターボっていうXbox360のコントローラーを購入しました。(黒い方



感想としては、悪くはないなーって感じです。
もともと自分はXbox360の純正コントローラーが使いやすいって思っていた人なんで、アナログスティックとかは純正のほうが使いやすいと感じてます。しかし、純正のは方向キーがクソなので、それはこちらのほうがいいです。不満はありますが。

そもそもなぜこのコントローラーを買ったかというと、「コントローラーで格闘ゲームやりたい」「PC用コントローラーに前面6ボタンのものが欲しい」っていうのが大きな理由。
トーナメントエディション ファイトパッド for Xbox 360とどちらを購入するか少し迷いましたが、安い方を購入しました。
連射機能は特別欲しかったわけではありませんが、あったらあったで便利です。一部の実績の解除も楽になります。

このコントローラーでSSFをちまちまプレイしていくです。

2010年11月25日木曜日

TopCoder練習 SRM420 DIV2

250 問題文(要ログイン)
public class DeckRearranging {
 public String rearrange(String deck, int[] above) {
  String a = new String();
  for(int i = 0; i < deck.length(); i++) {
   a = a.substring(0, above[i]) + String.valueOf(deck.charAt(i)) + a.substring(above[i]);
  }
  return a;
 }
}
簡単。
500 問題文(要ログイン)
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;

public class YearProgressbar {
 public double percentage(String currentDate) {
  SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy HH:mm z", Locale.US);
  Date date = sdf.parse(currentDate + " EST", new ParsePosition(0));
  
  GregorianCalendar current = new GregorianCalendar();
  current.setTime(date);
  
  int year = current.get(GregorianCalendar.YEAR);
  GregorianCalendar start = new GregorianCalendar();
  String s = "January 01, " + Integer.toString(year) + " 00:00 EST";
  start.setTime(sdf.parse(s, new ParsePosition(0)));
  
  GregorianCalendar end = new GregorianCalendar();
  s = "January 01, " + Integer.toString(year + 1) + " 00:00 EST";
  end.setTime(sdf.parse(s, new ParsePosition(0)));
  
  return (double)(current.getTimeInMillis() - start.getTimeInMillis()) / (double)(end.getTimeInMillis() - start.getTimeInMillis()) * 100.0;
 }
}
今までで一番苦労しました。せっかくJavaを使っているんだからってCalendarクラスを使おうとした結果がこれだよ!

もう自分で実装したほうが早かったね・・・

ローカルではTestCaseが通るのに、TopCoder側では通らないという謎。
1時間以上悩んだ結果、原因は「夏時間」。
調べるうちにDateFormatクラスがあるから使ってやんよ、と思ったらこれもまた苦戦。
今度はローカルでSimpleDateFormatが動かない。なぜかTopCoder側で動く。
これは、Localeを指定しないと、月(Mayとか)を正しくとってこられないっぽい。デフォルトのままだと「5月」みたいに日本語表示しか読み取れなかったみたい。
そして、setTime(Date)した後は、setTimeZone(TimeZone)しても適用されていなくて、もうしょうがないから入力テキストにESTって記述してタイムゾーン指定してやったよ!!

他の人の解凍を見るとDateクラスの非推奨のメソッド使うともっと簡単にできたっぽい。もうやだ。

2010年11月20日土曜日

ドリームキャスト起動画面のジェネレータ作ってみた

ドリキャスの起動画面をFlashで再現してみた。

DC startup generator

生成されたURL(http://www.aaharu.com/dcdata/DC.swf?w=eJzzSM3JyddRCM8vyklRBAAfngRqなど)に飛べば、その文字列をいつでも再現できます。

Flashのソースコードも公開してあります。
Python(GAE)のコードの一部がこれ。
class GenerateHandler(webapp.RequestHandler):
    def post(self):
        form = self.request.get('words')
        if len(form) < 2:
            path = os.path.join(os.path.dirname(__file__), 'index.html')
            self.response.out.write(template.render(path, {'alert': "2文字未満は未対応です・・・"}))
        else:
            form = zlib.compress(form.encode('utf_8'))
            form = b64encode(form)
            self.redirect("../dcdata/DC.swf?w="+form)

GETでswfに文字列を渡しているのですが、流れとしては
HTMLのformで文字列をPOSTで送信→Pythonでzlib(gzip)圧縮→PythonでBase64エンコード→GETで渡す→swfでGET受信→ActionScriptでBase64をByteArrayにデコード→ByteArrayを解凍→文字列に挿入
て感じです。ちょっと違う?

TopCoder練習 SRM425 DIV2

250
問題文(要ログイン)
import java.util.Arrays;

public class InverseFactoring {
 public int getTheNumber(int[] factors) {
  if(factors.length == 1) return factors[0]*factors[0];
  Arrays.sort(factors);
  return factors[0]*factors[factors.length-1];
 }

}
問題読めたもん勝ち。最初のif文は別に書かなくてもいい。
とても簡単。

500
問題文
public class CrazyBot {
 private boolean point[][] = new boolean[30][30];
 private double _east;
 private double _west;
 private double _north;
 private double _south;
 private double result = 0.0;
 
 public double getProbability(int n, int east, int west, int south, int north) {
  for(int i = 0; i < 30; i++) {
   for(int j = 0; j < 30; j++) {
    point[i][j] = false;
   }
  }
  _east = (double)east;
  _west = (double)west;
  _north = (double)north;
  _south = (double)south;
  dfs(n, 0, 0, 1.0);
  return result;
 }
 
 private void dfs(int n, int x, int y, double p) {
  if(point[y+15][x+15]) {
   return;
  }
  if(n == 0) {
   result += p;
   return;
  }
  point[y+15][x+15] = true;
  dfs(n-1, x+1, y, p*_east/100.0);
  dfs(n-1, x-1, y, p*_west/100.0);
  dfs(n-1, x, y+1, p*_north/100.0);
  dfs(n-1, x, y-1, p*_south/100.0);
  point[y+15][x+15] = false;
 }
}
この問題は時間内に解けなくて、人の回答を参考にした。
問題文読んでDFS(深さ優先探索)使えばいいんだなーって思ったけどどう実装していいかわからなかった。明らかな実力不足。勉強になりました。

2010年11月17日水曜日

TopCoder練習 SRM 422 DIV2

250
問題文(要ログイン)
public class MultiNumber {
 public String check(int number) {
  if(number < 10) {
   return "NO";
  }
  String num = Integer.toString(number);
  //String.valuOf(number);
  for(int i = 1; i < num.length(); i++) {
   String a = num.substring(0, i);
   String b = num.substring(i);
   int n = 1, m = 1;
   for(int j = 0; j < a.length(); j++) {
    n *= Integer.parseInt(a.substring(j, j+1));
   }
   for(int j = 0; j < b.length(); j++) {
    m *= Integer.parseInt(b.substring(j, j+1));
   }
   if(n == m) {
    return "YES";
   }
  }
  return "NO";
 }
}
Javaでint→StringとString→intの変換する方法がわからなくて手間取った。 今気づいたけど、このプログラムちょっと無駄なことしてるね。

500
問題文
public class PrimeSoccer {
 public double getProbability(int skillOfTeamA, int skillOfTeamB) {
  double a = 0.0;
  double b = 0.0;
  //2
  a += ((double)skillOfTeamA/100.0) * ((double)skillOfTeamA/100.0) * 153.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 16.0);
  //3
  a += Math.pow((double)skillOfTeamA/100.0, 3.0) * 816.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 15.0);
  //5
  a += Math.pow((double)skillOfTeamA/100.0, 5.0) * 8568.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 13.0);
  //7
  a += Math.pow((double)skillOfTeamA/100.0, 7.0) * 31824.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 11.0);
  //11
  a += Math.pow((double)skillOfTeamA/100.0, 11.0) * 31824.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 7.0);
  //13
  a += Math.pow((double)skillOfTeamA/100.0, 13.0) * 8568.0 * Math.pow((double)(100 - skillOfTeamA)/100.0, 5.0);
  //17
  a += Math.pow((double)skillOfTeamA/100.0, 17.0) * 18.0 * (double)(100 - skillOfTeamA)/100.0;
  
  //2
  b += ((double)skillOfTeamB/100.0) * ((double)skillOfTeamB/100.0) * 153.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 16.0);
  //3
  b += Math.pow((double)skillOfTeamB/100.0, 3.0) * 816.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 15.0);
  //5
  b += Math.pow((double)skillOfTeamB/100.0, 5.0) * 8568.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 13.0);
  //7
  b += Math.pow((double)skillOfTeamB/100.0, 7.0) * 31824.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 11.0);
  //11
  b += Math.pow((double)skillOfTeamB/100.0, 11.0) * 31824.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 7.0);
  //13
  b += Math.pow((double)skillOfTeamB/100.0, 13.0) * 8568.0 * Math.pow((double)(100 - skillOfTeamB)/100.0, 5.0);
  //17
  b += Math.pow((double)skillOfTeamB/100.0, 17.0) * 18.0 * (double)(100 - skillOfTeamB)/100.0;
  double c = a*b;
  return a+b-c;
 }
}
ただの計算。プログラムより電卓でやったほうがいいんじゃね?ってレベル。
確率の計算です。組み合わせはGoogle電卓で出した。
18までの素数は7つしかないので結構無理やり解いてます。

2010年11月11日木曜日

TopCoderやってみた。

知り合いに誘われてTopCoderなるものに手を出してみました。
なぜかJAVAで参戦。Python使わせてください。

とりあえず、過去問で練習してます。
だめだめですけど、自分の解答を載せます。

TopCoder SRM 430 DIV 2
Problem 500 BitwiseEquations
問題文(アカウントがないと見られません)
public class BitwiseEquations {
 public long kthPlusOrSolution(int x, int k) {
  long a = 0, shift = 0;
  while(k > 0) {
   if((x & 1) == 0) {
    a |= ((long)(k & 1) << shift);
    k >>>= 1;
   }
   x >>>= 1;
   shift++;
  }
  return a;
 }
}
xを2進数で表示したときに0になる桁に、kの2進数の1桁目から入れていく感じ。
問題文からこのことを理解できれば解ける。結構時間かかった。

TopCoder SRM 427 DIV 2
Problem 250 LoveCalculator
問題文
import java.util.Arrays;

public class LoveCalculator {
 public String findBoy(String girl, String[] boys) {
  if(boys.length == 1) return boys[0];
  
  Arrays.sort(boys);
  
  int[] love = new int[boys.length];
  for(int i = 0; i < boys.length; i++) {
   int L = 0, O = 0, V = 0, E = 0;
   for(int j = 0; j < girl.length(); j++) {
    if(girl.charAt(j) == 'L') {
     L++;
    } else if(girl.charAt(j) == 'O') {
     O++;
    } else if(girl.charAt(j) == 'V') {
     V++;
    } else if(girl.charAt(j) == 'E') {
     E++;
    }
   }
   for(int j = 0; j < boys[i].length(); j++) {
    if(boys[i].charAt(j) == 'L') {
     L++;
    } else if(boys[i].charAt(j) == 'O') {
     O++;
    } else if(boys[i].charAt(j) == 'V') {
     V++;
    } else if(boys[i].charAt(j) == 'E') {
     E++;
    }
   }
   love[i] = ((L+O)*(L+V)*(L+E)*(O+V)*(O+E)*(V+E))%100;
  }
  int max = love[0], maxI = 0;
  for(int i = 1; i < love.length; i++) {
   if(love[i] > max) {
    maxI = i;
    max = love[i];
   }
  }
  return boys[maxI];
 }
}
そのまんま。コード汚い。

2010年8月19日木曜日

ワタルバンド第3回定期演奏会に行ってきた

先日、会津風雅堂で行われた「吹奏楽団ワタルバンド第3回定期演奏会」に行ってきました。

ワタルバンドというのは地元(会津)出身の有志を中心に結成されたバンドで、なんか自由に活動している団体っぽいです。
地域貢献を目標としているらしく、演奏会は無料で開いています。

えー、私は生まれも育ちも会津なのですが、第3回にして存在を初めて知りました。
この第3回定期演奏会の情報も前日にTwitterで知りました。
ゲストが来て、しかも無料だというのにあまり周知されていなかった気がします。自分が疎いだけかもしれませんが・・・

でも知ってる人は知っていたらしく、演奏会は1階席の8割強が埋まっていたと思う。
お盆であるからか、子供も多かった。
そして最前列に座っていたのは、ゲストのたかはし智秋さん目当てで来たという感じの人が数人。
ほとんど地元の方だと思いますが最前線の人たちはどこからきたんでしょうかね。

1曲1曲はそれほど長くなく、馴染みのある曲を中心に演奏していたようでした。
編成は詳しくないのでよくわかりませんが、変わった編成だったと思います。
金管が多かったかなー、、、弦楽器はほとんどありませんでした。
出演者に高校の同級生と、高校のときの音楽教師がいたような・・・

演奏もよかったですが、ゲストの方のお話があったり、ソニーの人が客席にいたり、とても面白い演奏会でした。
ゲストの椎名さんはエースコンバットX2の宣伝くらいしかしてかなったけどあれでよかったのかな?w

演奏も聴けたし、お話も聞けたし、隣に…の歌も聴けたし、本当に無料でいいのかなと思ってしまう演奏会でした。

2010年8月4日水曜日

Flex4本

Flex4になってそれなりに時間がたったのでいくつか書籍がでてきました。

まだじっくりとは読んでいないけど簡単な感想など。


FlashBuilder4とかFlex4の新機能について詳しく書いてある感じ。Flex4プログラミング入門ってタイトルだけど、内容は初心者向けというよりは、4より前のFlexを知っている人向けだと感じた。
よく知らない人が読んでも、「これで何ができるの?」と疑問を持ってしまうかも。
また、FB4とサンプルソースが入ったCDがついている。けどCDがついている本って好きじゃないんだ、開きにくくなって読みづらいし。
CDつけるよりは、ウェブからダウンロードできるようなのがいい。
不満点挙げたけど、別にこの本そんなひどいわけじゃないよ。


こちらの本はまだちらっとしか読んでないけど、結構いい感じだった。欲しい。
わかりやすいと思いますし、初心者にも勧められそうな感じ。
Tour de Flexってこの本で知った。便利っすね。

Flex4のStateとかよくわかっていないので、これらの本で勉強して使えるようになりたいなー。

2010年7月26日月曜日

Stringのlengthで全角を2文字として扱ってみる[AS3]

※注 - よくわかってないで記事書いてるので、いろいろ勘違いしているかも。突っ込み歓迎。

どうやらActionScript3のStringのlengthってマルチバイト文字も1として数えてるみたい。
今まで気にしてなかったけど、例えばPHPのstrlen関数はマルチバイト文字は2としているので、差異がある。

そこで、マルチバイト文字を2として数える方法ないかなーと思ったけど、見つからない。
というわけで、自分で作ってみた。
var str:String = "1@a $%&'=a ぁa←あア亜1@";
var reg:RegExp = new RegExp("[^ -~。-゚]", "g");
trace(str);
trace(str.length);
trace(str.match(reg));
trace(str.match(reg).length);
trace(str.length + str.match(reg).length);
実行結果
1@a $%&'=a ぁa←あア亜1@
19
 ,ぁ,a,←,あ,ア,亜,1,@
9
28
一応合ってる。

正規表現を使ってます。参考:ASCIIコード表
半角の文字以外にマッチする正規表現を作って、マッチした文字数を足してます。

2010年7月10日土曜日

AS3でイベントリスナーに引数を渡す

ActionScript3.0でイベントリスナーにイベント以外の引数を渡す方法。
自分は2つの方法を使ってます。てかそれ以外のやり方は知らない。
グローバル変数を増やしたくないときとかに使ってます。

クリック数をカウントするプログラム。
2つ目と3つ目は基本的にやってることは変わらないと思う。
// グローバル変数を使う
public class event extends Sprite
{
    private var a:int = 0;
    public function event()//constructor
    {
        stage.addEventListener(MouseEvent.CLICK, onClick);
    }

    private function onClick(e:MouseEvent):void
    {
         trace(++a);
    }
}
// Functionを返す関数を作る
public class event extends Sprite
{
    public function event()//constructor
    {
        var a:int = 0;
        stage.addEventListener(MouseEvent.CLICK, onClick(a));
    }

    private function onClick(a:int):Function
    {
        return function(e:MouseEvent):void
        {
            trace(++a);
        };
    }
}
// 無名関数使う
public class event extends Sprite
{
    public function event()//constructor
    {
        var a:int = 0;
        stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void
        {
            trace(++a);
        });
    }
}

2010年7月2日金曜日

TED

いまさらなんですが、以前見た動画を紹介。


このTEDってサイト面白いですよね。

2010年6月25日金曜日

Ubuntu(Kubuntu)にJDK入れた。

私はノートPCではUbuntuのKDE版であるKubuntuをインストールしていて、たまーに使ったりしてます。
Ubuntuには最初からJAVAの実行環境としてOpenJDKというものが入っていますが、Sun(Oracle)のJDK(JRE)をインストールする必要があったりしたのでやり方を載せます。
ちなみにKubuntuは10.04でした。

方法はいくつかありますが、たぶん一番楽なのは下の方法。
Ubuntu 10.04にsun-java6-jdkをインストール - Syo-Takasakiの日記
みんな大好きapt-getを使う方法。リポジトリの追加が必要らしい、自分もはまった。上の記事参考。

apt-getを使わず、JDKをダウンロードしてきてインストールする方法。
まずSunからLinux版のJDKをダウンロード。
ダウンロードした.binファイルを展開したいディレクトリに持っていく。
/usrとかだとsudoを多用することになるので、自分はhome(~/)ディレクトリにした。
言葉で書くとめんどくさいのでコマンドで書く。sudoとか書き忘れてるかもしれない。
cd
mkdir jdk
mv jdk-6u20-linux-i586.bin jdk
cd jdk
chmod a+x jdk-6u20-linux-i586.bin
sudo ./jdk-6u20-linux-i586.bin
でインストールし終わったらJAVA_HOMEを設定。
https://forums.ubuntulinux.jp/viewtopic.php?id=3982
上を参考。
さっきの続きを書くと
cd
emacs .bashrc
まあエディタはなんでもいいんですが、emacs使います。
.bashrcに以下を追加。
JAVA_HOME=~/jdk/jdk1.6.0_20
PATH=$PATH:$JAVA_HOME/bin
CLASSPATH=$JAVA_HOME/lib/tools.jar
export JAVA_HOME PATH CLASSPATH
あってるかな?記憶を頼りに書いてるので自信ない。
.bashrcを更新したら、
source .bashrc
一応この後コンソールを終了してまた起動させたほうがいいかも。

あとは以下の記事を参考。
Ubuntu 9.04 に JDK をインストールする - Masaki Katakai's Weblog

java -versionでSunのJDKになってれば無事終了。

2010年6月22日火曜日

自作PC

最近PC組みました。
理由は、Blenderとかで3DいじってたときにノートPCだとちょっと性能的にキツイ部分があることと、学生の間にAdobeのアカデミック版のソフトを買ってインストールしておきたかったからです。

BTOとかも考えたんですが結局パーツを注文して自作することに。
ソフマップ・ドットコムとAmazonでパーツとOSを購入。10万くらい?

CPU:Core i7-860

ビデオカード:SAPPHIRE RADEON HD5770 1G GDDR5

OS:Microsoft Windows7 Home Premium 64bit 日本語 DSP版 + メモリ

メモリ:4GB(2GBx2)

HDD:Caviar Green WD10EARS バルク品 (1TB/SATA)

マザーボード:ASUS P7P55D-E

ドライブ:Liteon IHES208-27

電源:WIN+POWER 550W

ケース:ANTEC THREEHUNDRED AB

それなりに省電力にしたつもり。
i7-860でHD5770だからゲームなどもほぼできると思う。PCでゲームはそれほどやらないけど。
ドライブはBD読み込みだけの安物。BDが見られればいい、書き込みはとりあえず使わないし。
ファンよりもHDDの方がうるさく感じるのがちょっと不満。

2010年6月1日火曜日

[AS3.0]2点間の距離の計算比較

先日Point.distance()で2点間の距離を計算できることを初めて知りました。
今まで2点間の距離は、三平方の定理を使って計算していたので、Pointを使えば楽に求められると思ったのですが、どちらの計算方法が早いのか疑問に思ったので比べてみた。
package {
 import flash.display.Sprite;
 import flash.geom.Point;
 import flash.utils.getTimer;
 
 public class distance extends Sprite {
  public function distance() {
   // 点1
   var x1:Number = 100;
   var y1:Number = 0;
   // 点2
   var x2:Number = 391;
   var y2:Number = 36.8;
   
   var distance:Number;
   
   var start:Number;
   var end:Number;
   var t:Number;
   
   var i:uint;
   
   start = getTimer();
   for(i = 0; i < 1000000; i++)
    distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
   end = getTimer();
   t = end - start;
   trace("Math1: " + t);
   trace(distance);
   
   start = getTimer();
   for(i = 0; i < 1000000; i++)
    distance = Math.sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1));
   end = getTimer();
   t = end - start;
   trace("Math2: " + t);
   trace(distance);
   
   start = getTimer();
   var dx:Number = x2 - x1;
   var dy:Number = y2 - y1;
   for(i = 0; i < 1000000; i++)
    distance = Math.sqrt(dx * dx + dy * dy);
   end = getTimer();
   t = end - start;
   trace("Math2.5: " + t);
   trace(distance);
   
   start = getTimer();
   var pt1:Point = new Point(x1, y1);
   var pt2:Point = new Point(x2, y2);
   for(i = 0; i < 1000000; i++)
    distance = Point.distance(pt1, pt2);
   end = getTimer();
   t = end - start;
   trace("Point: " + t);
   trace(distance);
  }
 }
}
差が出やすいように100万回計算させてみた。 上のプログラムを実行した結果は、
Math1: 401
293.3176435197856
Math2: 205
293.3176435197856
Math2.5: 197
293.3176435197856
Point: 1214
293.3176435197856
計算結果は当然ながら全部一致。 計算時間は、Pointが目に見えて遅い。 あと二乗ぐらいなら、Math.pow()を使わない方が早い。 ちなみに、Math.sqrt()を使わないで自分で実装したらどうなのかと思って、ニュートン法を使って実行してみたのですが、圧倒的に遅かったです。Math.sqrt()すげー。

というわけで2点間の距離は、今後も三平方の定理を使って求めていきたいと思います。

2010年5月1日土曜日

シューカツ おいしいです ^o^

私の就職活動が一段落しました。

というわけで、就活を総括して、料理を作りたいと思います。
その名も『シューカツ』

まず一口シューを用意。本当はシュークリームで作ろうかと思ったんですけど、スーパーに売ってなかったので徳用チョコシューで代用。

チョコシューを小麦粉でくるみます。正直この工程が必要か疑問です。

先程のものを、溶き卵につけ、パン粉でくるみます。
なんか写真で見るとおいしそう。

揚げます。ケチなので油少ないです。

できました、、、が、油が少なく、温度も高かったため焦げました。悔しいので作りなおします。

改めて完成!!
中火以下で丁寧に揚げるといいです。

作ったので食べます。
中はこんな感じ
ネタで作った料理ですが、味は普通でした。
衣がサクサクパリパリしてて、中のチョコが溶けてて温かいので、普段とは違うチョコシューを楽しめます。
少し油っぽいですが、悪くないです。

完食!

1分足らずで作れる、超お手軽料理『シューカツ』。
あなたも試してみては?

2010年4月16日金曜日

[Pv3D] Meteor Attack(@wonderfl)の解説

一時的にだけど、[Pv3D] Meteor AttackWonderflでデイリーのPVで一位になったのを記念に解説をこちらのほうでやってみます。


と言ってもこれはそんなに難しいことをしているわけではないんですよね。
やっていることをまとめると、
「球(スフィア)の配置」「カメラ、ライト移動のためのイベント」「画像のロード」「シェーダー、マテリアルの設定」「球(スフィア)のクリックイベント」「アニメーション」「バンプマップの更新」
ぐらいです。

全部説明するのは面倒疲れるので、「球(スフィア)のクリックイベント」「バンプマップの更新」だけ解説します。
該当部はここらへん。
//private function onMapComplete(e:Event):void {
private function onMapComplete():void {
 //var bmpData:BitmapData = new BitmapData(e.target.loader.width, e.target.loader.height);
 var loader1:Loader = imageArray.pop();
 var bmpData:BitmapData = new BitmapData(loader1.width, loader1.height);
 bmpData.draw(loader1);
 moonBmpData = bmpData;
 var loader2:Loader = imageArray.pop();
 bmpData = new BitmapData(loader2.width, loader2.height);
 bmpData.draw(loader2);
 bumpBmpData = bmpData;
 scene.addChild(light);
 
 shader = new PhongShader(light, 0xFFFFFF, 0x666666, 0, bumpBmpData);
 var material:ShadedMaterial = new ShadedMaterial(new BitmapMaterial(moonBmpData), shader);
 material.interactive = true;
 material.smooth = true;
 var sphere:Sphere = new Sphere(material, 100, 15, 15);
 sphere.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onObjectClick);
 scene.addChild(sphere);
 
 var particles:ParticleField = new ParticleField(new ParticleMaterial(0xffffff, 1, 1), 200, 2, 500, 500, 500);
 scene.addChild(particles);
}

private function onObjectClick(e:InteractiveScene3DEvent):void {
 var ball:Sphere = new Sphere(new ColorMaterial(0xEEEEEE), 10);
 scene.addChild(ball);
 var tween:ITween = BetweenAS3.tween(ball, {x: e.renderHitData.x * 0.9, y: e.renderHitData.y * 0.9, z: e.renderHitData.z * 0.9}, {x: e.renderHitData.x * 3.5, y: e.renderHitData.y * 3.5, z: e.renderHitData.z * 3.5});
 tween.play();
 tween.onComplete = function():void {
  var sp:Sprite = new Sprite();
  sp.graphics.beginFill(0xFFFFFF);
  sp.graphics.drawCircle(25, 25, 20);
  sp.graphics.endFill();
  sp.graphics.beginFill(0x000000);
  sp.graphics.drawCircle(25, 25, 17);
  sp.graphics.endFill();
  var bmpData:BitmapData = new BitmapData(50, 50, true, 0x00000000);
  bmpData.draw(sp);
  bumpBmpData.draw(bmpData, new Matrix(1, 0, 0, 1, e.x * 1000 - 25, e.y * 500 - 25));
  shader.bumpmap = bumpBmpData;
  scene.removeChild(ball);
 }
}
上のほうはシェーダーの設定です。
sphere.addEventListener(InteractiveScene3DEvent.OBJECT_CLICK, onObjectClick);
でSphereのクリックイベントを設定しています。

で、イベントハンドラで、
(InteractiveScene3DEvent).x及び、(InteractiveScene3DEvent).yは、SphereのマテリアルのUV情報、
(InteractiveScene3DEvent).renderHitData.x(.y, .z)は、クリックしたXYZ座標の値を取ってくることができます。
UVについてはこちらが自分はわかりやすいと思いました。英語だけど。
要するに、UVの値からテクスチャにおける座標を取得したいと思ったら、UVそれぞれにテクスチャの幅と高さを掛けてやれば良いわけです。
(InteractiveScene3DEvent).x * (image).widthという感じで。

上記のプログラムの32行目~は、外側が白で、内側が黒の円を描いて、円の中心がクリックした点になるように移動し、shader.bumpmap = bumpBmpData;でバンプマップを更新しているわけです。

バンプマップを更新したところで、地味で目立たないですね。
というかこれ、以前の記事のプログラムの流用です。

・・・解説下手だなー。

2010年3月21日日曜日

PerlでTwitterAPI使ってみた。

ちょっと前にPerlでつくってみたけどサーバーが無いから公開してなかったやつを紹介。

入力した文字をTwitterで検索して、Google Chart Toolsを使ってどの時間帯に発言されたかを図に示すものを作ってみました。

※時間は世界標準時になってます。+9時間が日本時間です。
「#hanamaru」の結果。
偏ってます。0~1時のは、はなまるマーケット?

「#pandaneko」の結果。
こちらははなまる幼稚園専用っぽいです。上のヤツ以上に偏ってます。
それと、あまり流行ってないのか、結果が500未満です。

「#drrr」の結果。
一部突出してますが、意外と満遍なく発言されてる。

「#haiku」の結果。
発言が多すぎて500件では一日分とってこれてないです。

TwitterのsearchAPIっていろいろと分かってない部分が多くて、検索結果は最大で1500件ぐらいとってこられるみたいなんですが、古いTweetは取ってこられないみたいなんですよね。そんなに精度の高いものではないみたいです。

以下ソースコード。
よくわかってないで書いたのでダメダメです。
use strict;
use warnings;
use Net::Twitter;

print "Content-type: text/html\n\n";
print << 'HERE';
<html>
<head><title>test</title></head>
HERE
my $data;
read(STDIN, $data, $ENV{'CONTENT_LENGTH'});
my($name, $value) = split(/=/, $data);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
my $twitter = Net::Twitter->new();
my @times = ();
foreach my $page (0..4) {
 my $results = $twitter->search($value, { rpp=>100, page=>$page+1 });
 foreach my $key (@{ $results->{results} }) {
  push @times, ($key->{ created_at });
 }
}
my %trends = ('0' => 0, '1' => 0, '2' => 0, '3' => 0, '4' => 0, '5' => 0,
'6' => 0, '7' => 0, '8' => 0, '9' => 0, '10' => 0, '11' => 0,
'12' => 0, '13' => 0, '14' => 0, '15' => 0, '16' => 0, '17' => 0,
'18' => 0, '19' => 0, '20' => 0, '21' => 0, '22' => 0, '23' => 0);
for (@times) {
 $_ =~ s/0[0-9]:\d\d:/&count0($_); next;/e;
 $_ =~ s/1[0-9]:\d\d:/&count1($_); next;/e;
 $_ =~ s/2[0-9]:\d\d:/&count2($_)/e;
}
sub count0 {
 $_ =~ s/\d0:\d\d:/$trends{'0'}++/e;
 $_ =~ s/\d1:\d\d:/$trends{'1'}++/e;
 $_ =~ s/\d2:\d\d:/$trends{'2'}++/e;
 $_ =~ s/\d3:\d\d:/$trends{'3'}++/e;
 $_ =~ s/\d4:\d\d:/$trends{'4'}++/e;
 $_ =~ s/\d5:\d\d:/$trends{'5'}++/e;
 $_ =~ s/\d6:\d\d:/$trends{'6'}++/e;
 $_ =~ s/\d7:\d\d:/$trends{'7'}++/e;
 $_ =~ s/\d8:\d\d:/$trends{'8'}++/e;
 $_ =~ s/\d9:\d\d:/$trends{'9'}++/e;
}
sub count1 {
 $_ =~ s/\d0:\d\d:/$trends{'10'}++/e;
 $_ =~ s/\d1:\d\d:/$trends{'11'}++/e;
 $_ =~ s/\d2:\d\d:/$trends{'12'}++/e;
 $_ =~ s/\d3:\d\d:/$trends{'13'}++/e;
 $_ =~ s/\d4:\d\d:/$trends{'14'}++/e;
 $_ =~ s/\d5:\d\d:/$trends{'15'}++/e;
 $_ =~ s/\d6:\d\d:/$trends{'16'}++/e;
 $_ =~ s/\d7:\d\d:/$trends{'17'}++/e;
 $_ =~ s/\d8:\d\d:/$trends{'18'}++/e;
 $_ =~ s/\d9:\d\d:/$trends{'19'}++/e;
}
sub count2 {
 $_ =~ s/\d0:\d\d:/$trends{'20'}++/e;
 $_ =~ s/\d1:\d\d:/$trends{'21'}++/e;
 $_ =~ s/\d2:\d\d:/$trends{'22'}++/e;
 $_ =~ s/\d3:\d\d:/$trends{'23'}++/e;
}
print "<body>\n";
print "<form method='post' action='http://localhost/cgi-bin/twi.cgi'>\n";
print "<input name='tag' type='text' />\n";
print "<dl><dt>word</dt><dd>$value</dd><dt>tweets</dt><dd>";
print my $line = @times, "</dd></dl>\n";
print "<img src=\"http://chart.apis.google.com/chart?cht=bvg&chs=800x300&chxt=x,y&chxl=0:|0:00|1:00|2:00|3:00|4:00|5:00|6:00|7:00|8:00|9:00|10:00|11:00|12:00|13:00|14:00|15:00|16:00|17:00|18:00|19:00|20:00|21:00|22:00|23:00|24:00&chd=t:$trends{'0'},$trends{'1'},$trends{'2'},$trends{'3'},$trends{'4'},$trends{'5'},$trends{'6'},$trends{'7'},$trends{'8'},$trends{'9'},$trends{'10'},$trends{'11'},$trends{'12'},$trends{'13'},$trends{'14'},$trends{'15'},$trends{'16'},$trends{'17'},$trends{'18'},$trends{'19'},$trends{'20'},$trends{'21'},$trends{'22'},$trends{'23'}\" />";
print "</body>\n";
print "</html>";
なんて非効率なコード・・・

参考サイトなど:
Net::Twitter - search.cpan.org
Google Chart Tools - Google Code
Twitter 検索API メモ - 超自己満足プログラミング
Twitter search api - cool_ni_ikouの日記
正規表現 | Perl講座 [Smart]
Perl/CGI研究室 'PERL-LABO'

2010年3月20日土曜日

最近

このブログの駄目なところはジャンルを統一しないところですね。

今回は雑記です。
最近は専ら就職活動をしてます。そのついでに東京観光などをしてみたり。
湯島聖堂明治神宮カンボジア大使館
東京って坂道多いですね。

あと、本屋にも結構寄ります。品揃えが全然違うので。
気になった本をメモ。



最後に東京とは関係ないですが、
これ買いました。「激闘~Battle No.2~」欲しさに。
RPGのボス戦の曲で一番好きな曲だし、Amazonの中古で1000円ぐらいなので1つの曲のために買うのも悪くないかなーと。
ただこの曲聴いてたら他のサントラも欲しくなってしまった。特にOPとED曲は欲しい・・・

2010年3月14日日曜日

Perlのforeachで・・・

先日ちょっとPerlを書く機会があって、その時に次のようなコードを書いてみた。
#!/usr/bin/perl
use strict;
use warnings;

# コピー元の配列作成
my @a = ("One", "Two", "Three", "123");
# コピー先の配列
my @b = ();

foreach my $val (@a) {
 push @b, $val;
 $val = "Change";
}
print @b, "\n";
print @a, "\n";

これ実行結果は、
OneTwoThree123
ChangeChangeChangeChange
となるのですが、なんかこれちょっと不思議な感じがする。個人的に。
$valに代入してるつもりが、@aの要素にも代入されてるのが気持ち悪いのかな?
うっかり元配列まで変更しないように気をつけないといけませんね。

2010年2月9日火曜日

あーくたん

前回のSVG表示するやつを少し変えたものをwonderflに投稿してみました。

回転させる角度を求めるのに、最初Math.atan2メソッドを知らなくて、Math.atanで事象ごとに場合分けをして求めようとしてたら、無駄に苦労して涙目。

というわけでatanの復習。
atanつまりarctan(アークタンジェント)はtan(タンジェント)の逆関数。
直角三角形の2辺から、角度(ラジアン)を求めることができます。

今回のプログラムをatanを使おうとすると、単純にMath.atan(dy / dx)では角度が求められない場合がでてくる。一番わかり易いのだとdxが0の場合とか。
Math.atan2だとそんな問題が解決できる。ActionScriptのatan2がどう実装されているか知りませんが、一般的に、atan2はこのようになっているようです。

atan2(y, x) =
{
atan(y/x) (x>0),

π-atan(|y/x|) (x<0 かつ y>0),

-(π-atan(|y/x|)) (x<0 かつ y<0),

0 (x<=0 かつ y=0),

π/2 (x=0 かつ y>0),

-π/2 (x=0 かつ y<0)
}

ちゃんと0のときも定義されているので使いやすい。

2010年1月30日土曜日

[AS3.0]SVG表示してみた

ベクター形式の画像を表示したいと思ったので、折角だから最近流行ってる?SVG形式を試しに使ってみました。
こんな感じです。
何もしないと真っ白なままなので、クリックやドラッグをしてみてください。SVG画像が表示されます。
SVG形式の画像はInkscapeで作りました。
ソースコードはこちら。
package {
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.net.URLLoader;
 import flash.net.URLRequest;
 
 import frocessing.shape.FShapeSVG;

 [SWF(backgroundColor = "0xFFFFFF", frameRate = "30")]
 public class TestSVG extends Sprite {
  private var sp:Sprite;
  private var mouseDown:Boolean;
  private var mouseDownX:Number;
  private var mouseDownY:Number;
  
  public function TestSVG() {
   var loader:URLLoader = new URLLoader();
   loader.addEventListener(Event.COMPLETE, onComplete);
   loader.load(new URLRequest("test.svg"));
   
   mouseDown = false;
   stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
   stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
   stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
  }
  
  private function onComplete(e:Event):void {
   var svg:XML = XML(e.target.data);
   var shapeData:FShapeSVG = new FShapeSVG(svg);
   sp = shapeData.toSprite();
  }
  
  private function onMouseDown(e:MouseEvent):void {
   mouseDownX = e.stageX;
   mouseDownY = e.stageY;
   sp.x = e.stageX - sp.width / 2;
   sp.y = e.stageY - sp.height / 2;
   sp.alpha = 0.2;
   mouseDown = true;
   addChild(sp);
  }
  
  private function onMouseMove(e:MouseEvent):void {
   if(mouseDown) {
    sp.width = Math.abs(mouseDownX - e.stageX);
    sp.height = Math.abs(mouseDownY - e.stageY);
    sp.x = mouseDownX - sp.width / 2;
    sp.y = mouseDownY - sp.height / 2;
   }
  }
  
  private function onMouseUp(e:MouseEvent):void {
   sp.alpha = 1;
   mouseDown = false;
  }
 }
}
Frocessingというライブラリを使わせてもらっています。
思った以上に簡単に出来ました。

今回の参考サイト
FlashでSVG形式のベクターグラフィックを利用する | デベロッパーセンター
nutsu/Frocessing - Spark project

自転車と下郷

以前自転車で東京に行ったときに最初に撮った写真。
たぶん下郷町です。大内宿を過ぎたあたり。このときはまだ写真を撮ってる余裕があったなあ・・・


手前の自転車が自分の自転車です。
そんなにいい自転車じゃありません。こんな自転車で東京行くとか馬鹿ですね。

次はFlashの記事書きます。
SVGを使ってみる予定。

2010年1月28日木曜日

歩行者用道路

更新するプログラムネタがないので、自転車で街探索してた時に撮った写真を上げます。

初回は地元会津若松市から。
七日町周辺です。

偶然見つけたかなり細い歩行者用道路と思われるものを前後から撮影。

2010年1月3日日曜日

[Flex]CanvasのaddChild

この間、FlexでCanvasにSimpleButtonをaddChildしようとしたらエラーが出た。

ググるといろいろ対策が出てきます。
Canvas に Sprite や Shape が addChild できない件 - kagamihogeのblog
Flex 3で直接Spriteを使用することはできない? - Memorize

というかなぜaddChild出来ないんでしょうかね。
flash.display以下のものは直接addChildできないのかなー。

上であげたリンク先はUIComponentを使ってこの問題を解決しています。
この方法でも解決出来ますが、Twitterでつぶやいてたら先輩に他の方法を教えてもらった。

CanvasのrawChildrenプロパティにaddChildすれば、Spriteでもエラーはでないとのこと。
これは地味に便利。
rawChildren便利だよ、rawChildren。
なんで解決したのかがよくわかってないのが気持ち悪いですが。

というかこの方法、以前教えてもらったのに忘れてた気がする。

2010年1月1日金曜日

積みゲーリスト その2

ゲームがまたたまってきたのでまた積みゲーリスト作ります。

積みゲーリスト その2
今回はクリアしていない作品だけ上げます。
ラブプラスだとか、プレイしたレーシングやシューティングゲームは含みません。
PS3
  • なし
    ただしゲームアーカイブスで買ったグランディアとゼノギアスは未クリア。
Xbox360
  • ロックマン9
    あとステージ6つぐらい。
DS
  • カルドセプトDS
    未プレイ。
  • アイドルマスターDS
    秋月涼をプレイ中。現在ランクB。残りの二人もプレイ予定。今のところ本命は水谷絵理。
  • ヴァルキリープロファイル咎を背負う者
    中盤までやって全然進めてない。
PSP
  • アイドルマスターSPミッシングムーン
    あずささんだけクリアして他2人やってない。そうこうしてる間にベスト盤が出るし・・・
  • PS3で上げたアーカイブスのタイトル2つ。
PS2
  • アマガミ
    七咲と森島先輩だけクリア、棚町が途中ってところでやめてたような。そういえば梅原(というかBAD?)もクリアしてた。
  • グランディアX
    これはもうクリアする気なし。一応ラストダンジョンまでは行ってる。
  • グランディア2
    中盤ですが、既にDC版クリアしてるんで別にやらなくていいかも。
  • ANUBIS
    終盤で中断して再開してない。
  • FateStayNight
    未プレイ。買ってたこと今思い出した。
DC
  • セガガガ
    未プレイ。
  • サクラ大戦3
    超序盤。
  • サクラ大戦4
    未プレイ。
  • Dの食卓2
    未プレイ。
  • マイメリーメイ
    未プレイ。
  • マイメリーメイビー
    未プレイ。上の続編かな?
  • ミッシングパーツなんとか
    未プレイ。よく知らん。
  • 聖霊機ライブレード
    未プレイ。なんか買ってみた。
  • あいかぎ
    未プレイ。これF&Cの作品ですよね。
  • てのひらを、たいように
    未プレイ。知らない作品。
SS
  • シャイニング・フォース3 シナリオ2
    シナリオ1は無事クリアしました。今シナリオ2は超序盤。
  • シャイニング・フォース3 シナリオ3
    未プレイ。シナリオ2クリアしたらプレイする。
  • 野々村病院の人々
    未プレイ。たしかSSでエロイ作品として有名だった気がします。
  • Dの食卓
    未プレイ。クリエイターの人有名ですよね。
  • エネミーゼロ
    未プレイ。
  • 新世紀エヴァンゲリオン
    未プレイ。数あるエヴァゲーのうちのどれか。
  • 慟哭 そして・・・
    未プレイ。これは結構欲しかった作品。昔電撃セガサターンに載ってたの覚えてる。
  • 機動戦士Zガンダム 前編
    未プレイ。最近Z見たので。
  • 放課後恋愛クラブ
    未プレイ。これも昔電撃セガサターンに載ってたの覚えてる。実は欲しかった作品。
  • Piaキャロットへようこそ!!2
    ピアキャロ2、未プレイ。これも昔電撃せg(略

  • 未プレイ。言わずと知れた名作ADVゲーム。今じゃPSP版も出てますが。
  • ブラックマトリクス
    未プレイ。結構人気シリーズだった気がします。今はもう続編はでてないのかな。
  • 瑠璃色の雪
    未プレイ。知らない作品。
  • クォヴァディス
    未プレイ。知らない作品。
  • お嬢様特急
    星奈のフラグ立てて、長野あたり。この作品面白いです。これも昔電撃せg(ry
  • AZEL
    ごめん進めてない。
  • パンツァードラグーン ツヴァイ
    未プレイ。
  • シャイニング・ザ・ホーリィアーク
    未プレイ。
  • デザイア
    OPだけ見た。
  • スナッチャー
    未プレイ。
  • バーニングレンジャー
    未プレイ。OP主題歌からこの作品を知りました。
  • バーチャコールS
    未プレイ。ぇー、これも昔電撃セガサターンで読んでとても印象に残ってる作品です。
  • 魔導物語
    昔ラスボス直前のセーブデータを、他のゲームの容量がなかったので消したのでクリアしていない作品。

うーん、、、これはひどい。
こうやってまとめると、クリアない作品は現行機には殆どないですね。
SS,DCのソフトは置き場所にも困ってます。今はこんな感じ↓