素因数分解twitterボットfactoring_botを作りました

|
Clip to Evernote 素因数分解twitterボットfactoring_botを作りました

素因数分解botとか面白そうかなと思ってみる。だけど僕には<del>ピアノがない、君に聴かせる</del>腕もないのでとりあえず人力で、189 = 3 * 3 * 3 * 7、1007 = 19 * 53 RT @xagawa [博論] 189pages. 1007kB也

Twitter / MarriageTheorem: 素因数分解botとか面白そうかなと思ってみる。だけど ...

手動で素因数分解を啓蒙されている方が,botを所望しておられました.

Botは書けるけど素因数分解ができないw RT @shokohitsuji: 誰か作ってあげてー。 RT: @MarriageTheorem: 素因数分解botとか面白そうかなと思ってみる。だけど僕には<del>ピアノがない、君に聴かせる</del>腕もないのでとりあえず人力で

Twitter / 4403: Botは書けるけど素因数分解ができないw RT @s ...

そして紆余曲折合って作ることになりました.専用アカウントはfactoring_botです.実装はPHPで,ものすごくナイーブな方法です.実装スピード最優先で.

仕様

  • factorial_botのfriends_timelineから3~10桁の数字を見つけ出し素因数分解の結果をRTする
  • 素因数分解の対象は1発言内で最初に見つかったもののみ
  • replyなどで@を含むメッセージには無反応
  • 素因数分解結果を合わせた発言文字数が140文字を超えた場合はポストしない
  • 5分毎に動作

今のところの不具合のようなもの

  • 手動リフォロー
  • 先頭が0で始まっていても認識する
  • 8桁以上あっても先頭8桁を認識する
  • 既知の素数で順番に割っていくだけの簡単なお仕事です

素因数分解は専門外で全然わからないのですが,素数を探しましょうではなく,ある数字を素因数分解しましょうというときに,最適なアプローチはどんな方法なんでしょうか?既知の素数表を配列で持っておいて,順番で割っていくというのは悪くなさそうな気がしますが・・・.識者の方からのアドバイスを期待します.

今後やろうとしていること

  • 文頭に@factoring_botがある場合(つまりmention)は反応しようかと思う
  • フォロワ以外からのmentionにも反応しようかと思う
  • PublicTLから直近50件を抽出して素因数分解させてRTして知名度を上げる
  • Phytonで書き直し,GAEに移す
  • 自動リフォローを実装する
  • ポスト予定の発言が140文字を超えたら上手いこと切り詰める
  • より桁数の多い数字に対応する

201001261440追記:
ヴァァァーーーーとなったら,10桁の素因数分解ができるようになりました.factoring_botのuser_timelineに流れているmentionには反応します.ただし,文頭に@factoring_botがある場合に限る.相変わらずRTのメッセージが140文字を超えた場合は何もつぶやけない.

201002221703追記:
ハッシュタグに含まれる数字は素因数分解しないようにしました.例えば,以下の文字列は素因数分解の対象外となります.「#2929」「#scis2010」「#2929dan」.なお,これらのハッシュタグを含んでいたとしても,他に素因数分解の対象となる文字列があれば,素因数分解します.

201003022303追記:
RTが140文字を超えるとつぶやけない問題に対応しました.まず,in_reply_to_status_idパラメータに対応しました.これにより,素因数分解対象の元つぶやきを指すことができるようになりました.この効果で,RTメッセージが140文字を超える場合は,元メッセージをバッサリと削除してつぶやくように変更しました.つぶやき例としてはこのような感じです

201003152311追記:
factoring_botをxAuth対応させました.アプリケーション名にfactoring_botと表示されると思います.かっこいい!あと,今更ですが,mentionに対応しています.文頭に「@factoring_bot」を含んでいることを条件に,つぶやきを素因数分解します.あとは,今日の日付が素数だったら,お知らせします.

201006072305追記:
2010と2011は素因数分解しないようにブラックリスト化しました.

201006172202追記:
最近の度重なるクジラ病によって,度々発言を失敗するようになりました.従来仕様ではつぶやきに失敗したものはリトライせずに破棄していました.しかしながら,それを克服するべく,本日の改修でメッセージキューイング方式に変更しました.これにより,エラーが発生する場合は可能な限りリトライします.現在の設定では1分毎のデキューイングで最大60分間ねばります.十分なテストが出来ていないので,問題が発生する可能性があります.その際はお知らせ頂ければ幸いです.

100617_factoring_bot01.png

プロフィール

e-m@il @ddress