Необычная система счисления в bc

В моём временно любимом bc есть интересная, но не сразу понятная особенность работы с числами. Даже в режиме ввода десятичных чисел принимаются буквы в верхнем регистре, то есть число может состоять из цифр в диапазонах 0…9 и A…Z. Буквы при этом обозначают цифры от десяти до тридцати пяти.

Но так как режим десятичный, результирующее значение числа, содержащего буквы, вычисляется необычно. Я специально не описываю словами, ниже скажу почему. Принцип на картинке, думаю, понятно как всё получается.

Расшифровка слов LEET и CODE в числовые значения (21,14,29 и 12,0,13,14) и их суммирование: 22569 и 12144.

Мне стало интересно решить задачу конвертации десятичных чисел в такую необычную систему. Из самого принципа следует, что десятичное число может быть представлено несколькими способами, так что придумать можно куда больше одного алгоритма.

Сегодня на работе, пока обедали с братишкой, пытались в режиме обсуждения решить задачу в уме. Потратили на это почти весь обед, в конце я перенёс то, что придумалось, в код программы:

def convert(num):
    if num == 0: return 0
    out, orig_num = "", num

    while num:
        num, r = divmod(num, 10)
        v = min(2 if r > 5 else 3, num)
        if (digit := v * 10 + r) > 9:
            out = chr(digit - 10 + ord('A')) + out
        else:
            out = str(digit) + out

        num -= v

    return out if len(out) < len(str(orig_num)) else orig_num

А потом мы решили развлечься ещё одним способом — аккуратно сформулировать эту задачу в тексте и решить её искусственным интеллектом. Взяли топовые сети — ЧатГПТ, ДипСик и так далее.

Я намеренно не показываю получившийся промпт, вдруг вы захотите тоже попробовать, но скажу сразу — с первого или даже пятого раза сформулировать задачу так, чтобы хоть какая-нибудь нейросеть решила её правильно у нас не получилось. Я, в итоге, сдался, а братишка добился-таки код, который её решает, от ДипСика. Листинг, правда, получился вдвое длиннее, чем у меня.

Из этого можно сделать важный и почему-то не всем очевидный вывод: иногда задачу проще решить самому, потому что сформулировать её нейросети — очень сложное занятие.

А если посмотреть чуть глубже, то можно додуматься вот до чего. В ближайшее время искусственный интеллект не убьёт профессию программиста, а просто её модифицирует. Сейчас программисты описывают задачу, переведённую ими в алгоритм, на языке программирования, а в будущем буду описывать её на натуральных языках.

Оставить комментарий

Артём Поликарпов

Не знаю как о таком писать. Сегодня я узнал, что несколько лет назад погиб один из моих старых друзей — Артём Поликарпов. Мы знали друг друга больше десяти лет.

В 2022-м году я потерял с ним связь — в «Телеграме» он не отвечал, трубку не брал, а через какое-то время его контакт в мессенджере стал удалённым. В том году это не особо удивляло, многие сильно меняли свою жизнь, часть вместе с кругом своих друзей.

Я тогда как-то не догадался написать нашим общим знакомым. Наверное потому, что придуманная мной версия казалось мне полностью логичной и всё объясняла, а сегодня, в разговоре с одним из них как-то случайно узнал, что в тот год Артём погиб в ДТП.

Мужчина в полосатой рубашке жестикулирует, обращаясь к группе слушателей с бейджами на мероприятии; на заднем плане виден баннер с надписью «404».
Я нечасто фотографирую людей, смог найти только одно фото с Артёмом, его чуть-чуть закрывает козырёк кепки Кураж-Бомбея. Самара, 2012-й год

Он был интересным, добрым человеком. На дистанции мы мало общались, но если удавалось пересечься где-то на конференциях, обсуждали очень многое, не особо, правда, касаясь его личной жизни. В этом смысле я мало знал его именно как человека. Знал, что у него есть дети, но и только.

Насколько я помню, в основном мы говорили на профессиональные темы — он был талантливым фронтендером, я даже пытался пригласить его на работу. Иногда говорили про музыку — спустя многие годы я как-то случайно выяснил, что он профессионально выступал в опере, ездил куда-то за границу.

Очень странно, что его больше нет.

Я долго колебался писать ли что-то вообще по этому поводу. Обычно я так не делаю — смерть для меня слишком личное, о таком я писать не хочу. Несколько раз стирал и набирал заметку заново, потом понял, что мне хочется хоть что-то сказать по этому поводу, поэтому оставлю.

5 комментариев