Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

凸？

平面上の異なる 4 点　$A (x_a, y_a)$, $B (x_b, y_b)$, $C (x_c, y_c)$, $D(x_d, y_d)$ の座標を読み込んで、それら 4 点を頂点とした四角形 $ABCD$ に凹みがなければ YES、凹みがあれば NO と出力するプログラムを作成してください。

凹みのある四角形とは図 1 のような四角形です。

Input

複数のデータセットが与えられます。各データセットの形式は以下のとおりです。

$x_a$,$y_a$,$x_b$,$y_b$,$x_c$,$y_c$,$x_d$,$y_d$

$x_a$, $y_a$, $x_b$, $y_b$, $x_c$, $y_c$, $x_d$, $y_d$ はそれぞれ -100 以上 100 以下であり、実数で与えられます。

1 直線上に 3 つ以上点が並ぶことはないものとします。また、入力順に点を結んでいけば、四角形になる順番に点の座標が入力されるものとします。（つまり、図 2 のような形になる順番で点が与えられることはありません。)

データセットの数は 100 を超えません。

Output

各データセットごとに、YES または NO を１行に出力します。

Sample Input

0.0,0.0,1.0,0.0,1.0,1.0,0.0,1.0
0.0,0.0,3.0,0.0,1.0,1.0,1.0,3.0

Output for the Sample Input

YES
NO

Solution in Ruby (judge verdict: Accepted)

def foo
  while input = gets
    x1, y1, x2, y2, x3, y3, x4, y4 = input.split(',').map(&:to_f)
    v31 = [x3-x1, y3-y1]
    v21 = [x2-x1, y2-y1]
    cp1 = v31[0] * v21[1] - v31[1] * v21[0]

    v42 = [x4-x2, y4-y2]
    v32 = [x3-x2, y3-y2]
    cp2 = v42[0] * v32[1] - v42[1] * v32[0]

    v13 = [x1-x3, y1-y3]
    v43 = [x4-x3, y4-y3]
    cp3 = v13[0] * v43[1] - v13[1] * v43[0]

    v24 = [x2-x4, y2-y4]
    v14 = [x1-x4, y1-y4]
    cp4 = v24[0] * v14[1] - v24[1] * v14[0]

    cps = [cp1, cp2, cp3, cp4]
    puts cps.all? { |i| i < 0 } || cps.all? { |i| i > 0 } ? 'YES' : 'NO'
  end
end

foo