Фон
Ця головоломка є варіацією головоломки на чотири четвереньки (сама тема минулого питання ). Як і ця головоломка, мета - знайти математичні вирази для різних цілих чисел, використовуючи лише чотири цифри та певні математичні оператори. У цьому випадку, однак, дозволені цифри становлять лише 2, 0, 1 і 5 . Кожен повинен з’являтися точно один раз у рішенні та у правильному порядку. Дивно, але так можна представити багато цілих чисел. Розробникам рекомендується спершу спробувати вирішити це вручну, оскільки це дивно приємно.
Правила
Константи можуть бути побудовані з однієї чи декількох цифр:
- Цілі числа: наприклад, 2, 0, 15 тощо.
- Десяткові знаки: наприклад .2, .01, 1.5 тощо.
- Повторення десяткових знаків : напр., 2 ~ (= 0,222 ...), .15 ~ (= 0,1555 ...), 20,15 ~~ (= 20,1515 ...)
Допускаються такі одинарні операції:
- Унарне заперечення: -x
- Квадратний корінь: sqrt (x)
- Цілісний факторіал: х!
Дозволені наступні бінарні операції:
- Стандартні арифметичні оператори: x + y, xy, x * y і x / y
- Довільна експоненція: x ^ y
- Довільні корені: rt [x] (y) (= x'th корінь y)
Завдання
Ваша програма повинна роздрукувати вирази для якомога більшої кількості цілих чисел від 0 до 100, а потім вивести кількість створених виразів.
- Розчини повинні бути надруковані у форматі n = [expr].
- У виразах повинні бути використані всі цифри 2, 0, 1, 5, один раз у тому порядку.
- Вирази повинні бути надруковані, використовуючи позначення, описані вище. Непотрібні дужки дозволені, але не обов'язкові, як і пробіли. Порядок пріоритету оператора - це одинарне заперечення, факториальне, експоненційне, множення / ділення та додавання / віднімання.
- Програмі не потрібно повертати рішення для всіх чисел. Програма, яка просто виводить 0, є дійсною; однак див. розділ підрахунків нижче.
- Програма повинна працювати за 15 хвилин на сучасному комп’ютері.
Ви можете написати програму або функцію. Вирази повинні бути надруковані до STDOUT (або найближчої альтернативи). Кількість виразів можна роздрукувати в STDOUT або повернути у вигляді цілого числа. Діють стандартні обмеження для гольфу.
Приклад виведення
0=2*0*1*5
10=20*1*.5
42=((2+0!)!+1)!/5!
100=20*1*5
4
Оцінка балів
Оновлення : @orlp відзначив недолік у системі балів. Див. Http://meta.codegolf.stackexchange.com/questions/5106/way-of-salvaging-two-zero-one-five-puzzle-challenge для обговорення того, як чи потрібно це виправити.
Рішення оцінюються спочатку за кількістю виробів, які вони виробляють, а потім за довжиною коду в байтах. Отже, 1000-байтна програма, яка видає 80 результатів, буде бити 100-байтну програму, яка видає лише 79 (хоча останню можна легко розширити, щоб включити відсутні результати).
Для тих, хто хотів би мотивувати ціль, нижче наведена нижня межа кількості виразів, які можна представити. Я не планую подавати заявку, тому, можливо, виграти менше, ніж!
Принаймні 85 (із 101), хоча це може бути і вище.
Табло
Як додатковий стимул, ось короткий підсумок прогресування балів. Щоразу, коли ви виграєте найвищий бал, сміливо додайте себе до вершини таблиці (або попросіть когось іншого).
- 0 виразів, 1 байт (Pyth): реалізація, яка виводить 0