Skip to content

Instantly share code, notes, and snippets.

@kostasdizas
Created September 10, 2016 21:45
Show Gist options
  • Save kostasdizas/7b3b3676cfc344f6e7e613889c565816 to your computer and use it in GitHub Desktop.
Save kostasdizas/7b3b3676cfc344f6e7e613889c565816 to your computer and use it in GitHub Desktop.
Greek number word length chains
# coding=utf-8
import matplotlib.pyplot as plt
def numToWords(num, join=True):
'''words = {} convert an integer number into words'''
units = ['','ένα','δύο','τρία','τέσσερα','πέντε','έξι','επτά','οκτώ','εννέα']
teens = ['','έντεκα','δώδεκα','δεκατρία','δεκατέσσερα','δεκαπέντε','δεκαέξι', \
'δεκαεπτά','δεκαοκτώ','δεκαεννέα']
tens = ['','δέκα','είκοσι','τριάντα','σαράντα','πενήντα','εξήντα','εβδομήντα', \
'ογδόντα','ενενήντα']
hundreds = ['', 'εκατόν', 'διακόσια', 'τριακόσια', 'τετρακόσια', 'πεντακόσια', \
'εξακόσια', 'επτακόσια', 'οκτακόσια', 'εννιακόσια']
thousands = ['','χιλιάδες','εκατομμύρια','δισεκατομμύρια','τρισεκατομμύρια', \
'τετράκις εκατομμύρια']
words = []
if num == 0:
words.append('μηδέν')
else:
number = str(num)
number_len = len(number)
groups = (number_len + 2) // 3
number = number.zfill(groups * 3)
for i in range(0, groups * 3, 3):
h, t, u = int(number[i]), int(number[i + 1]), int(number[i + 2])
g = groups - (i // 3 + 1)
if h >= 1:
if g == 1:
words.append("{}ες".format(hundreds[h][:-2]))
else:
words.append(hundreds[h])
if t > 1:
words.append(tens[t])
if u >= 1: words.append(units[u])
elif t == 1:
if u>=1: words.append(teens[u])
else: words.append(tens[t])
else:
words.append(units[u])
if g >= 1 and h + t + u > 0:
if g > 1 and h + t + u == 1:
words.append("{}ο".format(thousands[g][:-2]))
else:
words.append(thousands[g])
if join:
return "".join(words)
return words
def number_to_words_list_to_length(number):
words = numToWords(n, False)
sum = 0
for i, word in enumerate(words):
x = len(word) * (10 ** i)
sum += x
print(sum)
return sum
if __name__ == '__main__':
longest = 0
longest_n = 0
longest_chain = None
ends = {0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0}
for n in range(100):
n_orig = n
reached_end = False
chain = []
while not reached_end:
words = numToWords(n)
n = len(words)
# n = number_to_words_list_to_length(words)
# print(n, words)
chain.append(n)
# check chain for repeats
for i in range(1, 7):
if len(chain) > i:
if chain[-i:] == chain[-i * 2:-i]:
chain = chain[:-i]
reached_end = True
continue
print(n_orig, chain)
if len(chain) > longest:
longest = len(chain)
longest_n = n_orig
longest_chain = chain
ends[chain[-1]] += 1
print("Longest:", longest)
print("n:", longest_n)
print("Chain:", longest_chain)
print(ends)
plt.bar(list(ends.keys()), ends.values(), align='center')
plt.xticks(list(ends.keys()), ends.keys(), rotation=25)
plt.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment