Example #1
0
    def generate_question_11(cls):
        # A9 Бросок игральных костей
        num = random.choice([i for i in range(8)])

        cost = 6
        monet = 2
        num2 = random.choice([i for i in range(8)])

        #  возможные варианты монеты
        answers = [
            '0.5 бит, 1/3 log^2 6 бит', '2 бит, 4 log^2 10 бит',
            '1 бит, 1/6 log^2 6 бит', '4 бит, 16 бит'
        ]

        answer = answers[2]

        random.shuffle(answers)
        cls.a = num
        cls.b = num2
        # Получаем ответ

        # Генерируем текст задачи
        text = texts(11, cls.a, cls.b)

        return get_response_date(answers, answer, text)
Example #2
0
    def generate_question_seven(cls):
        # А3
        # 2 формы: a)1 b)1
        final1 = 0
        final2 = 0
        while (final1 == 0):
            num = cls.rand_key(5)
            if num[0] == '1':
                final1 = -1 * (
                    int(''.join('1' if x == '0' else '0' for x in num), 2) + 1)
        while (final2 == 0):
            num2 = cls.rand_key(5)
            if num2[0] == '0':
                final2 = int(num2, 2)
        cls.a = num
        cls.b = num2
        # Получаем ответ
        answer = f'{final1}, {final2}'
        # Генерируем текст задачи
        text = texts(7, num, num2)

        response_data = {
            'text': text,
            'variable_answers': [answer],
            'truly_answer': answer
        }
        return response_data
Example #3
0
    def generate_question_8(cls):
        # А4
        # 2 формы: a)1 b)1
        num = random.randint(0, 127)
        num2 = random.randint(-128, -1)
        if num >= 0:
            bin1 = bin(num).split("0b")[1]
            while len(bin1) < 8:
                bin1 = '0' + bin1
            answer1 = bin1
        if num2 <= 0:
            bin1 = -1 * num2
            answer2 = bin(bin1 - pow(2, 8)).split("0b")[1]
        cls.a = num
        cls.b = num2

        answer = f'{answer1}, {answer2}'

        text = texts(8, num, num2)

        response_data = {
            'text': text,
            'variable_answers': [answer],
            'truly_answer': answer
        }
        return response_data
Example #4
0
    def generate_question_12(cls):
        # Б1
        # Длинны слов

        answer = None
        false_answer = None

        while not answer:
            L = [
                random.randint(1, 10)
                for _ in range(4, random.randrange(5, 10))
            ]
            # Размерность алфавита
            q = random.choice([2, 3, 4])

            summ = 0
            # Вычислем сумму степеней
            for i in L:
                summ += q**(-i)

            if summ <= 1:
                answer = (L, q)
            else:
                if not false_answer:
                    false_answer = str((L, q))

        falses = []
        while len(falses) <= 2:
            while not false_answer:
                L = [
                    random.randint(1, 10)
                    for _ in range(4, random.randrange(5, 10))
                ]
                # Размерность алфавита
                q = random.choice([2, 3, 4])

                summ = 0
                # Вычислем сумму степеней
                for i in L:
                    summ += q**(-i)

                if summ >= 1:
                    false_answer = (L, q)

            if false_answer not in falses:
                falses.append(false_answer)
            false_answer = None

        falses.append(answer)
        random.shuffle(falses)

        # Перемешиваем
        cls.a = random.choice([answer, false_answer])
        cls.b = false_answer if cls.a == answer else answer

        # Генерируем текст задачи
        text = texts(12, *falses)

        return get_response_date(falses, answer, text)
Example #5
0
    def generate_question_six(cls):
        # А2 Перевод из n-ой системы счисления в десятичную
        # 4 формы: a)1 b)3

        base = random.randint(11, 16)
        num = random.randint(100, 999)
        num = str(num)
        word_1 = cls.convert_base(num, from_base=base)

        base2 = random.randint(2, 9)
        a = random.randint(0, base2 - 1)
        a1 = random.randint(0, base2 - 1)
        a2 = random.randint(0, base2 - 1)
        a3 = random.randint(1, base2 - 1)
        num2 = a + a1 / 10 + a2 / 100 + a3 / 1000
        num2 = cls.toFixed(num2, digits=3)
        z = (a * base2**0) + (a1 * base2**-1) + (a2 * base2**-2) + (a3 *
                                                                    base2**-3)
        z3 = z
        z3 = cls.toFixed(z3, digits=3)
        z3 = float(z3)
        a4 = z3 - float(a)
        a4 = cls.toFixed(a4, digits=3)

        z2 = z - a
        z2 = cls.toFixed(z2, digits=3)
        z2 = float(z2)
        z4 = z3 - z2
        z4 = int(z4)
        word_3 = (z - z4) * (base2**3)
        word_3 = cls.toFixed(word_3, digits=0)
        z = cls.toFixed(z, digits=3)
        word_2 = z
        word_4 = base2**3
        '''
        a = str(a)
        c1 = int(b1)
        c2 = int(b2)
        c2 = c2/1000
        word_2 = c1+c2 '''
        cls.a = base
        cls.b = num
        cls.c = base2
        cls.d = num2

        answer = f'{word_1}, {z4}, {word_3}, {word_4}'
        # Получаем ответ
        # Генерируем текст задачи
        text = texts(6, num, base, num2, base2)
        # Словарь с сгенерированными данными
        response_data = {
            'text': text,
            'variable_answers': [answer],
            'truly_answer': answer
        }

        return response_data
Example #6
0
    def generate_question_two(cls):
        # Генерируем сторону квадарата
        row_of_square = random.randint(3, 10)
        # Генерируем квадарат
        answer = int(math.log2(row_of_square**2))
        answers = generate_random_variables(answer)
        # Генерируем текст задачи
        text = texts(2, answer)

        return get_response_date(answers, answer, text)
Example #7
0
    def generate_question(cls):
        # генерируем произвальные значения для задания
        len_text = random.randint(1, 80)
        litera = random.randint(1, len_text)
        P = litera / len_text
        answer = round(int(math.log2(1 / P)))
        answers = generate_random_variables(answer)

        # Тут вызывается функци для формирования текста задания
        text = texts(1, len_text, litera)

        random.shuffle(answers)

        return get_response_date(answers, answer, text)
Example #8
0
    def generate_question_15(cls):
        # А7
        # 2 форм a)1 b)1
        word_1 = 0
        word_2 = 0
        bin1 = 0
        bin2 = 0
        cls.a = bin1
        cls.b = bin2
        while (word_1 == 0):
            num = cls.rand_key(8)
            if num[0] == '0' and (num[1] + num[2] + num[3] != '000'
                                  and num[1] + num[2] + num[3] != '111'):
                bin1 = num
                baz = (int(num[1]) * (2**2)) + (int(num[2]) *
                                                (2**1)) + (int(num[3]) *
                                                           (2**0))
                baz2 = int(baz)
                word_1 = (1 * (2**0) + (int(num[4]) * (2**-1)) +
                          (int(num[5]) * (2**-2)) + (int(num[6]) * (2**-3)) +
                          (int(num[7]) * (2**-4))) * (2**(baz2 - 3))
        while (word_2 == 0):
            num2 = cls.rand_key(8)
            if num2[0] == '1' and (num2[1] + num2[2] + num2[3] != '000'
                                   and num2[1] + num2[2] + num2[3] != '111'):
                bin2 = num2
                raz = (int(num2[1]) * (2**2)) + (int(num2[2]) *
                                                 (2**1)) + (int(num2[3]) *
                                                            (2**0))
                raz2 = int(raz)
                dva = raz2 - 3
                word_2 = (1 * (2**0) + (int(num2[4]) * (2**-1)) +
                          (int(num2[5]) * (2**-2)) + (int(num2[6]) * (2**-3)) +
                          (int(num2[7]) * (2**-4))) * (2**dva)
                word_2 = -1 * word_2
        answer = f'{word_1}, {word_2}'

        # Генерируем текст задачи
        text = texts(15, bin1, bin2)

        response_data = {
            'text': text,
            'variable_answers': [answer],
            'truly_answer': answer
        }
        return response_data
Example #9
0
    def generate_question_four(cls):
        # Создаем массив чисел с основнием 2, для удобного счета
        arr = [2**i for i in range(7)]
        # Выьраем рандомное число из созданного массива
        count = random.choice(arr)
        # Делаем срез для выбора меньшего подмассива. Т.к выбранное число не может быть больше общего числа объектов
        less = arr[:arr.index(count)]
        # Выбор меньшего числа из созданного подмассива
        selected = random.choice(less)
        # Вычисление вероятности
        p = selected / count
        cls.a = count
        cls.b = selected
        # Получаем ответ
        answer = int(math.log2(1 / p))
        # Генерируем набор ответов
        answers = generate_random_variables(answer)
        # Генерируем текст задачи
        text = texts(4, cls.a, cls.b)

        return get_response_date(answers, answer, text)
Example #10
0
    def generate_question_five(cls):
        # А1
        # 2 формы: a)1 b)1
        base = random.randint(11, 16)
        num = random.randint(100, 999)
        word_1 = cls.convert_base(num, to_base=base)

        base2 = random.randint(3, 9)
        a = random.randint(1, 9)
        a1 = random.choice([base2**1, base2**2, base2**3])
        num2 = Fraction(a, a1)
        b1 = cls.convert_base(a, to_base=base2)
        b2 = cls.convert_base(a1, to_base=base2)
        c1 = int(b1)
        c2 = int(b2)
        word_2 = Fraction(c1, c2)
        word_3 = c1 / c2
        if (word_3 % 1) == 0:
            word_3 = word_3 // 1
            word_3 = int(word_3)

        cls.a = base
        cls.b = num
        cls.c = base2
        cls.d = num2
        # Получаем ответ

        answer = f'{word_1}, {word_3}'
        # Генерируем текст задачи
        text = texts(5, num, base, num2, base2)

        # Словарь с сгенерированными данными
        response_data = {
            'text': text,
            'variable_answers': [answer],
            'truly_answer': answer
        }

        return response_data
Example #11
0
    def generate_question_14(cls):
        from app.scripts.Hemming import Hemming
        # Б3
        # Хемминг

        # r - степень, которой определяется количество битов в сообщении
        r = 3
        k = 2**r - r - 1

        # 1 часть
        word_1_base = cls.generate_bin()
        word_1 = word_1_base
        # Вычисдение числа нужных доп битов
        m = len(word_1_base)
        r = Hemming.calcRedundantBits(m)

        # Определение позиции доп. битов
        arr = Hemming.posRedundantBits(word_1_base, r)
        # Опеределение битов четности
        arr = Hemming.calcParityBits(arr, r)
        word_1_ans = arr

        # print('Задумано',word_1_base )
        # print('Получено',word_1_ans )

        if len(word_1) % k != 0:
            word_1 += '0' * (k - (len(word_1) % k))

        other_answers = generate_random_variables(word_1,
                                                  bin=True,
                                                  len_bin=len(word_1))

        data = cls.generate_bin()
        # Вычисдение числа нужных доп битов
        m = len(data)
        r = Hemming.calcRedundantBits(m)

        # Определение позиции доп. битов
        arr = Hemming.posRedundantBits(data, r)
        # Опеределение битов четности
        arr = Hemming.calcParityBits(arr, r)
        ans = arr

        arr = list(arr)

        # Добавляем ошибку
        arr[3] = '0' if arr[1] else '1'

        arr = ''.join(arr)
        fake = arr

        # correction = Hemming.detectError(fake, r)
        # print('Переданое сообщение', ans)
        # print('Переданное сообщение с ошибкой', fake)
        # print('Позиция ошибки(ошибки считаютс в обратном порядке)', correction)

        text = texts(14, word_1_base, fake)
        answer = f'{word_1}, {word_1_ans}'

        # Словарь с сгенерированными данными
        response_data = {
            'text': text,
            'variable_answers': [answer],
            'truly_answer': answer
        }

        return response_data
Example #12
0
    def generate_question_13(cls):
        # Б2
        # ФАНО
        # Вероятность
        P = [
            float(f"%.2f" % random.uniform(0, 1))
            for _ in range(random.randrange(6, 9))
        ]

        sorted(P, reverse=True)
        Shannon_Fano_list = []

        # Рекурсия
        Shannon_Fano_coding(P, '', Shannon_Fano_list)

        # Генерируем текст задачи
        random.shuffle(P)
        text = texts(13, P)

        summ_of_symbols = 0
        for i in Shannon_Fano_list:
            summ_of_symbols += len(i)

        l = len(P)
        N = 0  # Возможное кол-во сигналов
        K = 2  # Основниае системы счисления
        m = 0  # среднее число элементарных символов на букву

        while N <= l:
            N = K**m
            m += 1

        middle_coding_by_Fano = "%.2f" % (summ_of_symbols /
                                          len(Shannon_Fano_list))
        answer = [Shannon_Fano_list, float(middle_coding_by_Fano), float(m)]
        answer_template = f"Код Фано {''.join(Shannon_Fano_list)}. Средняя длина кода по Фано {middle_coding_by_Fano}. Средняя линейная длина кода {m}"

        answers = []
        for i in range(4):
            Shannon_Fano_list, middle_coding_by_Fano, m = answer
            fake_fano = []
            dd = []
            for i in Shannon_Fano_list:
                dd.extend(
                    generate_random_variables(i, bin=True, len_bin=len(i)))
            fake_fano.extend(dd)

            fake_fano = fake_fano[0:len(Shannon_Fano_list)]
            fake_fano_middle = float(
                "%.2f" % random.uniform(0, 1)) + random.uniform(
                    middle_coding_by_Fano - float(middle_coding_by_Fano) / 2,
                    middle_coding_by_Fano + float(middle_coding_by_Fano) / 2)

            fake_middle_line = random.randint(
                int(m - m / 2), int(m + middle_coding_by_Fano / 2))

            # Если сгенерированы совпадения - сбрасываем
            if fake_middle_line == m or fake_fano_middle == middle_coding_by_Fano:
                return cls.generate_question_13()

            fake_fano_middle = "%.2f" % fake_fano_middle

            ans = f"Код Фано {''.join(fake_fano)[0:len(''.join(Shannon_Fano_list))]}. Средняя длина кода по Фано { fake_fano_middle}. Средняя линейная длина кода {fake_middle_line}"

            if ans == "":
                return cls.generate_question_13()

            answers.append(ans)

        answers.append(answer_template)

        return get_response_date(answers, answer_template, text)
Example #13
0
    def generate_question_16(cls):
        #A8
        c = ''
        c2 = ''
        celoe = random.randint(0, 15)
        celoe2 = random.randint(-15, -1)
        znam = random.choice([2**i for i in range(1, 6)])
        znam2 = random.choice([2**i for i in range(1, 6)])
        chislitel = random.choice([i for i in range(0, 64) if i < znam])
        chislitel2 = random.choice([i for i in range(0, 64) if i < znam2])
        nod1 = cls.nod(chislitel, znam)
        nod2 = cls.nod(chislitel2, znam2)
        if nod1 > 1:
            chislitel = chislitel / nod1
            chislitel = int(chislitel)
            znam = znam / nod1
            znam = int(znam)
        if nod2 > 1:
            chislitel2 = chislitel2 / nod2
            chislitel2 = int(chislitel2)
            znam2 = znam2 / nod2
            znam2 = int(znam2)
        if chislitel == 0:
            znam = 0
            c = ('0000')
        else:
            x = chislitel
            y = znam
            while y != 1:
                if y / 2 > x:
                    c += '0'
                    y = y / 2
                else:
                    c += '1'
                    y = y / 2
                    x = x - y
                while len(c) < 4:
                    c = c + '0'
        if chislitel2 == 0:
            znam2 = 0
            c2 = ('0000')
        else:
            x2 = chislitel2
            y2 = znam2
            while y2 != 1:
                if y2 / 2 > x2:
                    c2 += '0'
                    y2 = y2 / 2
                else:
                    c2 += '1'
                    y2 = y2 / 2
                    x2 = x2 - y2
                while len(c2) < 4:
                    c2 = c2 + '0'
        ps_bin = bin(celoe)[2:]
        celoe2 = -1 * celoe2
        ps_bin2 = bin(celoe2)[2:]
        while len(ps_bin) < 4:
            ps_bin = '0' + ps_bin
        while len(ps_bin2) < 4:
            ps_bin2 = '0' + ps_bin2
        full_bin = str(ps_bin + 'b' + str(c))
        full_bin2 = str(ps_bin2 + 'b' + str(c2))
        seredina = full_bin.find('b')
        seredina2 = full_bin2.find('b')
        full_bin = cls.remove_char(full_bin, 'b')
        full_bin2 = cls.remove_char(full_bin2, 'b')
        first_number = full_bin.find('1')
        first_number2 = full_bin2.find('1')
        normalize = int(seredina) - int(first_number) - 1
        normalize2 = int(seredina2) - int(first_number2) - 1
        others = int(first_number) + 1
        others2 = int(first_number2) + 1
        others4 = int(others) + 4
        others42 = int(others2) + 4
        mantissa = full_bin[others:others4]
        while len(mantissa) < 4:
            mantissa = mantissa + '0'
        mantissa2 = full_bin2[others2:others42]
        while len(mantissa2) < 4:
            mantissa2 = mantissa2 + '0'
        exponent = normalize + 3
        exponent2 = normalize2 + 3
        bin_expo = bin(exponent)[2:]
        while len(bin_expo) < 3:
            bin_expo = '0' + bin_expo
        bin_expo2 = bin(exponent2)[2:]
        while len(bin_expo2) < 3:
            bin_expo2 = '0' + bin_expo2
        final = '0' + bin_expo + mantissa
        final2 = '1' + bin_expo2 + mantissa2
        celoe2 = -1 * celoe2

        answer = f'{final}, {final2}'

        # Генерируем текст задачи
        text = texts(16, celoe, chislitel, znam, celoe2, chislitel2, znam2)

        response_data = {
            'text': text,
            'variable_answers': [answer],
            'truly_answer': answer
        }
        return response_data
Example #14
0
    def generate_question_10(cls):
        # A6
        # 9 форм: a)3 b)3 c)3
        num2 = random.randint(1, 8)
        num = random.choice([i for i in range(0, 7) if i < num2])
        num4 = random.randint(0, 7)
        num3 = random.choice([i for i in range(0, 8) if i > num4])
        numfinal = random.randint(1, 2)
        final11 = 0
        final12 = 0
        final13 = 0
        final21 = 0
        final22 = 0
        final23 = 0
        final31 = 0
        final32 = 0
        final33 = 0
        while (final11 == 0) and (final12 == 0) and (final13 == 0):
            bin1 = bin(num).split("0b")[1]
            while len(bin1) < 4:
                bin1 = '0' + bin1
            final11 = bin1
            bin2 = bin(num2).split("0b")[1]
            while len(bin2) < 4:
                bin2 = '0' + bin2
            final12 = bin2
            bin10 = num - num2
            bin3 = -1 * bin10
            final13 = bin(bin3 - pow(2, 4)).split("0b")[1]
            while len(final13) < 4:
                final13 = '0' + final13
        while (final21 == 0) and (final22 == 0) and (final23 == 0):
            bin1 = bin(num3).split("0b")[1]
            while len(bin1) < 4:
                bin1 = '0' + bin1
            final21 = bin1
            bin2 = bin(num4).split("0b")[1]
            while len(bin2) < 4:
                bin2 = '0' + bin2
            final22 = bin2
            bin3 = bin(num3 - num2).split("0b")[1]
            while len(bin3) < 4:
                bin3 = '0' + bin3
            final23 = bin3
        while (final31 == 0) and (final32 == 0) and (final33 == 0):
            if numfinal == 1:
                num51 = random.randint(-8, -1)
                num52 = random.randint(-8, -1)
                minusnum = num51 + num52

                bin1 = -1 * num51
                final31 = bin(bin1 - pow(2, 4)).split("0b")[1]

                bin2 = -1 * num52
                final32 = bin(bin2 - pow(2, 4)).split("0b")[1]

                bin3 = -1 * minusnum
                final33 = bin(bin3 - pow(2, 4)).split("0b")[1]
                while len(final33) < 4:
                    final33 = '0' + final33
            else:
                num51 = random.randint(0, 7)
                num52 = random.randint(0, 7)
                bin1 = bin(num51).split("0b")[1]
                while len(bin1) < 4:
                    bin1 = '0' + bin1
                final31 = bin1
                bin2 = bin(num52).split("0b")[1]
                while len(bin2) < 4:
                    bin2 = '0' + bin2
                final32 = bin2
                plusnum = num51 + num52
                bin3 = bin(plusnum).split("0b")[1]
                while len(bin3) < 4:
                    bin3 = '0' + bin3
                final33 = bin3

        cls.a = num
        cls.b = num2
        cls.c = num3
        cls.d = num4
        cls.e = num51
        cls.f = num52
        # Получаем ответ

        # Генерируем набор ответов
        answer = f'{final11}, {final12}, {final13}, {final21}, {final22}, {final23}, {final31}, {final32}, {final33}'
        # Генерируем текст задачи
        text = texts(10, num, num2, num3, num4, num51, num52)
        response_data = {
            'text': text,
            'variable_answers': [answer],
            'truly_answer': answer
        }
        return response_data
Example #15
0
    def generate_question_9(cls):
        # A5
        # 3 формы с чекбоксами: a)1х b)1х c)1x
        final1 = 0
        final2 = 0
        final3 = 0
        while (final1 == 0):
            num = cls.rand_key(4)
            num2 = cls.rand_key(4)
            if num[0] == '0' and num2[0] == '0':
                finala = str(num) + '+' + str(num2)
                integer_sum1 = int(num, 2) + int(num2, 2)
                final1 = bin(integer_sum1).split("0b")[1]
                while len(final1) < 4:
                    final1 = '0' + final1
        while (final2 == 0):
            num = cls.rand_key(4)
            num2 = cls.rand_key(4)
            if num[0] == '1' and num2[0] == '1':
                finalb = str(num) + '+' + str(num2)
                integer_sum2 = (
                    -1 * (int(''.join('1' if x == '0' else '0'
                                      for x in num), 2) + 1)
                ) + -1 * (int(''.join('1' if x == '0' else '0'
                                      for x in num2), 2) + 1)
                bin1 = -1 * integer_sum2
                final2 = bin(bin1 - pow(2, 4)).split("0b")[1]
                while len(final2) < 4:
                    final2 = '0' + final2
        while (final3 == 0):
            num = cls.rand_key(4)
            num2 = cls.rand_key(4)
            if (num[0] == '1' and num2[0] == '0'):
                finalc = str(num) + '+' + str(num2)
                integer_sum3 = (
                    -1 * (int(''.join('1' if x == '0' else '0'
                                      for x in num), 2) + 1)) + int(num2, 2)
                if integer_sum3 >= 0:
                    final3 = bin(integer_sum3).split("0b")[1]
                    while len(final3) < 4:
                        final3 = '0' + final3
                else:
                    bin1 = -1 * integer_sum3
                    final3 = bin(bin1 - pow(2, 4)).split("0b")[1]
            elif (num[0] == '0' and num2[0] == '1'):
                finalc = str(num) + '+' + str(num2)
                integer_sum3 = int(num, 2) + (
                    -1 * (int(''.join('1' if x == '0' else '0'
                                      for x in num2), 2) + 1))
                if integer_sum3 >= 0:
                    final3 = bin(integer_sum3).split("0b")[1]
                    while len(final3) < 4:
                        final3 = '0' + final3
                else:
                    bin1 = -1 * integer_sum3
                    final3 = bin(bin1 - pow(2, 4)).split("0b")[1]
        if integer_sum1 > 7:
            check1 = 1
        else:
            check1 = 0
        if integer_sum2 < -8:
            check2 = 1
        else:
            check2 = 0
        check3 = 0
        cls.a = num
        cls.b = num2
        # Получаем ответ
        # Генерируем набор ответов
        answer = f'{final1}, {check1}, {final2}, {check2}, {final3}, {check3}'
        # Генерируем текст задачи
        text = texts(9, finala, finalb, finalc)

        response_data = {
            'text': text,
            'variable_answers': [answer],
            'truly_answer': answer
        }
        return response_data