SQL
同じデータベースを使う(取得する条件だけが徐々に複雑になっていく)のが面白く感じました。
魔法使いの街(d1)
SELECT id, name FROM Hell;
果ての平原(d2)
SELECT id, name, str FROM Hell ORDER BY str DESC LIMIT 5;
砂漠のオアシス(c1)
SELECT id, name, cost FROM Hell WHERE cost <= 10;
禁断の洞窟(c2)
SELECT Hell.id, Hell.name, Element.name AS element FROM Hell
INNER JOIN Element ON Hell.element_id = Element.id
WHERE Element.name = "Earth";
精霊の村(b1)
SELECT Hell.id, Hell.name, Element.name AS element, Grade.name AS grade FROM Hell
INNER JOIN Element ON Hell.element_id = Element.id
INNER JOIN Grade ON Hell.grade_id = Grade.id
WHERE Element.name = "Air" AND Grade.name = "Boss";
獣の足跡(a1)
SELECT Hell.id, Hell.name, Element.name AS element, Grade.name AS grade FROM Hell
INNER JOIN Element ON Hell.element_id = Element.id
INNER JOIN Grade ON Hell.grade_id = Grade.id
WHERE Grade.name = "Boss" AND Element.id in (
SELECT ElementCompatibility.weakness_element_id FROM Hell
INNER JOIN Element ON Hell.element_id = Element.id
INNER JOIN ElementCompatibility ON Element.id = ElementCompatibility.element_id
WHERE Hell.name = "Graffiacane"
);
CODE
原初の村(d1)
#!/usr/bin/ruby
puts'hello'*gets.to_i
氷の城(d2)
#!/usr/bin/ruby
n=gets.to_i
puts n>0 ? n : :freeze
火山島(c1)
#!/usr/bin/ruby
SIZES=%w(SS S M L LL)
n=gets.to_i
v=gets.split.map &:to_i
v.unshift v[0]/2
v.push v[-1]*2
r=0
n.times{r+=v[SIZES.index gets.chomp]}
p r
大海の渦(b1)
#!/usr/bin/ruby
n,x,*d=`dd`.split.map &:to_i
d<< 0
r=[x]
(n-1).times{|i|
d[i]-=r[-1]
d[i+1]-=r[-1]
r<< d[i]
}
puts r*' '
龍の頭(a1)
島ごとにその島を囲む矩形を算出し、その矩形と島の形が一致していれば良い。
#!/usr/bin/ruby
h,w=gets.split.map &:to_i
m=['W'*(w+2)]+h.times.map{'W'+gets.chomp+'W'}+['W'*(w+2)]
r=0
(1..h).each{|y0|(1..w).each{|x0|
if m[y0][x0]=='B'
q=[[y0,x0]]
v=[[y0,x0]]
m[y0][x0]='G'
while !q.empty?
y, x = q.shift
[[-1, 0], [1, 0], [0, -1], [0, 1]].each{|dy,dx|
ny = y + dy
nx = x + dx
if m[ny][nx]=='B'
q<<[ny,nx]
v<<[ny,nx]
m[ny][nx]='G'
end
}
end
ym, yM = v.map(&:first).minmax
xm, xM = v.map(&:last).minmax
next if (ym..yM).any?{|y_|(xm..xM).any?{|x_|
m[y_][x_]=='W'
}}
r+=1
end
}}
p r
暗黒の地(s1)
だめですねこりゃ^^;;;
(杭の順番を変更できるならソートするだけで交差を減らすことが普通にできる)
#!/usr/bin/ruby
n,k=gets.split.map &:to_i
v=(1..n).map{|i|gets.split.map(&:to_i)+[i]}
p 0
# 既存の杭の順番は変更できないのか〜
puts *1..n