«Конкурс» на лучшую программную реализацию, выводящую число ‘‘сорок два’’ -14


Понимаю, что данная статья наверняка вызовет вопросы у модераторов (о целесообразности её пребывания на Хабре), но где как не здесь [на крупнейшем в Европе ресурсе для IT-специалистов] поднимать вопрос ответа на главный вопрос с точки зрения IT?

Для начала вкратце объясню, почему этот вопрос вообще актуален.

--------------------------
--------------------------
--------------------------
--------------------------
--------------------------
--------------------------
--------------------------
--------------------------
--------------------------
--------------------------
--------------------------

Наверняка, многие их вас обратили внимание на злоупотреблениечастое встречание числа ‘‘сорок два’’ на веб-страницах, посвящённых IT-тематике. Вот примеры, которые встретились лично мне:

Осторожно, 15 больших скриншотов!







Остальные 9 скриншотов










Этот факт навёл меня на мысль/идею о том, что стоит запретить использование числа 42 в документации к своим проектам. А так как просто хардкодить это число — неинтересно, возникла идея устроить такой вот "конкурс".

Оставляйте свои варианты [на любом языке программирования] в комментариях (если хочется иметь возможность подправить свой код в будущем, тогда давайте ссылку [на gist в GitHub, на snippet в Bitbucket или на pastebin.com]).

"Конкурс" — бессрочный, так что можете не торопиться и хорошо подумать.

Вот моя реализация (требуется Python 3.6 и выше)
import hashlib

def calculate_sacred_number():
    results = []

    for hash_algorithm in hashlib.algorithms_available: # || Обходим все доступные хэш-алгоритмы
                                                        # \\ (список включает в себя MD5, RIPEMD, семейство SHA и BLAKE, всего — 32 алгоритма)
        if "shake" in hash_algorithm: # Пропускаем алгоритмы SHAKE, так как они требуют указания дополнительного аргумента length в hexdigest()
            continue
        for uppercase in range(2):       # || Проверяем варианты написания как строчными, так и ПРОПИСНЫМИ буквами
            for space in range(2):       # || Проверяем варианты написания с дефисом и через пробел
                for n in range(10, 100): # || Проверяем все двузначные числа
                    global numbers
                    nw = numbers[n] # || Получаем текущее число, записанное словами на английском языке
                    if uppercase:
                        nw = nw.upper()
                    if space:
                        nw = nw.replace('-', ' ')
                    ns = str(n)
                    digest1 = hashlib.new(hash_algorithm, nw.encode()).hexdigest() # || Считаем хэш от записанного словами числа,
                    digest2 = hashlib.new(hash_algorithm, ns.encode()).hexdigest() # || а также от этого же числа, преобразованного в строку
                    for i in range(2): # // Проверяем целый хэш, а также первую половину хэша
                        if (       digest1[ 0] == ns[0] and digest2[ 0] == ns[0]   # || Оба хэша должны начинаться на первую цифру текущего числа ...
                               and digest1[-1] == ns[1] and digest2[-1] == ns[1]): # || ... и заканчиваться на вторую цифру.
                            results += [ns]
                        # // Берём первую половину хэша
                        digest1 = digest1[:len(digest1)//2]
                        digest2 = digest2[:len(digest2)//2]

    assert(len(results) == 1) # || Должно быть только одно "выигравшее" число
    return results[0]         # || Возвращаем это число

# // From [https://stackoverflow.com/a/8982279/2692494 ‘How do I tell Python to convert integers into words’]:
numbers = "zero one two three four five six seven eight nine".split()
numbers.extend("ten eleven twelve thirteen fourteen fifteen sixteen".split())
numbers.extend("seventeen eighteen nineteen".split())
numbers.extend(tens if ones == "zero" else (tens + "-" + ones) 
    for tens in "twenty thirty forty fifty sixty seventy eighty ninety".split()
    for ones in numbers[0:10])

print(calculate_sacred_number())

Код обильно приправлен комментариями, так что словесным объяснением его не сопровождаю.




К сожалению, не доступен сервер mySQL