Ответы пользователя по тегу IT-образование
  • Как изучать python?

    adugin
    @adugin Куратор тега Python
    Ответ на этот вопрос - только для избранных.
    Ответ написан
    Комментировать
  • Какие есть современные книги для начинающих изучать Python?

    adugin
    @adugin Куратор тега Python
    Скажите, а вот если бы Вы, скажем, начинали заниматься каратэ - Вы бы тоже искали обязательно единственного в мире шаолиньского мастера с 20-м даном? Читайте любую книгу и не парьте мозг. Вам ещё много книг предстоит прочитать, в каждой что-то будете открывать для себя.

    P.S. Основная "книга" - это Python 3.6.3 documentation.
    Ответ написан
    Комментировать
  • Кто получает удовольствие от Физики)?

    adugin
    @adugin
    Рекомендую курс Детлафа и Яворского:
    Detlaf.jpg
    Ответ написан
    Комментировать
  • Как отправить смайлики за минимальное количество операций?

    adugin
    @adugin Куратор тега Python
    Код на Python для расчёта "в лоб" (перебором) и выявления закономерностей:
    # -*- coding: utf-8 -*-
    
    import matplotlib.pyplot as plt
    from itertools import product
    
    def process(existing, required):
        for opcount in xrange(existing+required):
            for combo in product('dcv', repeat=opcount):
                buffer = 0
                smiles = existing
                data_y = [existing]
                for char in combo:
                    if char == 'd':
                        smiles -= 1
                    elif char == 'v':
                        smiles += buffer
                    else:
                        buffer = smiles
                    data_y.append(smiles)
                if smiles == required:
                    data_x = xrange(opcount+1)
                    plt.plot(data_x, data_y, linewidth=1)
                    print required, data_y
                    return ''.join(combo)
        return '-'
    
    for required in xrange(2, 101):
        plt.clf()
        plt.grid(True)
        plt.title('Target: %s' % required)
        plt.autoscale(enable=True, axis='both', tight=False)
        for existing in xrange(1, (required//2)+1):
            result = process(existing, required)
        plt.savefig('{:02d}.png'.format(required), dpi=96, bbox_inches='tight')

    Задача распадается на 2:
    1) Если M >= N div 2, то нужно удалить всё до половины, скопипастить, и по необходимости удалить 1 смайл.
    2) Если п.1 не выполняется, то нужно рассчитать делители N (если N простое - то взять следующие несколько чисел больше N) и спуститься к ближайшему наибольшему делителю N, который меньше M. Удалять смайлы, чтобы попадать в наблюдаемые на картинках горизонтальные уровни, соответствующие делителям.

    В общем случае решение не единственное - например, соседние группы D и V можно смешивать в любых последовательностях: DDVVV = VVVDD = VDVDV = ...

    N=12. Для M=5 видим DCVV (фиолетовая линия). Уровни (делители) - 6, 4, 3, 2, 1:
    042d326f2b1a45d2916c5ce012fca2f6.png
    N=28:
    c832673197de486aa072d81b56de27c4.png
    N=29:
    4e0ee3d81d9b47e38127cf8211c2c48f.png
    N=30:
    2629d000169449c1896414c348b61874.png
    N=71:
    5037b1d5028b4330aed51516ec81887f.png
    N=72:
    89fd833e066f423993665d4c54e8f6cc.png
    PDF со всеми картинками: dugin.org/dropbox/toster_188303.pdf (11 Mb)

    P.S. https://ru.wikipedia.org/wiki/Задача_о_ранце
    Ответ написан
    Комментировать