- 更新: 2016年01月06日 21:24
Twitterの素因数分解ボットであるfactoring_botの愛称が「ふぁくたん」です.生い立ちなどはこちらをご覧下さい.
開発のいきさつ
素因数分解botとか面白そうかなと思ってみる。だけど僕には<del>ピアノがない、君に聴かせる</del>腕もないのでとりあえず人力で、189 = 3 * 3 * 3 * 7、1007 = 19 * 53 RT @xagawa [博論] 189pages. 1007kB也
— MarriageTheoremさん (@MarriageTheorem) 1月 4, 2010
ということで,
Botは書けるけど素因数分解ができないw RT @shokohitsuji: 誰か作ってあげてー。 RT: @marriagetheorem: 素因数分解botとか面白そうかなと思ってみる。だけど僕には<del>ピアノがない、君に聴かせる</del>腕もないのでとりあえず人力で
— 田中実(公認チャラフェッショナル)さん (@k4403) 1月 4, 2010
と名乗り出て,
3桁の数字のみ素因数分解BOT @factoring_bot だん.だが,気に入らないのでリメイクを試みるなう.あと自動リフォロしたい. @expl01t 今は3桁限定ですのだ!
— 田中実(公認チャラフェッショナル)さん (@k4403) 1月 4, 2010
できました.
現在の仕様
実装は開発速度を最優先としたため,PHPで作られています.素因数分解は単純に既知素数表を用いて順番に割っているだけです.難しいことは一切していません.コア部分のコードは以下のような感じです.
include 'prime.php'; //fact_nums[] $stack = array(); for($n=0; $n<= $fact_nums[$n]); $n++) { if($num <= $fact_nums[$n]) break; if(0 == $num % $fact_nums[$n]) { $num /= $fact_nums[$n]; array_push($stack, $fact_nums[$n]); $n--; } }
主たる機能は以下の通りです.
friends_timeline (f)
friends_timelineから3~10桁の数字を見つけて,その素因数分解結果をRTでつぶやきます.動作間隔は5分で直近200件を対象にしています.
mentions (m)
mentionsから特に文頭に”@factoring_bot”が含まれているツイートを対象に,素因数分解を行いRTで結果をつぶやきます.動作間隔 は1分です.ただし,”@factoring_bot 123456″には反応しますが,”123456 @factoring_bot”には反応しない仕様としています(RT連鎖回避のため).201212241637追記:テストリリースとして,12桁の素因数分解ならびに冪乗表示に対応しました.
today (t)
1日1回0時1分(日本時間)に,その日が素数であれば,報告します.例えば,2010年1月1日を”20100101″と表現し,その数字が素数かどうか判定し,素数であればつぶやきます.
20101009 is prime! Today is prime!
— 素因数分解ボット「ふぁくたん」さん (@factoring_bot) 10月 8, 2010
Message Queuing
上記3機能(+1機能)から出力されるつぶやき予定のメッセージをデータベースに保存し,投稿専用プログラムでTwitterに送出しています.動作間隔は1分です.そのため,上記3機能の出力は1分以上遅れてTwitter上に現れます.また,この機能によって,クジラ病発生時に,最大60分は再送を試みます.
主たる仕様は以下の通りです.
つぶやくメッセージは”(素因数分解対象の数字)=(素因数分解結果) RT @SCREEN_NAME (元のつぶやき)”となりますが,このメッセージが140文字を超えた場合,つぶやくことを諦めます.(20101122注記)friends増加に伴い,つぶやき数が増えてきたので,in_reply_toに頼った方式は中断して様子を見ているため,このような仕様になっています.- 201204051420追記:つぶやくメッセージは”@SCREEN_NAME (素因数分解対象の数字)=(素因数分解結果) RT: (元のつぶやき)”となりますが,このメッセージが140文字を超えた場合,つぶやくことを諦めます.
- 頻出する”2010″と”2011″と”2012″と”2013″と”100″はブラックリストに入っています.今後もブラックリストは予告なく変更があります.
- 201104291604追記:123,456,789のようなカンマ区切りの桁取りに対応しました.
- フォロー/リムーブは自動で行っています.動作間隔は2時間です.ふぁくたんにつぶやきを拾われて素因数分解されることが目障りだと感じましたら,どうぞリムーブして下さい.慎ましく活動していますので,スパム報告しないで下さい><.(
201102030942追記:昨晩より大量リムーブが発生しています.復旧を試みますが,フォローは1000件/日のため,完全復旧まで数日かかる見通しです.ごめんなさいごめんなさい.201102092248追記:復旧しました.)
20120405の問題について
フォローしていないアカウントへのin_reply_to情報が付加された非公式リツイートがタイムラインに表示されてたのですが、この挙動って現在Twitterの仕様どおりなんでしょうか。最近はもう各種サービスの振る舞いが把握しきれなくなってしまいました。
— 石田淳さん (@ISHIDA_Atsushi) 4月 5, 2012
「文頭@ではないin reply to付きの発言」が全部見えるようになったらふらんちゃんみたいな高性能botがただのTLレイパーに
— [ボテ腹JK]おとうふ(SR+)さん (@coffeetouhu) 4月 5, 2012
以上のようなトラブルが発生したので,ツイッター側のバグだと思いますが,対策を講じました.
学会発表
日本最大のセキュリティ系シンポジウムであるSCIS2010および日本最大級のセキュリティ系シンポジウムであるCSS2010において,「ふぁくたん」について学会発表が行われています.
- SCIS2010ナイトセッション – 4403 is written(終了しました)
- CSS×2.0 in CSS2010: Can we factor RSA? – 4403 is written(終了しました)
発表の様子はYoutubeで公開されています.