できる人のおちんぎんあっぷ
締め切りが 2017/03/16 10:00 AM なので,その 1 分後に投稿されるように予約
ここは株式会社 人月査定。
人月査定では、開発者の離職が課題になっていました。
調査してみると、優秀な開発者から順に離職していることがわかりました。
その原因を調査すると、どうやら多くの成果物を生み出す優秀な開発者とほとんど成果物を生み出していない開発者の給与が全く同じであるためでした。
そこで人月査定では成果主義による評価制度を導入することを決定しました。
社名も株式会社 ステップ数見積もり に変更です。
こうして社内特命プロジェクト「おちんぎんあっぷ大作戦」が始動しました。
「ステップ数見積もり社」ではバージョン管理ツールKit(きっと)でプログラムの履歴管理をしています。
Kitの履歴をもとに「どの開発者が何%の成果物を仕上げているか?」を調べてください。
Kitの履歴は1ファイル1行単位で残ります。
1つの履歴を保存することをコミットと呼びます。
コミット履歴は20件しか残りません。仕様です。
標準入力
Kitの履歴が標準入力されます
・コミットした開発者名、ファイル名がカンマ区切りで入力されます
・コミットした開発者名は [a-z] の文字列で構成されます
・コミットした開発者名は 3-8 文字です
・開発対象は「hoge.rb hige.rb hage.rb hoo.rb bar.rb」の5ファイルです
・入力データは20件
例(サンプルのため入力が3件ですが、実際は20件入力されます)
horiuchi,hoge.rb
hironaka,hige.rb
kondo,hoo.rb
標準出力
・出力形式は コミットした開発者名 + 半角コロン(:) + コミットしたファイルのパーセンテージ + 半角パーセント(%) です
・パーセンテージは小数点以下を切り捨ててください
例(標準入力の説明の入力が行われた場合の出力結果)
hironaka:33%
horiuchi:33%
kondo:33%
その他の仕様
・標準入力の末尾には改行があります
・標準出力の末尾に改行をつけてください
・同じファイルを複数の開発者が更新した場合、最後にファイルを更新した人がその成果物を仕上げた人としてください
例えば hoge.rb を tanaka さん、 suzuki さん、 sato さんの順番で更新していたら
hoge.rb の開発者は sato さんとして集計します
・標準入力の後半の行に出たほうが後から更新しているものとします
・標準入力の仕様で説明した内容以外の入力は行われません(不正入力に対するチェックは不要)
======================================================
素直に書くしかない
f = function(S) {
m = sapply(S, function(s) unlist(strsplit(s, ",")))
n = ncol(m)
PROG = sort(unique(m[2,]))
nProg = length(PROG)
who = integer(nProg)
for (j in seq_along(PROG)) {
prog = PROG[j]
for (i in seq_len(n)) {
if (m[2, i] == prog) {
who[j] = m[1, i]
}
}
}
who = table(who)
invisible(mapply(function(x, y) cat(sprintf("%s:%i%%\n", x, y)), names(who), floor(who/nProg*100)))
}
f(readLines(file("stdin", "r")))
[input] [output]
mashimo,hoge.rb ara:40%
hakuryu,bar.rb hakuryu:20%
hironaka,hoge.rb horiuchi:20%
kondo,hige.rb kondo:20%
kuga,hige.rb
kondo,hoo.rb
hano,hige.rb
hamakawa,hoge.rb
kuga,hige.rb
hakuryu,hage.rb
hironaka,bar.rb
horiuchi,bar.rb
hakuryu,hoo.rb
ara,bar.rb
horiuchi,hage.rb
hironaka,hoo.rb
kuga,hoge.rb
hakuryu,hoo.rb
ara,hoge.rb
kondo,hige.rb
[input] [output]
hironaka,hoge.rb ara:20%
horiuchi,hoo.rb hada:20%
mashimo,hoo.rb hakuryu:20%
hano,hige.rb hamakawa:20%
hironaka,hage.rb kondo:20%
hada,hoo.rb
hano,hige.rb
ara,hoge.rb
kondo,hige.rb
hamakawa,bar.rb
hakuryu,hage.rb
kondo,hige.rb
mashimo,hoo.rb
hamakawa,hoo.rb
kondo,hoge.rb
kuga,hoo.rb
ara,hige.rb
hamakawa,bar.rb
hada,hoge.rb
kondo,hoo.rb
[input] [output]
hakuryu,hoo.rb hamakawa:60%
hironaka,bar.rb hironaka:40%
hakuryu,hoo.rb
hakuryu,hige.rb
hamakawa,hage.rb
hironaka,bar.rb
hironaka,hige.rb
hironaka,hige.rb
hironaka,hige.rb
hakuryu,bar.rb
hano,hoo.rb
hamakawa,hige.rb
kuga,bar.rb
kuga,hige.rb
kuga,hoo.rb
hamakawa,hoge.rb
hironaka,hige.rb
hamakawa,hoo.rb
ara,bar.rb
hironaka,bar.rb