Вступление
Это одна из моих любимых математических головоломок.
Учитывая цифру (скажем, 3) и количество раз, чтобы использовать эту цифру (скажем, 5), сгенерируйте 10 выражений, которые приводят к 1, 2, 3, 4, 5, 6, 7, 8, 9 и 10, используя просто +, -, ×, ÷, ^ и √ (корень) (в скобках разрешено группировать операции).
Например:
(3^3 + 3)/(3 + 3) = (33 - 3)/(3 + 3) = 3 + 3/3 + 3/3 = 5
Обратите внимание, что все вышеперечисленное использует пять 3 и математические операции и приводит к 5. Вы также можете использовать 3 перед √ для обозначения корня куба. То же самое касается использования 4 перед √ для обозначения четвертого корня.
Также обратите внимание, что два 3-х можно использовать для формирования 33, или три 3-х можно использовать для формирования 333 и так далее.
Вызов
- Вам будет дано два числа (оба в диапазоне от 1 до 5) в качестве аргумента функции, STDIN или аргумента командной строки.
- Первое число обозначает, какую цифру использовать, а второе число указывает, сколько раз эта цифра должна использоваться в выражении.
- Ваша программа должна вывести массив размером 10 (или 10 чисел, разделенных пробелами), где каждый элемент обозначает, возможно ли математическое выражение (используя только разрешенные операторы), приводящее к
(index + 1)
числу, или не использует значение truey / false.
Например, если вход
1 3
Тогда вывод должен быть
[1, 1, 1, 0, 0, 0, 0, 0, 0, 1]
потому что только 1, 2, 3 и 10 можно выразить с помощью трех 1.
Гол
- Это код-гольф, поэтому выигрывает минимальная длина кода в байтах.
бонус
Print-em-all [−50]
Вычтите 50 из вашей оценки, если элементы выходного массива равны общему количеству вероятных комбинаций, чтобы получить (index + 1)
значение вместо истинных или ложных значений.
Например, если есть только 3 возможные комбинации из пяти 3, что приводит к 5, то четвертая запись выходного массива должна быть 3.
Экстремальная математика [−100]
Вычтите 100 из вашей оценки, если элементы выходного массива содержат хотя бы одно из фактических выражений, которые приводят к (index + 1)
значению.
Например, если с помощью пяти 3 - х, 4 выходного массива го входа может быть либо (3^3 + 3)/(3 + 3)
, (33 - 3)/(3 + 3)
или3 + 3/3 + 3/3
Избыток [−200]
Вычтите 200 из вашей оценки, если элементы выходного массива содержат все возможные комбинации (разделенные |
). Этот бонус добавляется к бонусу Extreme Maths , поэтому вы получаете в сумме -300.
Например, если используется пять 3, 4- й элемент выходного массива должен быть(3^3 + 3)/(3 + 3)|(33 - 3)/(3 + 3)|3 + 3/3 + 3/3
Примечание. Любые два выражения для достижения одного и того же результата должны логически отличаться друг от друга с использованием разных подходов.
Например, чтобы получить 5 с использованием пяти 3, то 3 + 3/3 + 3/3
же самое, что 3/3 + 3 + 3/3
или 3/3 + 3/3 + 3
для каждого из них, используется тот же подход. (3^3 + 3)/(3 + 3)
и (33 - 3)/(3 + 3)
отличаются, так как 30 в числителе достигается с помощью различных подходов.
ОБНОВЛЕНИЕ : после просмотра всех ответов, было обнаружено, что все ответы имеют недостатки из-за крайних случаев унарных -
и √. Таким образом, пропуск этих крайних случаев считался нормальным, если речь идет о полноте ответов.
Это сложный вопрос, но довольно интересный.
Удачного игры в гольф!
1
с?