Задача на питоне
1 000 руб. за проект
По пятницам мы часто играем в популярную ролевую игру "Релиз до выходных" с коллегами. Правила этой игры довольно сложны и предполагают хорошую стратегию и планирование. Чтобы иметь представление о последствиях тех или иных ходов, часто хочется понимать, насколько вероятен тот или иной исход ситуации, с учетом разных вариантов выпадения игральных костей.
Необходимо написать программу, которая сможет, приняв на вход последовательность операндов и операций, вывести все возможные варианты результата и их вероятности.
Выражение на входе может содержать скобки, и следующие операторы в порядке уменьшения их приоритета:
В качестве операндов могут выступать:
Входные данные (поступают в стандартный поток ввода) Одна строка без пробелов, содержащая выражение для вычисления. Выражение гарантировано вычисляемое и не содержит синтаксических ошибок. Максимальная длина строки 110 символов.
Выходные данные (ожидаются в стандартном потоке вывода) Одна или несколько строк, в каждой из которых есть два числа, разделенных пробелом:
Примечание к округлению - в связи с округлением вероятностей - суммарная вероятность всех исходов может быть не равна 100%, это нормально, компенсировать это в решении не нужно.
Пример 1 Ввод:
2+2 Вывод:
4 100.00
Пример 2 Ввод:
d4+2 Вывод:
3 25.00
4 25.00
5 25.00
6 25.00
Пример 3 Ввод:
d4+(d6>2) Вывод:
1 8.33
2 25.00
3 25.00
4 25.00
5 16.67
Примечания по оформлению решения Возможно использование только стандартных библиотек языков, установки и использование дополнительных библиотек невозможны.
При отправке решений на Java необходимо назвать исполняемый класс Main. В решении не нужно указывать пакет.
Примеры работы со стандартными потоками ввода и вывода Для JS можно использовать readline и console.log:
const readline = require('readline').createInterface(process.stdin, process.stdout);
readline.on('line', (line) => {
// Введенная строка в переменной line, тут можно написать решение и вывести его с помощью console.log
...
console.log(String(result));
readline.close();
}).on('close', () => process.exit(0));
в Python можно использовать встроенные функции input() и print():
line = input()
...
print(result)
в Java можно использовать java.util.Scanner и System.out.println:
Scanner in = new Scanner(System.in);
String line = in.nextLine();
...
System.out.println(result);
Перед отправкой решения рекомендуем запустить тесты из раздела Тестирование, они помогут поймать синтаксические ошибки и ошибки выполнения.
Необходимо написать программу, которая сможет, приняв на вход последовательность операндов и операций, вывести все возможные варианты результата и их вероятности.
Выражение на входе может содержать скобки, и следующие операторы в порядке уменьшения их приоритета:
- * – умножение
- + и - – сложение и вычитание
- > - левый операнд больше, чем правый. Результат равен 1, если истинно, и 0 - если ложно
В качестве операндов могут выступать:
- n - целые положительные числа, либо 0 (0≤n≤100 000)
- dn - результат броска игральной кости, где n целое положительное число, количество граней (1≤n≤100). Результатом будет равномерное распределение вероятностей между всеми гранями (от 1 до n). Каждый такой операнд в выражении – это результат отдельного броска (например, d4+d4 – это сумма результатов двух разных бросков четырехгранной кости).
Входные данные (поступают в стандартный поток ввода) Одна строка без пробелов, содержащая выражение для вычисления. Выражение гарантировано вычисляемое и не содержит синтаксических ошибок. Максимальная длина строки 110 символов.
Выходные данные (ожидаются в стандартном потоке вывода) Одна или несколько строк, в каждой из которых есть два числа, разделенных пробелом:
- 1. целое – один из вариантов результата
- 2. вещественное - процент вероятности такого варианта с математическим округлением до 2 знаков и разделителем .
Примечание к округлению - в связи с округлением вероятностей - суммарная вероятность всех исходов может быть не равна 100%, это нормально, компенсировать это в решении не нужно.
Пример 1 Ввод:
2+2 Вывод:
4 100.00
Пример 2 Ввод:
d4+2 Вывод:
3 25.00
4 25.00
5 25.00
6 25.00
Пример 3 Ввод:
d4+(d6>2) Вывод:
1 8.33
2 25.00
3 25.00
4 25.00
5 16.67
Примечания по оформлению решения Возможно использование только стандартных библиотек языков, установки и использование дополнительных библиотек невозможны.
При отправке решений на Java необходимо назвать исполняемый класс Main. В решении не нужно указывать пакет.
Примеры работы со стандартными потоками ввода и вывода Для JS можно использовать readline и console.log:
const readline = require('readline').createInterface(process.stdin, process.stdout);
readline.on('line', (line) => {
// Введенная строка в переменной line, тут можно написать решение и вывести его с помощью console.log
...
console.log(String(result));
readline.close();
}).on('close', () => process.exit(0));
в Python можно использовать встроенные функции input() и print():
line = input()
...
print(result)
в Java можно использовать java.util.Scanner и System.out.println:
Scanner in = new Scanner(System.in);
String line = in.nextLine();
...
System.out.println(result);
Перед отправкой решения рекомендуем запустить тесты из раздела Тестирование, они помогут поймать синтаксические ошибки и ошибки выполнения.
В заказе есть исполнитель
При переводе заказа из архивного в актуальный, текущий исполнитель будет снят с задачи.
Выберите тип сделки
С безопасной сделкой вы всегда сможете вернуть средства, если что-то пойдет не так. С простой сделкой вы самостоятельно договариваетесь с исполнителем об оплате и берете на себя решение конфликтов.