Advertisement
HyawehHoshikawa

Untitled

Nov 28th, 2014
170
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.47 KB | None | 0 0
  1. from random import randint
  2. def satuan(x):
  3.     return ["", "satu", "dua", "tiga", "empat", "lima", "enam", "tujuh", "delapan", "sembilan"][x]
  4.  
  5. def special(spc):    
  6.     def partial(x):
  7.         if x == 0:
  8.             return ""
  9.         if x == 1:            
  10.             return ''.join(["se", spc])
  11.         else:
  12.             return ' '.join([satuan(x), spc])            
  13.     return partial
  14.  
  15. def spell(val, baseline="ribu"):
  16.     belasan = special("belas")
  17.     specials = [special(x) for x in ["", "puluh", "ratus", baseline]]
  18.     if val in ["", "0"]:        
  19.         return ""    
  20.     if int(val) < 10:
  21.         return satuan(int(val)) + " "
  22.     if 10 < int(val) < 20:
  23.         return belasan(int(val) % 10) + " "
  24.  
  25.     return ' '.join([specials[len(val) - 1](int(val[0])), spell(val[1:])])
  26.  
  27. def lazyCleaner(s):
  28.     return ' '.join([_ for _ in s.split(" ") if _ != ""])
  29.  
  30. def spellExpand(VAL):
  31.     if VAL == "0":
  32.         return "nol"
  33.     baseline = ["", "ribu", "juta", "milyar", "triliyun"][:len(VAL) / 3 + 1]
  34.     slc = [0] + [_ for _ in reversed(range(len(VAL), 0, -3))]
  35.     vals = [VAL[slc[i]:slc[i+1]] for i in xrange(len(slc) - 1)]
  36.     spells = [''.join([spell(val), base]) for val, base in zip(vals, reversed(baseline))]    
  37.     return lazyCleaner(' '.join(spells)).replace("satu ribu", "seribu")
  38.  
  39. def testing():    
  40.     for _ in xrange(10):
  41.         v = 1001001
  42.         print spellExpand(str(v))
  43.         print
  44.  
  45. if __name__ == '__main__':
  46.     testing()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement