En mi clase de Economía, a mis amigos y a mí nos gusta encontrar formas de reorganizar los dígitos en el formato de fecha (en MM / DD / AA) para crear una ecuación matemática válida. En su mayor parte, se nos permite usar suma, resta, multiplicación, división, paréntesis y exponenciación además de la concatenación.
Su programa debería hacer algo similar. El programa debe importar la fecha actual e insertar operadores para imprimir una expresión de acuerdo con las siguientes reglas.
- Los dígitos DEBEN usarse en orden. La reorganización de los dígitos no está permitida.
- La expresión resultante debe ser matemáticamente precisa.
- Se permite la suma, resta, multiplicación, división, exponenciación y uso de paréntesis. Así es la concatenación de dígitos. Sin embargo, no todas las operaciones son necesarias. No puede usar un signo de resta para hacer un dígito negativo (como
-1+1+11=10
el 11 de noviembre de 2010). - El programa debe ejecutarse en 60 segundos en una máquina estándar.
Por ejemplo, este desafío se escribió el 10 de noviembre de 2015. El programa interpretaría esto como el 10/11/15. Una salida de muestra sería (1+1)/10=1/5
.
Bonos
Puede multiplicar la cantidad de bytes en su código por 0.9 para cada uno de los siguientes elementos que admite su programa.
- El programa imprime todas las expresiones posibles que se pueden formar, separadas por nuevas líneas. Multiplique por 0.95 adicional si las expresiones se enumeran en orden creciente de símbolos adicionales.
- El programa también funciona para fechas MM / DD / AAAA, imprimiendo una posibilidad con los dos primeros dígitos del año además de la posibilidad sin. Si este bono se combina con el primer bono, se deben imprimir todas las posibilidades con los dos primeros dígitos del año.
- El programa también imprime una ecuación para cuando hay varias igualdades (por ejemplo, el 11 de noviembre de 2011,
1=1=1=1=1=1
se imprimiría, además de posibilidades tales como1*1=1=1=1=1
,1*1*1=1=1=1
, y1*1*1*1=1=1
. Todos estos casos se deben imprimir para que se logre el primer bono. - El programa admite la conversión a bases entre 2 y 16. Tenga en cuenta que si la base no es 10, todos los números en la expresión deben escribirse en la misma base y
(Base b)
deben escribirse después de la expresión (con elb
reemplazo correspondiente).
Este es el código de golf, por lo que se aplican reglas estándar. El código más corto en bytes gana.
Respuestas:
Python 3,
424420369363 bytesFuerza bruta todas las combinaciones posibles de operaciones en los números y se detiene cuando encuentra una.
EDITAR: guardado 4 bytes gracias a @NoOneIsHere
EDIT 2: ahorró 51 (!) Bytes gracias a @ValueInk
fuente
except:pass
y eliminar el espacio[ (p//(len(o)**i))%len(o)]
.__future__
, ¿la actualización a Python 3 funcionaría mejor para su situación? Además, no entiendo por qué revierteo
cuando está creando esa lista de operadores con padres que tiene.o=([[x,x+'(',x+')']for x in",+,-,==,*,/,**".split(',')])
para 2 bytes