Jelly, 74 65 bytes
“ÆÇÐÑ÷øœ‘Ṭœṗ⁸ṙ©-¤4421œ?U0¦;"⁷,⁶ẋ⁵¤¤ṁ9¤ȮœS.®ß
“9ɲcḟ#%⁴1t(ŀȷUCOw⁾»Ç
Windows version running in a 6 line high cp-65001 console.
There is a half a second (plus evaluation) pause between iterations:
How?
“9ɲcḟ#%⁴1t(ŀȷUCOw⁾»Ç - Main link: no arguments
“9ɲcḟ#%⁴1t(ŀȷUCOw⁾» - compression of [d( Happy)+d( birthday)+d( Raff)+s(aele)+d( Ce)+d(cc)+s(o)] - d=dictionaryLookup, s=stringEncode.
- = " Happy birthday Raffaele Cecco"
Ç - call last link (1) as a monad
“ÆÇÐÑ÷øœ‘Ṭœṗ⁸ṙ©-¤4421œ?U0¦;"⁷,⁶ẋ⁵¤¤ṁ9¤ȮœS.®ß - Link 1, rotate, print, recurse: string s
¤ - nilad followed by link(s) as a nilad:
⁸ - link's left argument (initially s)
- - literal -1
ṙ - rotate left -1 (e.g. "blah" -> "hbla")
© - copy to register and yield
“ÆÇÐÑ÷øœ‘ - literal: [13,14,15,16,28,29,30]
Ṭ - untruth: [0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,1]
œṗ - partition right at truthy indexes of left
- chops up the rotated string into 8
- e.g. [" Happy birth",'d','a','y'," Raffaele Ce",'c','c','o'])
4421œ? - get the 4421st permutation of those items
- e.g. [" Happy birth",'o','d','c','a','c','y'," Raffaele Ce"]
¦ - apply to indexes:
0 - 0 (right most)
U - upend (e.g. " Raffaele Ce" -> "eC eleaffaR ")
¤ - nilad followed by link(s) as a nilad:
¤ - nilad followed by link(s) as a nilad:
¤ - nilad followed by link(s) as a nilad:
⁶ - literal space
⁵ - literal 10
ẋ - repeat: " "
⁷ - literal new line
, - pair: ['\n'," "]
9 - literal 9
ṁ - mould like: ['\n'," ",'\n'," ",'\n'," ",'\n'," ",'\n']
" - zip with:
; - concatenation
- e.g. [" Happy birth\n","o ","d\n","c ","a\n","c ","y\n","eC eleaffaR ","\n"])
Ȯ - print and yield
. - literal 0.5
œS - after sleeping right seconds yield left
® - recall value from register (s rotated by 1)
ß - call this link (1) with the same arity (as a monad)