SHARE
TWEET

mirror.py

a guest Aug 12th, 2014 316 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. class OffsetMirrorSet(object):
  2.         """
  3.         A class to compute the grammar description of mirrors.
  4.        
  5.         c.f. http://puzzling.stackexchange.com/a/2059/1779
  6.         """
  7.         def __init__(self, f, u, v):
  8.                 terminal = []
  9.                 non_terminal = []
  10.                 #First we look for 1 digit terminals
  11.                 for i in xrange(10):
  12.                         if i * f + v - u * 10 == i:
  13.                                 terminal.append(str(i))
  14.                
  15.                 #If it's not a 1 digit number then it has at least 2:
  16.                 for a0 in xrange(10):
  17.                         for an in xrange(10):
  18.                                 right = a0 * f + v - an
  19.                                 left = u *10 + a0 - an * f
  20.                                 if right % 10 == 0 and left >= 0 and left < f:
  21.                                         new_u = left
  22.                                         new_v = right / 10
  23.                                        
  24.                                         #can it be a 2 digit terminal ?
  25.                                         if new_u == new_v:
  26.                                                 terminal.append(str(an) + str(a0))
  27.                                        
  28.                                         non_terminal.append( (str(an), (new_u, new_v), str(a0)) )
  29.                
  30.                 self.info = (f, u, v)
  31.                 self.terminal = terminal
  32.                 self.non_terminal = non_terminal
  33.        
  34.         def __repr__(self):
  35.                 f = self.info[0]
  36.                 return (("S_%d(%d, %d) = " %self.info)
  37.                         + " + ".join(self.terminal) + " + "
  38.                         + " + ".join("%s.S_%d(%d, %d).%s" %(a,f,u,v,b) for (a,(u,v),b) in self.non_terminal))
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top