Escriba un programa que tome una cadena de longitud impar que contenga solo los caracteres .
y :
. Con la ayuda de una pila inicialmente vacía , genere un número a partir de esta cadena de la siguiente manera:
Para cada carácter c en la cadena (de izquierda a derecha) ...
- Si c es
.
y la pila tiene menos de 2 elementos, presione 1 en la pila. - Si c es
.
y la pila tiene 2 o más elementos, saque los dos valores superiores de la pila y empuje su suma a la pila. - Si c es
:
y la pila tiene menos de 2 elementos, presione 2 en la pila. - Si c es
:
y la pila tiene 2 o más elementos, saque los dos valores superiores de la pila y empuje su producto a la pila.
El número resultante es el valor en la parte superior de la pila. Su programa debe imprimir este número en stdout (con una nueva línea final opcional).
(Un pequeño análisis muestra que solo queda un número a menos que la cadena tenga una longitud uniforme, por lo que los ignoramos. De hecho, la pila nunca tiene más de 2 elementos).
Por ejemplo, el número para ::...:.:.
es 9:
2 1 2 2 /______ stack just after the character below is handled
2 2 4 4 5 5 7 7 9 \
: : . . . : . : . <-- string, one character at a time
Como verificación de cordura, aquí están los números para todas las cadenas de longitud 1, 3 y 5:
. 1
: 2
... 2
..: 1
.:. 3
.:: 2
:.. 3
:.: 2
::. 4
::: 4
..... 3
....: 2
...:. 4
...:: 4
..:.. 2
..:.: 1
..::. 3
..::: 2
.:... 4
.:..: 3
.:.:. 5
.:.:: 6
.::.. 3
.::.: 2
.:::. 4
.:::: 4
:.... 4
:...: 3
:..:. 5
:..:: 6
:.:.. 3
:.:.: 2
:.::. 4
:.::: 4
::... 5
::..: 4
::.:. 6
::.:: 8
:::.. 5
:::.: 4
::::. 6
::::: 8
El programa más corto en bytes gana. Tiebreaker es una publicación anterior.
- Puede suponer que la entrada siempre es válida, es decir, una cadena que solo contiene
.
y:
cuya longitud es impar. - En lugar de escribir un programa, puede escribir una función que tome una cadena válida e imprima o devuelva el número generado.