• Как правильно спарсить данные с сайта?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    парсь с сайта цб рф, у них api
    Ответ написан
    Комментировать
  • Философский вопрос про скидочные купоны?

    Я бы первые 6 цифр генерил последовательно (10^6 комибнаций), а остальные 10 — чистый рандом. Тогда гарантированно ничего не совпадёт.

    Если нужна проверяемость без БД, тогда последниче 10 цифр - какой-нибудь хеш от первых шести с солью.

    total = 10
    
    print("RANDOM:")
    import random
    
    for n in range(total):
        rest = random.randint(0,10**10-1)
        code = "{n:06}{rest:010}".format(n=n, rest=rest)
        formatted = code[0:4] + "-" + code[4:8] + "-" + code[8:12] + "-" + code[12:]
        print(formatted)
    
    
    print("TESTABLE:")
    
    import hashlib
    
    SALT = "some_salt"
    
    def generate(n):
        _bytes = (str(n) + SALT).encode("ascii")
        _hash = hashlib.md5(_bytes).hexdigest()
        rest = int(_hash, base=16) % (10**10)
        code = "{n:06}{rest:010}".format(n=n, rest=rest)
        formatted = code[0:4] + "-" + code[4:8] + "-" + code[8:12] + "-" + code[12:]
        return formatted
    
    def test(code):
        raw_code = code.replace("-","")
        n = int(raw_code[0:6])
        return code == generate(n)
            
    for n in range(total):
        code = generate(n)
        print(code, test(code))

    Вот тут можно запустить: ideone.com/2I704P
    Ответ написан
    Комментировать
  • Философский вопрос про скидочные купоны?

    fox_12
    @fox_12 Куратор тега Python
    Расставляю биты, управляю заряженными частицами
    где можно глянуть пример подобного проекта ??...

    Проекта? Тут решение в одну строку

    import random, string
    random.seed()
    '-'.join((''.join([random.choice(string.uppercase + string.digits) \
        for x in range(4)]) for y in range(4)))

    >> '58F4-U8R4-4DTV-5JMP'
    Ответ написан
    5 комментариев
  • Философский вопрос про скидочные купоны?

    x67
    @x67
    Просто рандомно генерируете купоны. Конечно в идеале нужна проверка на схожесть, но 100к перебирать не очень то удобно. Для оптимизации этой задачи при генерации одного купона нужно ввести какой нибудь показатель, например сумму всех ord() от каждого знака. Тогда проверять нужно будет уже не каждый купон, а только те, которые имеют одинаковую сумму. Это и позволит ускорить проверку. Ну а для самой генерации нужен просто равномерный рандом. Умеете писать код - проблем ни с генерацией, ни с проверкой не будет. Не умеете - учитесь или заказывайте. Причем можно заказать реализацию даже на низкоуровневых языках)
    Ответ написан
    Комментировать