ワンライナー回文チェック
/**
* Copyright imajuk ( http://wonderfl.net/user/imajuk )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/2CpV
*/
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
/**
* ワンライナー回文チェック
*
* 正規表現の練習をしてたらいつのまにかできてた。
* Tweetしようと思ったけど140文字に圧縮できなかった!
* 1 liner (163 characters)
* s==s.match(new RegExp("^"+(function(a,n,c){return a.split("#").join(n--==0?".":arguments.callee("(.)"+"#\\"+ c++,n,c))})("#",int(s.length/2),1)+"$", "g")).join("")
*
* 書いてから気づいたけど回文チェックに正規表現使う必要ない!
* こっちの方が素直だ(127 characters)
* (function(a,b){b=b&&a[0]==a[a.length-1];a.pop();a.shift();return (b&&a.length>1)?arguments.callee(a, b):b;})(s.split(""), true)
*
* forkで最短のコードが示されてました。yonatanさん、ご指摘ありがとうございます。
* s == s.split("").reverse().join("")
* 難しく考えすぎてた。恥ずかしい。。
*
* 回文は「回文の部屋(http://www.sutv.zaq.ne.jp/shirokuma/kaibun.html)から勝手にお借りしました」
**/
public class FlashTest extends Sprite {
public function FlashTest() {
// write as3 code here..
var s:String = "ろだんてさっきのきっさてんだろ";
var tf:TextField = addChild(new TextField()) as TextField;
tf.autoSize = TextFieldAutoSize.LEFT;
tf.appendText("ロダンてさっきの喫茶店だろ?\n(" + s + ")\n");
tf.appendText(String(
(function(a:Array,b:Boolean):Boolean{b=b&&a[0]==a[a.length-1];a.pop();a.shift();return (b&&a.length>1)?arguments.callee(a, b):b;})(s.split(""), true)
));
}
}
}