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)

class Vector
  attr_accessor :x, :y
  
  def initialize(x = 0, y = 0)
    @x = x
    @y = y
  end

  def cross(v)
    return (@x * v.y - @y * v.x)
  end

  def -(v)
    return Vector.new(@x - v.x, @y - v.y)
  end
end

class Line
  attr_accessor :a, :b

  def initialize(a, b)
    @a = a
    @b = b
  end

  def intersect?(l)
    if (b - a).cross(l.a - a) * (b - a).cross(l.b - a) < 0 &&
      (l.b - l.a).cross(a - l.a) * (l.b - l.a).cross(b - l.a) < 0
      return true
    end
  end
end

if __FILE__ == $0
  while line = gets
    xa, ya, xb, yb, xc, yc, xd, yd = line.split(',').map{|i| i.to_f}
    a = Vector.new(xa, ya)
    b = Vector.new(xb, yb)
    c = Vector.new(xc, yc)
    d = Vector.new(xd, yd)

    ac = Line.new(a, c)
    bd = Line.new(b, d)

    if ac.intersect?(bd)
      puts "YES"
    else
      puts "NO"
    end
  end
end