Генерация шестнадцатеричных чисел с условием

Необходимо сгенерировать список шестнадцатеричных чисел, не содержащих 0, и в которых сумма цифр не превосходит 11 в десятиричной системе.

Сам пока додумался только до этого:

import itertools
nums = [list(x) for x in itertools.product((1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F'), repeat=7) if (x[-1] == x[-2])]

Осталось только проверку суммы, но как?

Может можно в условии if как-то прописать, что 'A' = 10, 'B' = 11 и тд?


Ответы (1 шт):

Автор решения: Zhihar

я внес некоторые изменения в код

  1. поскольку максимум может быть сумма 11, то никаких 'C', 'D', 'E', 'F' нет - можно оставить, но считать будет гораздо дольше

  2. я формирую обычные числа от 0 до 15 (ну вернее от 1 до 11), по ним вычисляю сумму

  3. и в конце перевожу через список соответствий в буквы

  4. буквы формирую в слова

зачем у вас в коде if (x[-1] == x[-2]) я не понял, поэтому убрал, но если надо - верните

код:

import itertools

data = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F')

nums = [''.join(map(lambda i: data[i], x)) for x in itertools.product((1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,), repeat=7) if sum(x) < 12]

print(*nums)
→ Ссылка