Ruby | Gviz の力をかり、 CodeIQ で私が出題した問題を出題順に並べ、挑戦者の多い問題を強調表示してみる
概要
Gviz の力をかり、 CodeIQ で私が出題した問題を出題順に並べ、挑戦者の多い問題を強調表示してみます。
CodeIQの出題について
CodeIQでエンジニア向けの問題を出題しています。
下記の3アカウントがあります。
https://codeiq.jp/ace/tbpgr/
https://codeiq.jp/ace/tbpgr_badge/
https://codeiq.jp/ace/tbpgr_colosseum_manager/
2013年12月から出題開始。毎月3問前後の出題をしてきて、
出題件数も多くなってきたので、Gvizの力で過去の問題群を並べ、
人気だった問題を確認してみたいと思います。
元データ(LTSV)
出題情報はLTSVファイルにまとめました。
no:969 title:第5回 デスマコロシアム start_at:2014/07/22 challengers:98
no:943 title:技術者の会話 start_at:2014/07/16 challengers:69
no:972 title:Gitに入門しよう! start_at:2014/07/03 challengers:155
no:971 title:Gitで歴史を捏造する?! start_at:2014/07/07 challengers:62
no:942 title:ポモドーロテクニック start_at:2014/06/16 challengers:83
no:915 title:第4回 デスマコロシアム start_at:2014/06/09 challengers:79
no:884 title:Ruby警官から警告を受けろ問題 level1 start_at:2014/05/19 challengers:19
no:883 title:Ruby警官から警告を受けろ問題 level2 start_at:2014/05/19 challengers:14
no:872 title:第3回 デスマコロシアム start_at:2014/05/12 challengers:104
no:835 title:第2回 デスマコロシアム start_at:2014/04/14 challengers:92
no:826 title:他人のサイトにモンキーパッチ start_at:2014/04/07 challengers:25
no:827 title:マインドマップ使ってますか? start_at:2014/04/07 challengers:25
no:791 title:第1回 デスマコロシアム start_at:2014/03/18 challengers:141
no:790 title:ChefでLL言語一括Hello start_at:2014/03/14 challengers:12
no:774 title:Hello Vagrant! start_at:2014/03/14 challengers:18
no:768 title:2文字10秒で解くJava風Ruby start_at:2014/02/27 challengers:48
no:746 title:EmmetでHTML高速記述 Lv1 start_at:2014/02/17 challengers:100
no:725 title:EmmetでHTML高速記述 Lv2 start_at:2014/02/17 challengers:74
no:710 title:CoffeeScript入門 start_at:2014/01/29 challengers:26
no:698 title:メタな世界:宣言的な機能追加(基礎) start_at:2014/01/28 challengers:46
no:697 title:メタな世界:宣言的な機能追加(応用) start_at:2014/01/28 challengers:17
no:653 title:年賀状プログラム start_at:2013/12/23 challengers:13
no:625 title:コピペシステム社の粗悪システムを改修 start_at:2013/12/12 challengers:16
LTSV形式をご存じない方は下記をどうぞ。
LTSV公式サイト
LTSV FAQ - LTSV って何? どういうところが良いの?
【今北産業】3分で分かるLTSV業界のまとめ【LTSV】
アクセスログ解析が楽になる日本産テキストフォーマットLTSVを知っていますか? #ltsv
ちなみに現在進行形で LTSV の問題を出題中です。(2014/09/01 締め切り)
https://codeiq.jp/ace/tbpgr_badge/q1024
https://codeiq.jp/ace/tbpgr_badge/q1025
コード
require "gviz"
require "colorable"
ltsv_src = File.open('./problems.ltsv', 'r:utf-8') { |f|f.read }
ltsv = ltsv_src.split("\n").map { |line|Hash[line.split("\t").map{ |column| column.split(":", 2)}] }
color = Colorable::Color.new(:black)
def color_index(challengers)
color_index = challengers.to_i/10
color_index = 11 if color_index > 11
color_index
end
Graph do
global layout: :sfdp, label:"CodeIQ @tbpgr 出題問題", fontsize:60, size:15, overlap:false, fontname:'MS GOTHIC'
nodes shape: :ellipse, fontname:'MS GOTHIC', fontsize:10, style: :filled, colorscheme: :paired12
ltsv.sort_by { |e|e['no'] }.reverse.each_cons(2) do |p1, p2|
route p1['no'].to_sym => p2['no']
magnification1 = p1['challengers'].to_i/2
magnification2 = p2['challengers'].to_i/2
node p1['no'].to_sym, { label: "#{p1['title']}(#{p1['challengers']})",
fontsize: 20*magnification1,
width: 2*magnification1,
height: 2*magnification1,
fillcolor: color_index(p1['challengers'])
}
node p2['no'].to_sym, { label: "#{p2['title']}(#{p2['challengers']})",
fontsize: 20*magnification2,
width: 2*magnification2,
height: 2*magnification2,
fillcolor: color_index(p2['challengers'])
}
end
save :"codeiq_problem", :png
end
出力
おまけ
※挑戦者の少ない順に並べてみました)