Este desafío está inspirado en las matemáticas es un hecho. La programación no lo es .
La notación matemática para un factorial o un hecho es un signo de exclamación !. El signo de exclamación también es un símbolo común noten muchos lenguajes de programación.
Desafío:
Tome una cadena que contenga números y los caracteres: + !como entrada y salida de lo siguiente:
Todo delante de un signo de exclamación debe evaluarse como una expresión matemática, así 2+2sería 4.
Todo después de un solo signo de exclamación debe agregarse como accesorios a lo que esté frente a él, por lo tanto: 2+2!5debe dar 45, porque 2+2=4, y 5es un accesorio. 2+2!5+5debería dar 410.
Como !también significa not, cualquier cosa que no sea un accesorio después del hecho no debe agregarse. Por lo tanto, 2+2!!5debe dar 4, ya 5que no es un accesorio. Ahora, not(not(true))==trueasí que 2+2!!!5debería dar 45. 2+2!!5!5+5debería dar:, 410porque 2+2=4, seguido de un factorial y !5!5+5. El primero 5no es un hecho, sino que 5+5está después de otro signo de exclamación y, por lo tanto, es un hecho, una vez más.
Aclaraciones:
- Los signos de exclamación no serán adyacentes a a
+en ninguno de los lados. - No habrá
+números principales (es5, no+5). - Opcionalmente, puede incluir un cero a la izquierda si ese es el resultado de la expresión frente a la primera
!. Ambos4y04son salida aceptada para entrada:0+0!4
Resumen ejecutivo: evalúe cada suma (tratando !como separadores). Luego descarte todos los números que aparecen después de un número par de !(contando desde el comienzo de la cadena). Luego elimine todo !.
Casos de prueba:
!
<- Empty string
5
5
12!
12
!87
87
!!5
<- Empty string
5+5!2+2
104
5+5!!2+2
10
1!2!3!4!5!6!7!8!9
12468
10+10!!2+2!!3+3!4+4
208
2!!3!5
25
2!!3!5!7
25
10!!!!!!!5
105
Este es el código de golf, por lo que gana el código más corto en bytes (en cada idioma). ¡Las explicaciones son altamente recomendadas!
25(ver caso de prueba agregado). Más importante 2!!3!5!7aún 25, daría , porque hay un número par a la !izquierda de la 7(por lo que no solo cuenta la carrera justo en frente del número, sino toda la !izquierda).
Row?