Javascript (usando una biblioteca externa) (235 bytes)
Por Dios, esto fue difícil! Bueno ... mi biblioteca no era realmente la tarea correcta para esto jaja. Pero me gusto el reto
(x,y)=>{r=x-1;s=y-1;m=Math.max(r,s);n=Math.min(r,s);l=_.RangeDown(s,y).WriteLine(z=>_.Range(0,x).Write("",w=>z==0&&w==0?"X":(z==w||(z==s&&w>=n)||(w==r&&z>=n))?"#":"."));return l+"\r\nMove count: "+(l.length-l.split("#").join("").length)}
Enlace a lib: https://github.com/mvegh1/Enumerable
Explicación del código: Crear función de 2 variables. Almacene x-1 e y-1 en variables. Almacene max y min de esos en variables. Cree un rango de números verticalmente descendente desde (y-1) para un recuento de y. Para cada elemento en el rango vertical, escriba una línea para el elemento actual, de acuerdo con el predicado complejo. Ese predicado crea un rango ascendente de enteros desde 0, para un recuento de x. Para cada elemento en ese rango, concatene en 1 cadena de acuerdo con un predicado complejo. Ese predicado verifica si está en la parte inferior izquierda, de lo contrario verifica si está en diagonal, de lo contrario verifica que estamos en el borde X o Y. Finalmente, todo eso se almacenó en una variable. Luego, para obtener el recuento de movimientos, básicamente solo contamos los números. Luego concatene eso con la variable almacenada y devuelva el resultado
Eso fue un bocado jaja. La captura de pantalla tiene un bytecount incorrecto porque encontré una manera de guardar 4 bytes mientras publicaba esto
EDITAR: veo que otras respuestas no están poniendo "Move count:" en su salida, pero la mía sí. Si eso no es un requisito, eso reduce un montón de bytes ...