Created
March 24, 2011 12:47
-
-
Save Ankhbayar/884998 to your computer and use it in GitHub Desktop.
Эерэг бүхэл Тоог монгол хэллэгрүү хөрвүүлэх script
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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