Problem:
投石おみくじ

「自分の道は自分で切り開く」をモットーに、ある神社が自分自身の手で運勢を決めるおみくじを作りました。そのおみくじを引く人にはまず6つの石を投げてもらい、その投げた石の一つ目と二つ目を結ぶ 線分、三つ目と四つ目を結ぶ 線分、五つ目と六つ目を結ぶ 線分の3本の線分の交点を頂点とする 三角形の面積から運勢を決めるというものです。各運勢と三角形の面積との関係は以下のとおりです。

線分の交点を頂点とする三角形の面積

運勢

1,900,000以上

大吉 (dai-kichi)

1,000,000以上1,900,000未満

中吉 (chu-kichi)

100,000以上1,000,000未満

吉 (kichi)

0より大きく 100,000未満

小吉 (syo-kichi)

三角形なし

凶 (kyo)

しかし、三角形の面積の大きさの判定は神主さんが手計算でやっているので正確とはいえず、時間もかかってしまいます。そこで近所に住む優秀なプログラマであるあなたは、一刻でも早くプログラムを書いて神主さんを助けてあげることにしました。

3 本の線分の情報を入力とし、線分の交点を頂点とする 三角形の面積から運勢を出力するプログラムを作成してください。線分の情報は始点の座標 (x1, y1) と、終点の座標 (x2, y2) が与えられ、始点と終点の座標は必ず異なることとします。また、2 つ以上の線分が同一直線上にある場合、交点を持たない 2 つの線分がある場合、3 つの線分が 1 点で交わる場合は、「三角形なし」となります。

Input

複数のデータセットの並びが入力として与えられます。入力の終わりはゼロ4つの行で示されます。
各データセットは以下の形式で与えられます。

line1
line2
line3

i 行目に i 番目の線分の情報が与えられます。各線分の情報は以下の形式で与えられます。

x1 y1 x2 y2

線分の端点の座標を表す整数 (x1, y1), (x2, y2) (-1000 ≤ x1, y1, x2, y2 ≤ 1000 ) が空白区切りで与えられます。

Output

データセット毎に、おみくじの結果を１行に出力します。

Sample Input

-3 -2 9 6
3 -2 7 6
-1 0 5 0
2 2 -1 -1
0 1 2 1
-3 -1 3 1
0 0 0 0

Output for the Sample Input

syo-kichi
kyo

Solution in Ruby (judge verdict: Wrong Answer)

### constant

DELTA = 1.0e-8

### subroutines

def cross(l1, l2)
  x1, y1 = l1[0..1]
  x2, y2 = l1[2..3]
  x3, y3 = l2[0..1]
  x4, y4 = l2[2..3]

  d = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1)
  return nil if d.abs < DELTA

  k = (y4 - y3) * (x4 - x1) - (x4 - x3) * (y4 - y1)
  e = -(y2 - y1) * (x4 - x1) + (x2 - x1) * (y4 - y1)

  s = k / d
  t = e / d
  return nil if s < 0 || s > 1 || t < 0 || t > 1

  [(x2 - x1) * s + x1, (y2 - y1) * s + y1]
end

def eqpt(p1, p2)
  (p2[0] - p1[0]).abs < DELTA && (p2[1] - p1[1]).abs < DELTA
end

### main

while true
  line = gets.strip
  break if line == '0 0 0 0'

  l1 = line.split(' ').map{|s| s.to_f}
  l2 = gets.split(' ').map{|s| s.to_f}
  l3 = gets.split(' ').map{|s| s.to_f}

  c1 = cross(l1, l2)
  c2 = cross(l2, l3)
  c3 = cross(l3, l1)

  if c1.nil? || c2.nil? || c3.nil? || (eqpt(c1, c2) && eqpt(c1, c3))
    puts 'kyo'
  else
    v1 = [c2[0] - c1[0], c2[1] - c1[1]]
    v2 = [c3[0] - c1[0], c3[1] - c1[1]]
    s = (v1[0] * v2[1] - v1[1] * v2[0]).abs / 2

    if s >= 1900000
      puts 'dai-kichi'
    elsif s >= 1000000
      puts 'chu-kichi'
    elsif s >= 100000
      puts 'kichi'
    else
      puts 'sho-kichi'
    end
  end
end