46 lines
50 KiB
HTML
46 lines
50 KiB
HTML
|
<html>
|
||
|
<head>
|
||
|
<title>AoC Day 5</title>
|
||
|
</head>
|
||
|
<script>
|
||
|
function sleep(ms) {
|
||
|
return new Promise(resolve => setTimeout(resolve, ms));
|
||
|
}
|
||
|
|
||
|
function swapCase(c) {
|
||
|
return c === c.toUpperCase() ? c.toLowerCase() : c.toUpperCase();
|
||
|
}
|
||
|
|
||
|
async function collapsePolymer() {
|
||
|
let input = document.getElementById("input");
|
||
|
input.contentEditable = false;
|
||
|
|
||
|
let polymer = input.innerText.split('');
|
||
|
|
||
|
let i = 0;
|
||
|
while(i < polymer.length - 1) {
|
||
|
if (polymer[i] === swapCase(polymer[i + 1])) {
|
||
|
input.innerHTML = polymer.slice(0, i).join('') + "<span style='color: red'>" + polymer[i] + polymer[i + 1] + "</span>" + polymer.slice(i + 2).join('');
|
||
|
|
||
|
polymer.splice(i, 2);
|
||
|
i = Math.max(-1, i - 2);
|
||
|
await sleep(0.01);
|
||
|
|
||
|
input.innerText = polymer.join('');
|
||
|
}
|
||
|
|
||
|
i++;
|
||
|
}
|
||
|
|
||
|
input.contentEditable = true;
|
||
|
}
|
||
|
</script>
|
||
|
</html>
|
||
|
|
||
|
<body>
|
||
|
<div id="input" contenteditable="true" style="height: 80%; word-wrap: break-word; overflow: hidden;">
|
||
|
CXxRrcWhHoOwWtTwSsRApPWwarlYyFWHhJjJjbBTsSQqtBTtbTtwfoEeivVTtIOLwftTFQqWlaFfAGgoOMmQqyYwWWDdwyYnNBNnGgBbwWbiIZAappFjJfPYypPPzTtWwrYyRBuUbjUuJlLKhbBdDAaHkNnKZzKuUkzOoSXxnNsZtTfFIiUuHhkrRvNbBgGneAaEsCcSYyDOodVAanzOoZNJKkpPoOjXaRrAmMfFDaAdtTOfBbFAaFaobBOIiAFfUulLWwlLoOEBbRfyGgYNnFPOopgGhHLllLfBbjJFBbreifIijJEeXxLlpPUTtuLEeeyYVvEpvVHhPPNOotTnoOLlLIiGtTNnTtgQqlzZpPpzoOlVvLvNnVvHhVjJBbvVZmkDdIpAaPXxixgGXLGgNnUuAWwaldVvDVvIiaAnTtNFyYfKZzrIyYiYyRoOdkKwWfFjJCPpcIiDAaSseeEOHhFfiIoEFvVNnYyFwWfZYysSzSsqEcCeCBbcQXxJjfOJjlLSsofwWyYENnEUueekKiyGgzZYIBbUuEeFoBbOqLrWwRlVWhHwvQfKZzCHhcfFGfFgyYWwkWwbBWOVvAaoQpPqwKkbgPprdDRQqrRUfFuGmvHiIhsSXxBVNnDdvFfQqbLdDloOsSpPPpBbUuwXxvtTXhHxVhHWHeEhdNnJhHjDiIYyOoxJjXjCcLlvRSsCcrVEpPqQeJZzGAagsrRxEerQUuqRPpprRQqPArZzrRRadDBbtzlLkKVvFfdDnNiIZzdDdDdpPeEDdZzhPUuyYpxXHpoOPRrmMUpPOouaKkAhAaYdDySRrJjsHFgGnlGgLaJjAqzZkKJjdDQbalxXLANnBhHbBGgAaiYyIIisSNOomMHhLDdcClIiwWfJjzyYZbuUCcAjJaoOmMLlMmQqmMuwZzvVBbMeEmCcWUpPgiOomMIlMnNmLdDPprRiIGSsPpBvfFRrtTVVvdDEIiTaAtoOKkHMmgGpPhcyYCdDUuOeLlEDhHdoelLOoKkDdwWCkKcDeUxXwWiIWfFwTtNSaOoAsnuEXmMJqQucCUjJTtjxYybBhvVHTZMmztCMmcsSTkMGgmDfFgGdkKWwTtKKpwaAcCdDbBySUusYfJjdDFopPOnNvtTVWPpwWpPVvRrrRViIvaApOsSoyJjmIiMQqYQpPqoOPgGkKmMPUuQqrREerRBxXOokzZVvcNnPpCRrWTtCcpPnNXxdsSzZeEIiDCcJwJjWQxSMmsXqjwSsbZzdPpDEJjeKkmMRrorRXwHhWxLYylOCmMoOcRrhwWzZCjJcLlQqiRrIZzxXHBfBbzyYZFfFilMmlaAPVviIpTtXdDxzZfwWFyQqYsWgGwXAaxyYVvzZkyEeYAaKJjEJZKkztTgjLqQlJfrRCcWwVvvjJufFOoUBpPYyXxbVcCvQqBmMLlPxXeEpzZzZMHhVvNIhHiASsaYyEeZzhHkKsUPpuYUuQTtqQqmMmMySmSszZPpoOLrvVxXRlIipSsbMmqfFQBPCqQWZziIwBbLlqQZUbBuKkzgJjgGGUucESsFfPpgGTzZZzVJvVjvvVfFtJjdDYHhyhHyrRkKSKwWuUkskkKRrTtGgpPaZzpPkKUuMmyYlLAbyYRrHhBKSWwsjJktTWwgghHGyYLlRGgrMmbBQSVvsqGRrUucCxklLKXTDdmMtJUujsVBbUuzZoGgOZzpPNKklLnjWwMmcZzmMCJWyYweEXuqQUUuxgGioOOoIxYyXxzZXvUuVkIiiIrzZRFfGHhgQqUuKvjzNRrnSQqseEoLluUdsSDEesvkKVSOZIoORrxXlzZpPaRrdDAIiAaYyCNFfCcnIipPVvmMzvVZAaKkozZpPnNcwGgWCiINnOkRrKQqUuqAaCcQyYtuULKvVKkcCklXxhHbBToOcLuUVAWwazuUmMAgGaZuiIUGRrgeBbEnxXLlcCSsNAakeElLKfFcCvzzNnZZnNrRCyDdhHYrREbBNZznNneESsgGVjJrSHVgGvhKkFfsRWwDdvgGtTeRgGriIyYnjpOoPCMZzmcJCYfMkKmFyDdJjMkKIixkKBbXUuwWtTeEMmdDwWtTrRXGgAanNGgxGqQgDaAdjWjJwJmBbmMcCNUuuTVvtULCcCcLiVsSvTtIxXuCcUlmMJjlUuYspPWwkKUupEePQqzvVZSIqQiIiiPiIpoOevVEIFfOxGZzgmPpMbWLlAaQqDdZDdoOFezZEjXxGgJLgGloOSaAYyWnNJoGgOuUwWjNnwMgGCcCcKkpPGnNgroiqQIORLlqQqQAaKklLfFWqQVLNpPjFfJqQUDyYdunKRrWTtEepruUaCcARPwwWkPoONnpSdhlLHDQqsLliQqPpUbBuwNAaoOnZZzcCXHhvVxbBrRziCRrcjJxIiQdDVvKkqTeEMmELlYsSyUuwWesSXxnNHhlPOoQqpQyYsSyYEQMWmMwmZyYgoOGwWugCcTtxXGfFNJjvVnUfFeEBbcGnNyYgCVvnNAuUahHpPMmWhTtHNvJjVDdndgGjJkaWwALlKiITtDRrbKkRIidDHhLlQqoOHiIKkeEhKDdrRkiIrRMmrCcwaAWDmGgMYyCoOcIpwWPiWwQiIqwWdtGgJjTAaQqlTmMtWwLxXAaixXZzIBbbBBzOsxXSLloBbzRrZnNyZBbzXxYAawBhJjHbjJWwDdWaAjJZuUPPtxXTppJjqNnQXxcDdCNSsnZCczFfwzdDrEeBLlbyCcYyabBAYleCclLuaAfFDYNnPpqgGTtQNnyLcdDCkKoOzAaZmpPSsIiMDdcjJCdDKeEkZzWwjvkKdCccCDuUKksrRGgzLlEerRiILlWwZSFfMmBfIiDdvCcWwhHVFJoOjdDJksSKjzZIilLmEFfezZMNbBVvVBbhRrHgGPpKkvmMkccCCGgDQqGKkoHhOiqQvVIgCqiIWwKkZbbBVvBzlLoOQqwDRrGgdmnNZroOoOiIQqBbqtThoKkQnWwfFfPplLVvIiPpDdLuUGglxXmaAMrRjxXJNnrEedDRFvoITtiOYyWZzuUETtRrAiIaAaoNwcCAQHheEEdjJDtlLTvYQqGgyVIlLAHhbBaiWWZzRrzZiIwfDiGgIdFEecCOofFTtIiXxfdDFRoOrxXUnbBmMJfEepfMmBbFKkacCaaAAZzAhHiIztTHhYyfJjuUYimhHYyMJjIfYjJylLPcCpQqYNnyxXFeEQqacCAVKkWWwhHLyYCcZzXxlCcyhHYVvJGgkDdxXtTKpPrRIiLlUuLGZvVwAaWzgkJjKSlLseElbBrRZZkKzEebBzsSqjPpJLaAlrFfrtTRmcCSsSLltoeEbBOYypPMmTFfkgORroSsGaHhASGOouUgxTtRXxrBbVOohHvQqXoOsZzuUIWwIZziXxsSQqwWirRKjJhsSHZznNYuUMYymaAJjnqRrhHwLEelbBkKWhnNJjFfmMwWtqQTTkaVvAyCJjcYKtbPpBGgCcwWOoNQqqEeQKkeECtTOvVoRrcCcNSsnxuRrRryYUjJuRrQqvVUXyAaDdQqhHWBEebYHeEfFhybYypPBwQHhqWxPpIOoYjgGzZPpiTFHhMwWmfGgWwJjzZgJjGbBjlugqQGULtTJJjtMxXjvrRrRVdkKSHBbhVvarXxRAsFfEeIiZBblLjrRJrReEzQJEFfePhYyHpVvsVSsjJLbBKWwkTtEXCcukgwWUuGRrKTtFphHPQTtXxlLqxiIHhFfXoOxdDyhwWhHPWLVmGgwWMUucCvVaAzZPsSNnnNpvbiIBOofFMmQAaAPzEeZmcCMIFfpPJjGgoOwtTWiOoqQodDZznrRgZzhzZHSsEeydnNxCcOopPjJdLlNdFfDwWMmgGnqQDrIiIZziRxPYyFfplLGgzRliIaQccCufFUCqANnSmMstTLvVsCcmMSZUuzkKrTtAeERMZzPpmzZxXVvDdCcqQkbxXRrFkiEoOQoOnNSlLvVshnNKmhDdHeEmSsMGgraAeLBbqQEelMmERtTGmMNngqQxcCXGdDjJgMTtmGtTPKkpYOonhHNhHHRrCczZfFVRrRrvjXxTtJcChTtaAqQVvnNnhwNXsScyt
|
||
|
</div>
|
||
|
<br />
|
||
|
<input type="button" value="React!" onclick="collapsePolymer()" />
|
||
|
</body>
|