Skip to content

Instantly share code, notes, and snippets.

@Ankhbayar
Created March 24, 2011 12:47
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save Ankhbayar/884998 to your computer and use it in GitHub Desktop.
Save Ankhbayar/884998 to your computer and use it in GitHub Desktop.
Эерэг бүхэл Тоог монгол хэллэгрүү хөрвүүлэх script
#coding:utf-8
# By: @ankhaatk
import types
def find_omnoh_oron(number, numberArray):
""" Ойролцоох тоог жагсаалтаас олох
"""
min_diff = 999999
last_num = 0
for num in numberArray:
diff = abs(num - number)
if diff < min_diff and number <= num :
min_diff = diff
last_num = num
return last_num
def tooToStr(value, noneVal = ""):
"""
Бүхэл тоог үсгээр илэрхийлэх.
Зохиогч : @ankhaatk
Нэршилийг татаж авсан эх сурвалж.
http://sprinter.miniih.com/index.php/home/post/52
"""
dic_dan_too = {
#орон "дунд орох", "Адагт орох"
'0' : (u"", u""),
'1' : (u"нэг", u"нэг" ),
'2' : (u"хоёр", u"хоёр",),
'3' : (u"гурван", u"гурав", ),
'4' : (u"дөрвөн", u"дөрөв", ),
'5' : (u"таван", u"тав", ),
'6' : (u"зургаан", u"зургаа", ),
'7' : (u"долоон", u"долоо", ),
'8' : (u"найман", u"найм", ),
'9' : (u"есөн", u"ес", ),
}
dic_orongiin_too = {
#орон "дунд орох", "Адагт орох"
1: ( # Тусгай нэршилтэй орон
[u"", u"нэгэн", u"хоёр", u"гурван", u"дөрвөн", u"таван",u"зургаан", u"долоон", u"найман", u"есөн" ],
[u"", u"нэг", u"хоёр", u"гурав", u"дөрөв", u"тав", u"зургаа", u"долоо", u"найм", u"ес",],
0
),
2: ( # Тусгай нэршилтэй орон
["", u"арван",u"хорин",u"гучин",u"дөчин",u"тавин",u"жаран", u"далан", u"наян",u"ерэн",],
["", u"арав",u"хорь",u"гуч",u"дөч",u"тавь",u"жар", u"дал", u"ная",u"ер",],
1
),
3: (u"зуун", u"зуун", 3),
4: (u"мянга", u"мянган", 1 ),
7: (u"сая", u"сая", 3 ),
10: (u"тэр бум", u"Тэр бум", 3 ),
12: (u"наяд", u"их наяд", 2 ),
14: (u"маш дэлгэмэл", u"маш дэлгэмэл", 2 ),
16: (u"тунамал", u"тунамал", 2 ),
#17: (u"их тунамал", u"их тунамал", 1 ),
18: (u"ингүүмэл", u"ингүүмэл", 2 ),
#19: (u"их ингүүмэл", u"их ингүүмэл", 1 ),
20: (u"хямралгүй", u"хямралгүй", 2 ),
22: (u"ялгаруулагч", u"ялгаруулагч", 2 ),
24: (u"өвөр дээр", u"өвөр дээр", 2 ),
26: (u"хөөн удирдагч", u"хөөн удирдагч", 2 ),
28: (u"хязгаар үзэгдэл", u"хязгаар үзэгдэл", 2 ),
30: (u"шалтгааны зүйл", u"шалтгааны зүйл", 2 ),
32: (u"үзэсгэлэнт гэрэл", u"үзэсгэлэнт гэрэл", 2 ),
34: (u"эрхэт", u"эрхэт", 2 ),
36: (u"сайтар хүргэсэн", u"сайтар хүргэсэн", 2 ),
38: (u"онон одох", u"онон одох", 2 ),
40: (u"живэх тоосон", u"живэх тоосон", 2 ),
42: (u"бэлэг тэмдэг", u"бэлэг тэмдэг", 2 ),
44: (u"хүчин нөхөр", u"хүчин нөхөр", 2 ),
46: (u"дохио мэдэхгүй", u"дохио мэдэхгүй", 2 ),
48: (u"тийн болсон", u"тийн болсон", 2 ),
50: (u"хүчин нүдэн", u"хүчин нүдэн", 2 ),
52: (u"асрангуй", u"асрангуй", 2 ),
54: (u"нигүүлсэнгүй", u"нигүүлсэнгүй", 2 ),
56: (u"баясангуй", u"баясангуй", 2 ),
58: (u"тэгш", u"тэгш", 2 ),
60: (u"тоомьгүй", u"тоомьгүй", 2 ),
61: (u"хэмжээлшгүй", u"хэмжээлшгүй", 1 ),
62: (u"цаглашгүй", u"цаглашгүй", 1 ),
63: (u"өгүүлэшгүй", u"өгүүлэшгүй", 1 ),
64: (u"хирлэшгүй", u"хирлэшгүй", 1 ),
65: (u"үлэж дуусашгүй", u"үлэж дуусашгүй", 1 ),
66: (u"сэтгэшгүй", u"сэтгэшгүй", 1 ),
# Үүнээс цааш газар үгүй :)
}
if value is None:
return noneVal
# TODO: Бүхэл тоо эсэхийг шалгах
input_str = str(value)
degit_keys = dic_dan_too.keys()
oron_keys = dic_orongiin_too.keys()
out_strs = []
oron = len(input_str)
oron_keys.sort()
oron_keys.reverse()
zero_flag = False
for too in input_str:
if oron in oron_keys:
(dund, adagt, space) = dic_orongiin_too.get(oron)
space_pos = 0
else:
(dund, adagt, space) = (None, None, None)
omnoh_oron = find_omnoh_oron(oron, oron_keys )
if omnoh_oron in oron_keys:
space = dic_orongiin_too.get(omnoh_oron)[2]
space_pos = space - abs(omnoh_oron - oron) + 1
if space_pos in oron_keys:
(dund, adagt, space) = dic_orongiin_too.get(space_pos)
if oron == 1:
catch = 1
oron_data = adagt
else:
catch = 0
oron_data = dund
if too is not '0':
if type(oron_data) in types.StringTypes :
if too in degit_keys:
out_strs.append( dic_dan_too.get(too)[catch])
out_strs.append ( oron_data )
elif type(oron_data) in [ types.ListType, types.TupleType] :
out_strs.append ( oron_data[int(too)] )
else:
dic_dan_too.get(too)[catch]
zero_flag = True
# олон тэг үргэлжлэх үед нэг нэршилүүдийг нэмэх
elif type(oron_data) in types.StringTypes and space_pos == 0 and zero_flag == True:
out_strs.append ( oron_data )
zero_flag = False
oron -= 1
return str(value) + " " + u" ".join(out_strs)
#print tooToStr(15)
#for i in range(1,100):
# print tooToStr(i)
#for i in range(90,200):
# print tooToStr(i)
#print tooToStr(1015)
#for i in range(990,1100):
# print tooToStr(i)
print tooToStr( 1058738 ) # нэг сая тавин найман мянга долоон зуун гучин найм
#print tooToStr( 100058738 ) # нэг зуун сая тавин найман мянга долоон зуун гучин найм
print tooToStr( 100158738 ) # нэг зуун сая зуун тавин найман мянга долоон зуун гучин найм
print tooToStr( 1000000058738 ) # арван наяд тавин найман мянга долоон зуун гучин найм
#print tooToStr( 1000000000058738 )
#print tooToStr( 123123123123123132123123 )
#print tooToStr(1329227995784915872903807060280344576) # 2^120
print tooToStr(800000)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment