Hola Rosa, para el apartado a) la respuesta que yo le daría es la siguiente:
La sintaxis de tipo array aparece en la línea return operaciones[operacion](x, y);
En este caso no podemos usar la notación de punto por lo que se indica en la propia entrega CU01146E:
¿Para qué es útil el acceso a propiedades con la sintaxis tipo array?
Algunos programadores la usan porque les gusta, pero hay casos en que es la única forma de acceder a una propiedad. Supón que el nombre de una propiedad lo establece el usuario (o se crea dinámicamente de alguna manera) introduciendo un dato que almacenas en una variable denominada nombrePropiedad. En este caso no es posible acceder a la propiedad con la sintaxis nombreObjeto.nombrePropiedad, pero sí será posible acceder con la sintaxis nombreObjeto[nombrePropiedad].
Se puede realizar esta prueba:
var calcular = function(x, y, operacion){
alert ('Tenemos: '+ operaciones[operacion] + ' y sin embargo '+operaciones.operacion+'')
return operaciones[operacion](x, y); }
El resultado que se obtiene es:
Tenemos: function (x,y){ return x + y } y sin embargo undefined
Esto nos indica que operaciones[operacion] nos devuelve algo (una función que requiere dos parámetros) mientras que operaciones.operacion no nos devuelve nada, en este caso no es posible el acceso a la propiedad con esta notación
Por tanto no resulta viable el reemplazo de la notación tipo array por notación basada en punto
Saludos