/ 2.py
2.py
 1  #!/usr/bin/python3
 2  
 3  # run it as
 4  # ./2.py [ --one | --two ] < inputs/2
 5  
 6  import sys
 7  
 8  # fucking ugly
 9  # should have normalized input data
10  
11  CAN_DESTROY = {'A': 'Z',
12                 'B': 'X',
13                 'C': 'Y',
14                 'X': 'C',
15                 'Y': 'A',
16                 'Z': 'B'}
17  REVERSED_DESTROY = {value: key for key, value in CAN_DESTROY.items()}
18  VALUE = {'X': 1,
19           'Y': 2,
20           'Z': 3,
21           'A': 1,
22           'B': 2,
23           'C': 3}
24  
25  def compare(opponent, me):
26      if CAN_DESTROY[me] == opponent:
27          return 6
28      elif CAN_DESTROY[opponent] == me:
29          return 0
30      else:
31          return 3
32  
33  def calc_round(opponent, desired_outcome):
34      if desired_outcome == 'X':
35          # do lose.
36          me = [x for x in ('X', 'Y', 'Z') if x != REVERSED_DESTROY[opponent] and
37              VALUE[x] != VALUE[opponent]][0]
38          return VALUE[me]
39      elif desired_outcome == 'Y':
40          # a draw
41          return VALUE[opponent] + 3
42      elif desired_outcome == 'Z':
43          # do win
44          me = REVERSED_DESTROY[opponent]
45          return VALUE[me] + 6
46  
47  if '--one' in sys.argv:
48      print(sum([compare(*line.split()) + VALUE[line.split()[1]] for line in sys.stdin]))
49  elif '--two' in sys.argv:
50      print(sum([calc_round(*line.split()) for line in sys.stdin]))