ナベアツを行うプログラム.
激しくどうでもいいんだが,一時期流行った,世界のナベアツという芸人がやっていた,「3の倍数と3が付く数字のときだけアホになる」というネタをプログラムしてみたので載せておく.
<?php for ($i = 1; $i <= 100; $i++) { $num = $i; if ($num % 3 === 0) { // 3の倍数のとき print $i." is nabe!!<br />"; } else { // 3という数字を含んでいるかチェック while ($num !== 0) { $nabe = $num % 10; // 1234 % 10 は 4 if ($nabe === 3) { print $i." is nabe!!<br />"; break; } $num = floor($num / 10); // floor(1234 / 10) は 123 } } }
ActionScript3.0でクリックした点まで物体を動かすサンプル
最近,ActionScriptにハマっています.物体を移動させるライブラリはたくさんあるのですが,やはり細かい動きをさせたいときは,自分でコードを書くのが一番です.ということで,クリックしたところまで物体を動かすサンプルを書いてみました.二つのファイル(main.asとCircle.as)から成っています.この二つのファイルは同じフォルダに配置してコンパイルして下さい.
実行例はこちらです.
ソースはこちら.これはmain.as.
// main.as package { import flash.display.Sprite; import flash.events.MouseEvent; import Circle; public class actions extends Sprite { private var _self:Circle; public function actions() { this._self = new Circle(); addChild(this._self); this.stage.addEventListener(MouseEvent.CLICK, _move); } private function _move(e:MouseEvent):void { this._self.moveTo({x:e.stageX, y:e.stageY}); } } }
こっちはCircle.asです.
//Circle.as package { import flash.display.Sprite; import flash.events.Event; public class Circle extends Sprite { public var from:Object; public var to:Object; public var speed:Number = 10; public function Circle():void { _drawCircle(); } // 円を描く private function _drawCircle():void { this.graphics.beginFill(0xFFCC00); this.graphics.drawCircle(50, 50, 50); this.graphics.endFill(); } // 現在地から,指定したところまで移動する public function moveTo(to:Object):void{ this.from = {x:x, y:y} this.to = to; this.addEventListener(Event.ENTER_FRAME, _moveTo); } private function _moveTo(e:Event):void { // 目的地までの距離を測定する var diffX:Number = Math.abs(this.to.x - this.from.x); var diffY:Number = Math.abs(this.to.y - this.from.y); // 移動スピードを設定する this.speed = _ease(this.speed, diffX, diffY); // 目的地(付近)に着いたら移動をやめる if (diffX < this.speed && diffY < this.speed){ this.removeEventListener(Event.ENTER_FRAME, _moveTo); } // x座標が目的地(付近)に到達していない場合,fromを更新 if (diffX > this.speed) { if (this.from.x < this.to.x) { this.from.x += this.speed; } else { this.from.x -= this.speed; } } // y座標が目的地(付近)に到達していない場合,fromを更新 if (diffY > this.speed) { if (this.from.y < this.to.y) { this.from.y += this.speed; } else { this.from.y -= this.speed; } } // 更新したfromを新たな現在地に設定する this.x = this.from.x; this.y = this.from.y; } // 移動スピードを調節する(まだ適当) public function _ease(speed:Number, diffX:Number, diffY:Number):Number { return Math.max(diffX, diffY) / 10; } } }
XとYを含むn-gramの文章を取るプログラム
最近Pythonをよく使ってます。
そこで、ある2つの単語(XとY)を含む、5文字以内の部分文字列を取る必要があったので、プログラムを書いてみました。
#! coding: utf-8 str = 'ggggg bbbb cccc X is large Y hoge aaa xxxx yyyy X is small Y hogehoge aaaa hoge' windowSize = 5 tokens = str.split(' ') for i in range(len(tokens)-1): XisIncludedFlag = False YisIncludedFlag = False for j in range(windowSize): if tokens[i+j] == 'X' : XisIncludedFlag = True if tokens[i+j] == 'Y' : YisIncludedFlag = True if i+j == len(tokens)-1 : break if XisIncludedFlag and YisIncludedFlag : for j in range(windowSize): print tokens[i+j] if i + j == len(tokens)-1 : break print ''
例えば、strとして、
str = 'ggggg bbbb cccc X is large Y hoge aaa xxxx yyyy X is small Y hogehoge aaaa hoge'
という文章を使った時、(print tokens[i+j]によって)出力されるのは、
cccc X is large Y X is large Y hoge yyyy X is small Y X is small Y hogehoge
です。
ただ、場当たり的に書いたので、すごく遅いプログラムになってると思います。
このプログラムでは、対象文字列がN文字あったとき、今回はwindowSizeが5なので、大体 N * 5ほど実行回数が必要になります。
たぶん探せばもっといいアルゴリズムがたくさんあるはず…。
URLをパラメータに持つURLを、パラメータ値に置き換えるGreasemonkeyスクリプト(ややこしい)
作ったものと経緯
他のページへ飛ぶときに出てくるクッションページを飛ばすスクリプトです。 URL中にhttp://が2回出てくるときに、後から出てきたhttp://以下にURLを置き換えます。例えば、http://hogehoge/?url=http://skygazer.iobb.netをhttp://skygazer.iobb.net/に置き換えてくれます。置き換えることで不具合が出るかもしれないので、置き換えるサイトは自分で指定して下さい。
スクリプトの置き場所
http://skygazer.iobb.net/gm/scp.user.js からインストールできます。
printとechoだと、echoの方が速い
今までは何かを出力するときにはprint文を使ってたんですが、どうやらecho文の方が速いみたいです。ショックだ…。
http://nyx.pu1.net/reference/extra/echo_print.html
http://www.crazy-media.se/echo-vs-print/