Помогите пожалуйста с алгоритмом тестов

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Помогите пожалуйста с алгоритмом тестов

Сообщение Zelderon 02 дек 2021, 22:39

Здравствуйте, хочу для детей сделать тест по математике, но столкнулся с двумя проблемами, как сделать так, чтобы правильный ответ выводился на разных кнопках(кнопок 4, в данный момент я работаю через ОнКлик), полагаю это как-то делать через слушателя в скрипте, но не знаю как и самое главное как сделать так, чтобы в тесте с 4 ответами, 1ый ответ был верным, а в другие 3 варианта не верных ответов вставлялся один из 4 стрингов? Дело в том, что в в моем алгоритме допустим задача 3+4
1)Правильный овтет = 7
2) Правильный ответ + 1 = 8
3) Вариант (2) + 2 = 10
4) Правильный ответ -2 = 5
При таком алгоритме и разброс чисел не большой и повторных ответов не будет, но проблема в том, что правильный ответ всегда 2ое наименьшее число да еще и находится всегда в одной и той же кнопке. Вот у меня и появилась идея добавить в алгоритм
5) Вариант (4) - 1 = 4
И в 3 не верных варианта ответа в тесте выводить 3 случайные стринговые переменные из 4

Синтаксис:
Используется csharp
    public void StartTheQuiz()
    {

        true1 = Random.Range(1, 10);
        true2 = Random.Range(1, 10);
        total = true1 + true2;
        false1 = total + Random.Range(1, 3);
        false2 = false1 + Random.Range(1, 3);
        false3 = total - Random.Range(1, 3);

        plusLeftLabel.text = true1.ToString();
        plusRightLabel.text = true2.ToString();

        totalLabel.text = total.ToString();
        totalFalse1.text = false1.ToString();
        totalFalse2.text = false2.ToString();
        totalFalse3.text = false3.ToString();
    }


Если это сделать нельзя, то есть еще одна идея, случайным образом отнимать или прибавлять к правильному ответу цифру варианта и после каждого овтета чтобы они менялись местами, звучит максимально не понятно, сейчас напишу пример такой же
3+4

1) Правильный ответ 7 - 1 = 6 ( цифра 1 берется с из последовательности вопроса, первый вопрос значит 1)
2) Правильный ответ 7 + 2 = 9 (взяли цифру 2)
3) Правильный ответ 7 - 3 = 4 (3ий вопрос и 3я цифра)
4) Правильный ответ 7

после правильного ответа меняться местами варианты, а лучше наверное юзать и первый и второй метод
Zelderon
UNIт
 
Сообщения: 133
Зарегистрирован: 14 дек 2020, 12:11

Re: Помогите пожалуйста с алгоритмом тестов

Сообщение Alkos26Rus 04 дек 2021, 20:22

Можешь просто сделать динамический массив типо №1 {-3, -2, -1, 1, 2, 3}
Затем берешь пустой массив №2. Прибавлешь к правильному ответу случайный элемент массива №1 и удалять его из массива №1 и добавляешь это значение в массив №2, таким образом не будет повторений. Добавлять не обязательно все 6 элементов, например 3, так не будет закономерности в ответах.
Затем делаешь Insert правильного ответа в рендомное место массива. Затем у тебя ще есть массив кнопок, вот и назначешь по порядку значения массива №2 к кнопкам, так как порядок и так будет рандомный, то назначаешь по порядку.
Аватара пользователя
Alkos26Rus
Адепт
 
Сообщения: 1641
Зарегистрирован: 26 ноя 2020, 17:52
Откуда: Москва

Re: Помогите пожалуйста с алгоритмом тестов

Сообщение samana 04 дек 2021, 22:01

Согласен с идеей от Alkos26Rus. Нужно взять некий диапазон чисел с обеих сторон от правильного ответа и выбрать их них случайные.
Вы можете создать метод, который будет возвращать массив таких случайных неправильных вариантов ответов.
Этот метод принимает два параметра: правильный ответ и кол-во неправильных ответов. Внутри метод выбирает случайные числа вокруг правильного ответа и возвращает результат в виде массива.
Синтаксис:
Используется csharp
using System.Linq;

public static int[] GetClosestAnswers(int rightAnswer, int answersAmount)
{
    int[] answers = Enumerable.Range(rightAnswer - answersAmount, (answersAmount * 2) + 1)
                    .Where(i => i != rightAnswer)
                    .OrderBy(i => System.Guid.NewGuid())
                    .Take(answersAmount)
                    .ToArray();

    return answers;
}


Например задание 5+7. Правильный ответ 12 и хотим получить 4 неправильных варианта ответа, приближенные к 12-ти.

Синтаксис:
Используется csharp
int[] wrongAnswers = GetClosestAnswers(rightAnswer: 12, answersAmount: 4);


Вызов такого метода возвращает разные результаты:

13, 14, 8, 15
10, 11, 13, 9
11, 13, 10, 8
8, 14, 13, 11
Аватара пользователя
samana
Адепт
 
Сообщения: 4738
Зарегистрирован: 21 фев 2015, 13:00
Откуда: Днепропетровск

Re: Помогите пожалуйста с алгоритмом тестов

Сообщение Zelderon 06 дек 2021, 16:23

samana писал(а):Согласен с идеей от Alkos26Rus. Нужно взять некий диапазон чисел с обеих сторон от правильного ответа и выбрать их них случайные.
Вы можете создать метод, который будет возвращать массив таких случайных неправильных вариантов ответов.
Этот метод принимает два параметра: правильный ответ и кол-во неправильных ответов. Внутри метод выбирает случайные числа вокруг правильного ответа и возвращает результат в виде массива.
Синтаксис:
Используется csharp
using System.Linq;

public static int[] GetClosestAnswers(int rightAnswer, int answersAmount)
{
    int[] answers = Enumerable.Range(rightAnswer - answersAmount, (answersAmount * 2) + 1)
                    .Where(i => i != rightAnswer)
                    .OrderBy(i => System.Guid.NewGuid())
                    .Take(answersAmount)
                    .ToArray();

    return answers;
}


Например задание 5+7. Правильный ответ 12 и хотим получить 4 неправильных варианта ответа, приближенные к 12-ти.

Синтаксис:
Используется csharp
int[] wrongAnswers = GetClosestAnswers(rightAnswer: 12, answersAmount: 4);


Вызов такого метода возвращает разные результаты:

13, 14, 8, 15
10, 11, 13, 9
11, 13, 10, 8
8, 14, 13, 11


Большое спасибо за помощь, два дня пытаюсь разобраться с тем, что вы с Alkos26Rus написали :-?
Zelderon
UNIт
 
Сообщения: 133
Зарегистрирован: 14 дек 2020, 12:11

Re: Помогите пожалуйста с алгоритмом тестов

Сообщение Zelderon 06 дек 2021, 16:24

Alkos26Rus писал(а):Можешь просто сделать динамический массив типо №1 {-3, -2, -1, 1, 2, 3}
Затем берешь пустой массив №2. Прибавлешь к правильному ответу случайный элемент массива №1 и удалять его из массива №1 и добавляешь это значение в массив №2, таким образом не будет повторений. Добавлять не обязательно все 6 элементов, например 3, так не будет закономерности в ответах.
Затем делаешь Insert правильного ответа в рендомное место массива. Затем у тебя ще есть массив кнопок, вот и назначешь по порядку значения массива №2 к кнопкам, так как порядок и так будет рандомный, то назначаешь по порядку.


Спасибо за помощь, изучаю и пытаюсь реализовать
Zelderon
UNIт
 
Сообщения: 133
Зарегистрирован: 14 дек 2020, 12:11


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 33