LoginSignup
5
5

More than 5 years have passed since last update.

Ruby | Gviz の力をかり、 CodeIQ で私が出題した問題を出題順に並べ、挑戦者の多い問題を強調表示してみる

Last updated at Posted at 2014-08-22

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

出力

codeiq_problem.png

おまけ

※挑戦者の少ない順に並べてみました)

codeiq_problems_sort_challengers.png

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5