Na minha aula de economia, meus amigos e eu gostamos de encontrar maneiras de reorganizar os dígitos no formato de data (em MM / DD / AA) para criar uma equação matemática válida. Na maioria das vezes, podemos usar adição, subtração, multiplicação, divisão, parênteses e exponenciação além da concatenação.
Seu programa deve fazer algo semelhante. O programa deve importar a data atual e inserir operadores para imprimir uma expressão de acordo com as seguintes regras.
- Os dígitos DEVEM ser usados em ordem. O rearranjo de dígitos não é permitido.
- A expressão resultante deve ser matematicamente precisa.
- É permitida a adição, subtração, multiplicação, divisão, exponenciação e uso de parênteses. O mesmo acontece com a concatenação de dígitos. No entanto, nem todas as operações são necessárias. Você não pode usar um sinal de subtração para tornar um dígito negativo (como
-1+1+11=10
em 11 de novembro de 2010). - O programa deve ser executado em 60 segundos em uma máquina padrão.
Por exemplo, esse desafio foi escrito em 10 de novembro de 2015. O programa interpretaria isso como 10/11/15. Uma saída de amostra seria (1+1)/10=1/5
.
Bônus
Você pode multiplicar o número de bytes no seu código por 0,9 para cada um dos seguintes programas suportados pelo seu programa.
- O programa imprime todas as expressões possíveis que podem ser formadas, separadas por novas linhas. Multiplique por 0,95 adicional se as expressões estiverem listadas em ordem crescente de símbolos adicionais.
- O programa também funciona para datas MM / DD / AAAA, imprimindo uma possibilidade com os dois primeiros dígitos do ano, além da possibilidade sem. Se esse bônus for combinado com o primeiro bônus, todas as possibilidades com os dois primeiros dígitos do ano deverão ser impressas.
- O programa também imprime uma equação para quando há várias igualdades (por exemplo, em 11 de Novembro de 2011,
1=1=1=1=1=1
seria impresso, além de possibilidades, como1*1=1=1=1=1
,1*1*1=1=1=1
, e1*1*1*1=1=1
. Todos esses casos devem ser impressos pela primeira bônus a ser alcançado. - O programa suporta conversão para bases entre 2 e 16. Observe que, se a base não for 10, todos os números na expressão deverão ser escritos na mesma base e
(Base b)
depois da expressão (b
substituídos de acordo).
Isso é código de golfe, então as regras padrão se aplicam. O menor código em bytes vence.
Respostas:
Python 3,
424420369363 bytesO Brute força todas as combinações possíveis de operações nos números e para quando encontra uma.
EDIT: Salvo 4 bytes graças a @NoOneIsHere
EDIT 2: Salvo 51 (!) Bytes graças a @ValueInk
fonte
except:pass
e remover o espaço[ (p//(len(o)**i))%len(o)]
.__future__
, a atualização para o Python 3 funcionaria melhor para a sua situação? Além disso, não entendo por que você inverteo
ao criar a lista de operadores com parênteses que possui.o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])
para 2 bytes