Exemple #1
0
def main(filename=None):
    if filename is None:
        if len(sys.argv) == 2:
            filename = sys.argv[1]
        else:
            print("Usage: runme.py input_file")
            return 1
    with open(filename, "r") as f:
        num_cases = read_int(f)
        for i, line in enumerate(f, 1):
            parts = line.split()
            C = int(parts[0])
            combination_rules = parts[1:C+1]
            opposition_rules = parts[C+2:-2]
            elements_to_invoke = parts[-1]
            wizard = MagickaWizard(combination_rules, opposition_rules)
            wizard.invoke_elements(elements_to_invoke)
            print("Case #{0}: {1}".format(i, wizard.element_list_as_string()))
    return 0
 def setUp(self):
     combination_rules = ["ABC", "DEF"]
     opposition_rules = ["AB", "AD"]
     self.wizard = MagickaWizard(combination_rules, opposition_rules)
class TestMagickaWizard(unittest.TestCase):
    """
    Unit Tests for the Magicka problem MagickaWizard class
    for Google Code Jam 2011
    Qualification
    """
    
    def setUp(self):
        combination_rules = ["ABC", "DEF"]
        opposition_rules = ["AB", "AD"]
        self.wizard = MagickaWizard(combination_rules, opposition_rules)
    
    def test_init(self):
        self.assertEqual(self.wizard.element_list, [])
        d1 = {"AB":"C", "BA":"C", "DE":"F", "ED":"F"}
        self.assertEqual(self.wizard._combination_result, d1)
        d2 = {"A":set(("B", "D")), "B":set("A"), "D":set("A")}
        self.assertEqual(self.wizard._opposites_of, d2)
    
    def test_can_be_combined(self):
        self.assertTrue(self.wizard._can_be_combined("A", "B"))
        self.assertTrue(self.wizard._can_be_combined("B", "A"))
        self.assertTrue(self.wizard._can_be_combined("D", "E"))
        self.assertFalse(self.wizard._can_be_combined("A", "D"))
        self.assertFalse(self.wizard._can_be_combined("X", "Y"))
    
    def test_an_opposite_exists(self):
        self.wizard.element_list = ["D"]
        self.assertTrue(self.wizard._an_opposite_exists("A"))
        self.wizard.element_list = ["A"]
        self.assertTrue(self.wizard._an_opposite_exists("B"))
        self.assertFalse(self.wizard._an_opposite_exists("X"))
    
    def test_invoke_element(self):
        self.wizard.invoke_element("A")
        self.assertEqual(self.wizard.element_list, ["A"])
        self.wizard.invoke_element("B")
        self.assertEqual(self.wizard.element_list, ["C"])
        self.wizard.invoke_element("A")
        self.wizard.invoke_element("X")
        self.wizard.invoke_element("B")
        self.assertEqual(self.wizard.element_list, [])
    
    def test_element_list_as_string(self):
        self.assertEqual(self.wizard.element_list_as_string(), "[]")
        self.wizard.invoke_element("G")
        self.assertEqual(self.wizard.element_list_as_string(), "[G]")
        self.wizard.invoke_elements("HI")
        self.assertEqual(self.wizard.element_list_as_string(), "[G, H, I]")