Skip to content

Instantly share code, notes, and snippets.

@amutake
Last active July 16, 2016 01:22
Show Gist options
  • Save amutake/4946357ba3bf5c3ae06a60360b84bf32 to your computer and use it in GitHub Desktop.
Save amutake/4946357ba3bf5c3ae06a60360b84bf32 to your computer and use it in GitHub Desktop.
行灯人気投票集計スクリプト
require 'csv'
classes = {}
file = ARGV[1]
GENEKI = '現役生'
OBOG = 'OBOG'
OTHER = 'その他'
CSV.foreach(file) do |row|
id = row[2]
c = classes[id] || { vote: 0, type: {GENEKI => 0, OBOG => 0, OTHER => 0}, comments: [] }
classes[id] = {
vote: c[:vote] + 1,
type: {
GENEKI => c[:type][GENEKI] + (if row[1] == GENEKI then 1 else 0 end),
OBOG => c[:type]['OBOG'] + (if row[1] == OBOG then 1 else 0 end),
OTHER => c[:type][OTHER] + (if row[1] == OTHER then 1 else 0 end)
},
comments: c[:comments] + [row[3]]
}
end
classes = classes.map do |key, val|
val[:id] = key
val
end
classes.sort_by! do |c|
grade = 3 - c[:id][0].to_i
clazz = c[:id][2].to_i
[-c[:vote], grade, clazz]
end
count = 0
rank = 1
last_vote = nil
classes.each do |c|
count += 1
if !last_vote || c[:vote] < last_vote
rank = count
end
last_vote = c[:vote]
c[:rank] = rank
end
puts '# 67th人気投票結果'
puts ''
puts '毎年恒例となった行灯人気投票です。今回も「最も良かった行灯」のみで投票いただきました。'
puts ''
puts ''
puts '## 結果発表'
puts ''
puts '| 順位 | クラス | 票数 (現役生, OBOG, その他) |'
puts '| ---- | ------ | --------------------------- |'
classes.each do |c|
puts "| #{c[:rank]} | #{c[:id]} | #{c[:vote]} (#{c[:type][GENEKI]}, #{c[:type][OBOG]}, #{c[:type][OTHER]}) |"
end
puts ''
puts ''
puts '## コメント'
classes.each do |c|
puts ''
puts "### #{c[:rank]}位 #{c[:id]}"
puts ''
puts '| コメント |'
puts '| -------- |'
c[:comments].each do |comment|
puts "| #{comment.gsub(/\n/, '<br>')} |"
end
end
puts ''
puts '今年は102名の方にご投票いただきました。ありがとうございました!'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment