Tu problema me pareció interesante y me animé a verlo en detalle.
En realidad no está tan difícil de resolver. Hacer lectura y despliegue de los datos es directo, no requiere esfuerzo. La parte interesante es la rotación de bits a nivel de vector.
Para implementarla, utilicé un par de variables extra, en las que guardo y recupero la porción de bits que pasa de un elemento del vector a su vecino. Al terminar de recorrer el vector ajusto el primer valor procesado, para tomar la parte que quedó guardada en mi variable extra.
Se pide soportar rotaciones de hasta 32 bits, pero el operador nativo del lenguaje no tiene esa funcionalidad. Esto se resuelve checando ese caso específico y metiendo el resultado esperado (0) con una instrucción.
El programa completo me salió de 76 líneas, pero no hice un manejo muy completo de los errores de validación de entrada. Quizá lo quieras refinar tu mismo.
Para un esfuerzo de programación de este alcance me parece apropiado un cobro modesto, que estoy poniendo en mi oferta.
Puedo entregar el programa de inmediato si decides aceptar la propuesta; además del programa podemos conversar con detalle el funcionamiento o verificar conjuntamente los resultados (comprobé con éxito los casos de prueba del documento). Gracias por tu atención.