Home > Archives > 2007-04
2007-04
フィボナッチ数列
- 2007-04-15 (日)
- ActionScript3.0 | Flash

お腹減ったなぁ。
どうも JC の方です。
ActionScript を色々と調べていてこんなのを見つけました。
フィボナッチ数列を求める 関数
function fib(i:Number):Number{
if (i<2) {
return 1;
} else {
return fib(i-2) + fib(i-1);
}
}
何か面白そうだったのでループで回してみた。
・・・・・・・・・
・・・・・・
・・・
PC が止まった。10回目くらいまではトレースされたがそれ以降はCPUフル稼働。
そこで考えてみた。
どうやったら早くできるか。
遅い原因は恐らく再起処理(?)を行っているからだと思う。
じゃあ早くするには?
再起じゃなく求めればいい!
って事でできたのがコレ。
var log:Array = new Array();
function fib(i:Number):Number {
if (i<3) {
log[i] = 1;
return 1;
} else {
var l:Number = log[i - 1] + log[i - 2];
log[i] = l;
return l;
}
}
var time1 = getTimer();
for (var n:Number = 1; n < 74; n++) trace(n + " : " +fib(n));
trace(getTimer() - time1);
73項までを 5ms で終了。
ActionScript 3.0 に至っては1ms で終了。
早い。
log として 配列に計算した数字を入れて、それから計算すれば
すぐに答えがでる。
log に無い項は後から計算してもすぐ終わるし、
特に再起処理を使って処理を行う必要も無い気がする。
コレを何かに使えないかなぁ?
- Comments: 0
- Trackbacks (Close): 0
DateUtil AS 2.0
- 2007-04-14 (土)
- 未分類

今回は 久々に ActionScript に関して。
どうも JC の方です。
今更なんですが、ActionScript2.0 で書いた DateUtil.as を公開してみようかと思って。
ちょっと前に Flash でとあるゲームのプロトタイプを作ることになって、
その時に作った DateUtil です。
それをちょっと改造して、使い方のサンプルとコメント書いてみた。
以下からダウンロードしてください。
DownLoad
どんな事感じなのかをまとめておこう。
public static function str2Date(yyyymmdd: String): Date public static function date2Str(date: Date): String public static function num2Date(yyyymmddNum: Number): Date public static function date2Num(date: Date): Number public static function zeroSuplessStr2(num: Number): String public static function getFullYear(yyyymmdd: String): Number public static function getMonth(yyyymmdd: String): Number public static function getDate(yyyymmdd: String): Number public static function time2Zero(date: Date): Date public static function isLeapYear(date: Date): Boolean public static function min(): Date public static function max(): Date public static function shiftMilliseconds(date: Date, milliseconds: Number): Date public static function shiftSeconds(date: Date, seconds: Number): Date public static function shiftMinutes(date: Date, minutes: Number): Date public static function shiftHours(date: Date, hours: Number): Date public static function shiftDate(date: Date, dates: Number): Date public static function shiftMonth(date: Date, months: Number): Date public static function shiftYear(date: Date, years: Number): Date public static function shiftTime(date: Date, years: Number, months: Number, dates: Number, hours: Number, minutes: Number, seconds: Number, milliseconds: Number): Date public static function getMonthFirstDate(date: Date): Date public static function getMonthLastDate(date: Date): Date public static function getWeekFirstDate(date: Date, startDay: Number): Date public static function getWeekLastDate(date: Date, startDay: Number): Date public static function differenceDate(targetDate: Date, diffDate: Date): Number public static function clone(date: Date): Date
メソッド一覧はこんな感じ。
26メソッドか。
いらなそうなのもあるが、意外と便利だったりするので一応取っておいたのもある。
max(), min() とか結構使える。(と思う)
引数に 複数の Date オブジェクトを渡してやると未来、または過去が帰ってくる。
あとは differnceDate() 、shiftDate() 、getMonthFirstDate() 、getMonthLastDate()、
getWeekFirstDate() 、 getWeekLastDate() も結構お気に入り。(多いな)
differenceDate() は 二つのDate オブジェクトが 何日差かを計算する。
shiftDate() は 日付をずらす。
getMonthFirstDate() と
getMonthLastDate() は、指定日の 月の始まり、または終わりの日を返してくれる。
getWeekFirstDate() と
getWeekLastDate() は、指定日の 週の始まり、または終わりの日を返してくれる。
さらに何曜日始まりかを第二引数に渡すとそれにあった日を返してくれる。
どれも閏年とか気にしなくて使えるから便利だと思う。
ってこんなのを公開してみているのは何故か。
恥ずかしながら、まだ Flash 仲間がいない(´・ω・`)ソーボン
なので、少しでも Flasher の方々に近づければと勉強中だったが、
俺も勉強してるだけでは近づけないと思い、コレを布石に一人でも仲間ができたらなぁ。
とか考えている。
実力の無い人間が実力のある人間に声を聞いてもらうには、
人一倍大きく声を張り上げなければいけないような気がしている。
実力が無くても、向上心のある人間がもっと色んな人と関われる世の中になってほしいなぁ。
話は逸れたが、何かバグとか「ココをこうした方が効率的だ!」とか言うのがある方は連絡ください。
もっと勉強がしたいので「こんなのもあったら便利」っていう意見もたくさん欲しいです。
m(_ _)m 宜しくお願いします。
- Comments: 0
- Trackbacks (Close): 0
Home > Archives > 2007-04
- Search
- Feeds
- Meta