#!/usr/local/bin/ruby class Game attr :vertices attr :edges def initialize(vertices = 0, edges = Hash.new {|h, k| h[k] = Hash.new {0} }) @vertices = vertices @edges = edges end def grow(a, b) c = @vertices @vertices += 1 @edges[a][c] += 1 @edges[c][b] += 1 if a != b @edges[c][a] += 1 @edges[b][c] += 1 end end def legal_tie?(a, b) end def progress 0.upto(@vertices - 1) .select {|v| @edges[v].values.reduce(:+) < 3 } .combination(2).select{|a, b| legal_tie?(a, b) } .map {|a, b| grow(a, b) } end def winnable? progress.any? {|games| games.all?(:winnable?) } end end