Esta pregunta te la trajo un juego que me gusta jugar cuando estoy atrapado en largas reuniones telefónicas.
Dadas dos veces de un reloj de 24 horas (de 00:00 a 23:59), ¿cuántas ecuaciones matemáticas válidas se pueden generar con todas las veces intermedias usando solo operaciones aritméticas básicas?
Entrada: dos cadenas de cuatro dígitos (sin dos puntos) que representan tiempos válidos en un ciclo de 24 horas.
Ejemplos:
Para entrada = 0000, 1300
03:26 produces: "0+3*2=6" and "03*2=6" etc.
11:10 produces quite a few, including: "1*1=1+0" and "1=1=1^0" and "1=11^0" etc.
12:24 produces: "1/2=2/4" and "1=(2*2)/4" etc.
Las operaciones válidas son:
- adición
- sustracción
- multiplicación
- división (punto flotante)
- exponenciación
- factorial
Otros símbolos permitidos
- Paréntesis
- Signos iguales
El código más corto gana.
Notas
- El objetivo es encontrar el número de expresiones válidas entre dos veces, no el número de veces que contienen una expresión válida.
- Los dos tiempos dados como entrada se incluyen en el rango de tiempos.
- Puede agrupar los dígitos de cualquier manera posible, por lo que "1223" puede ser "12 23" o "1 2 23" o "1 223", etc., etc.
- Puede usar tantos paréntesis como sea necesario.
- Puede usar más de un
=
signo. Por ejemplo, el tiempo11:11
tiene la expresión válida1=1=1=1
. - Si la primera vez ocurre cronológicamente después de la segunda, el rango de tiempos debe ajustarse como si se cruzara al día siguiente.
- Los números deben permanecer en su orden original; no puede volver a ordenar los dígitos.
- Cuando se agrupan números, los ceros pueden ser absolutamente el dígito más delantero, en cuyo caso, se ignoran ("0303" agrupado como "03 03" son solo dos dígitos con el valor de 3.)
- NO PUEDE usar el signo menos como negación unaria. Por lo tanto, "12:01" NO produce "1-2 = - (01)", pero produce "1-2 = 0-1".
- NO PUEDE agregar puntos decimales a los dígitos. Por lo tanto, "12:05" NO produce "1/2 = 0.5".
- Sin encadenamiento de factoriales: un dígito puede ser seguido por un máximo de "!", No más, de lo contrario, muchas veces tendrían infinitas soluciones. Ej: "5!" es válido pero "5 !!" no es válido.
code-golf
expression-building
clock
nobillygreen
fuente
fuente
0000 1300
deberían las ecuaciones derivadas0000
e1300
incluirse en el recuento?Respuestas:
Python3, 363 caracteres
Como no se da respuesta hasta hoy, entrego lo que obtuve. Lamentablemente, el bloque try / except es demasiado gordo, no encontré una manera de guardar caracteres allí. Es realmente complicado con los bucles anidados allí, creo que no todo se puede hacer con las comprensiones de listas, pero tal vez alguien pueda decirme cómo.
Sin embargo, restringí el desafío a mí mismo para usar solo las matemáticas básicas '+ - * /' y sin paréntesis.
Mi código completo (espero algo explicativo) en este CodeGolf se puede encontrar en mi pastebin .
fuente