forked from 4geru/atcoder-solved
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.rb
101 lines (97 loc) · 1.76 KB
/
app.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
require 'sinatra'
require 'net/http'
require 'uri'
require 'json'
get '/' do
@users = [
'rika0384',
'yoshikawa1118',
'shield_remon',
'ixmel_rd',
'tuki_remon',
'noy72',
'uchi',
'Yazaten',
'yuiop',
'yebityon'
]
@contests = problems
@solved = Hash[solved(copy(@users)).sort_by { |k, v| v.length }.reverse]
puts @solved
@users = @solved.keys
erb :problems
end
get '/solved/:id' do
@users = [
'rika0384',
'yoshikawa1118',
'shield_remon',
'ixmel_rd',
'tuki_remon',
'noy72',
'uchi',
'Yazaten',
'yuiop',
'yebityon'
]
@contests = problems
@solved = solved(@users)
@users = [
'rika0384',
'yoshikawa1118',
'shield_remon',
'ixmel_rd',
'tuki_remon',
'noy72',
'uchi',
'Yazaten',
'yuiop',
'yebityon'
]
@users = @users.sort_by{|user| -@solved[user].length }.map{ | user| user }
case params[:id].to_i
when 1 then
erb :abc
when 2 then
erb :arc
when 3 then
erb :agc
when 4 then
erb :other
end
end
def copy(users)
Marshal.load(Marshal.dump(users))
end
def problems
ary = []
uri = URI.parse('http://kenkoooo.com/atcoder/json/problems.json')
json = Net::HTTP.get(uri)
results = JSON.parse(json)
for result in results do
ary.push({
contest: result['contest'],
id: result['id'],
name: result['name']
})
end
ary
end
def solved(users)
ary = {}
user_str = ""
users.map! {|user|
user_str += user + ','
ary[user] = []
}
# get problems
uri = URI.parse('http://kenkoooo.com/atcoder-api/problems?rivals=' + user_str)
json = Net::HTTP.get(uri)
results = JSON.parse(json)
results.map! {|problem|
problem["rivals"].map! { |rival|
ary[rival].push(problem["id"])
}
}
ary
end