JSFiddle - React, Tailwind, and code Playground
HTML
<div id="line1">ishatpmxygjhxnndyzmmhpjregfmdvtfstgiojcxbstwcghtuckftwrwchepgojxkfgwnynximhnnovhdytmrtiugcmzkwweuudoi</div>
<div id="line2">fekopnynwgjvyojnizxcxmustpihhursiwhdhegrcgtkimxutmbgfchoeawmdmwfpkwwyhxdnftthsiuzmtmgtcjvngntrcoxydgj</div>
<div id="moves">62:u 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 62:r 66:u 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 66:r 81:u 81:r 81:r 81:r 81:r 81:r 81:r 81:r 81:r 81:r 81:r 81:r 81:r 81:r 81:r 81:r 81:r 71:u 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 71:r 84:u 84:r 84:r 84:r 84:r 84:r 84:r 84:r 84:r 84:r 52:u 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 52:r 76:u 76:r 76:r 76:r 76:r 76:r 76:r 76:r 76:r 76:r 76:r 76:r 76:r 76:r 76:r 76:r 75:u 75:r 75:r 75:r 75:r 75:r 75:r 75:r 75:r 75:r 75:r 75:r 75:r 75:r 75:r 78:u 78:r 78:r 78:r 78:r 78:r 78:r 78:r 78:r 78:r 78:r 37:u 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 37:r 56:u 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 56:r 60:u 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 60:r 41:u 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r 41:r...
CSS
html {font-family:monospace;font-size:15px;}
#line1 {position:absolute;top:2em;}
#line2 {color:gray;position:absolute;top:5em;}
#moves {display:none;}
span {float:left;position:absolute;width:1em;}
JavaScript
$('div:not(#moves)').each(function(){
c = $(this).text().split("");
$this = $(this);
$this.empty();
i = 0;
$.each(c, function(x, y) {
$this.append("<span>" + y + "</span>");
$('span').last().css({top: "0px", left: i++ + "em"});
});
});
moves = $('#moves').text().split(" ");
function animateNextMove() {
m = moves.shift().split(":");
if (m[1] == 'l') o = {left:"-=1em"};
if (m[1] == 'r') o = {left:"+=1em"};
if (m[1] == 'u') o = {top:"-=1em"};
if (m[1] == 'd') o = {top:"+=1em"};
$('#line1 span:nth-child(' + ++m[0] + ')').animate(o, 40, 'linear', animateNextMove);
}
animateNextMove();