#PHP, 184 bytes
PHP, 184 bytes
for($r=" ";++$i;sleep(print chunk_split(str_pad($r,96,"
",0),12)),$r=$k="0")for(;$c="ABCDEFGHIJKWco{zyxwvutsrqpdXL@"[$k];)$r[ord($c)-64]="Happy Birthday Raffaele Cecco "[($i+$k++)%30];
prints 39 newlines to clear the screen; run with -nr
.
The actual pause is 1 second; but I sped up the gif.
ungolfed
$p = "ABCDEFGHIJKWco{zyxwvutsrqpdXL@"; # (positions for characters)+64 to ASCII
$t = "Happy Birthday Raffaele Cecco "; # string to rotate
for($r=" "; # init result to string
++$i; # infinite loop
$r=$k="0") # 6. reset $r and $k
{
for(;$c=$p[$k];) # 1. loop through positions
$r[ord($c)-64]= # set position in result
$t[($i+$k++)%30]; # to character in string
sleep( # 5. wait 1 second
print # 4. print
chunk_split(
str_pad($r,96,"\n",0) # 2. pad to 96 chars (prepend 36 newlines)
,12) # 3. insert newline every 12 characters
);
}