На уроках экономики мы с друзьями придумываем способы перестановки цифр в формате даты (в ММ / ДД / ГГ) для создания правильного математического уравнения. По большей части нам разрешено использовать сложение, вычитание, умножение, деление, круглые скобки и возведение в степень в дополнение к объединению.
Ваша программа должна сделать что-то подобное. Программа должна импортировать текущую дату и вставить операторы для печати выражения в соответствии со следующими правилами.
- Цифры ДОЛЖНЫ использоваться по порядку. Перестановка цифр не допускается.
- Полученное выражение должно быть математически точным.
- Допускается сложение, вычитание, умножение, деление, возведение в степень и использование скобок. Так же как и объединение цифр. Однако не все операции необходимы. Вы не можете использовать знак вычитания, чтобы сделать цифру отрицательной (как
-1+1+11=10
11 ноября 2010 года). - Программа должна работать за 60 секунд на стандартном компьютере.
Например, этот вызов был написан 10 ноября 2015 года. Программа будет интерпретировать это как 11/10/15. Пример вывода будет (1+1)/10=1/5
.
Бонусы
Вы можете умножить количество байтов в своем коде на 0,9 для каждого из следующих поддерживаемых вашей программой.
- Программа печатает все возможные выражения, которые могут быть сформированы, разделены символами новой строки. Умножьте на дополнительные 0,95, если выражения перечислены в порядке возрастания количества дополнительных символов.
- Программа также работает для дат ММ / ДД / ГГГГ, печатая возможность с первыми двумя цифрами года в дополнение к возможности без. Если этот бонус объединен с первым бонусом, должны быть напечатаны все возможности с первыми двумя цифрами года.
- Программа также печатает уравнение , когда существует множество Равенства (например, на 11 ноября 2011 года,
1=1=1=1=1=1
будет напечатан, в дополнение к возможностям , таких как1*1=1=1=1=1
,1*1*1=1=1=1
и1*1*1*1=1=1
. Все такие случаи должны быть напечатаны для первого бонуса должна быть достигнута. - Программа поддерживает преобразование в базы от 2 до 16. Обратите внимание, что если основание не равно 10, все числа в выражении должны быть записаны в одной базе, и
(Base b)
должны быть записаны после выражения (сb
соответствующей заменой).
Это код гольф, поэтому применяются стандартные правила. Самый короткий код в байтах побеждает.
Ответы:
Python 3,
424420369363 байтаБрут-форс все возможные комбинации операций в числах и останавливается, когда находит.
РЕДАКТИРОВАТЬ: Сохранено 4 байта благодаря @NoOneIsHere
РЕДАКТИРОВАТЬ 2: 51 (!) Байт благодаря @ValueInk
источник
except:pass
и удалить пробел в[ (p//(len(o)**i))%len(o)]
.__future__
, подойдет ли обновление до Python 3 лучше для вашей ситуации? Кроме того, я не понимаю, почему вы переворачиваете,o
когда создаете список операторов с паренями, который у вас есть.o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])
для 2 байтов