Compress ASCII Art

by Daniel Cheung

HTML

<pre><code id="o"></code></pre>

JavaScript

let ascii = `......XXXXXX..XX......XX.....XXXXX....XXXXX..XX...XX......XXXXX....XX..XXXXX....XXXXX...
.....XX......XX.....XX.XX...XX...XX..XX...XX.XX..XX......XX...XX..XX..XX...XX..XX...XX..
....XXXXx...XX....XX...XX..XX...XX..XX...XX..XXXX.......XXXXXX...XX..XX...XX..XX...XX...
...XX......XX....XXXXXXX..XXXXXX...XXXXXX....XX........XX...XX..XX..XXXXXX...XX...XX....
..XX......XXXX..XX...XX..XX.......XX........XX........XXXXXX...XX..XX...XX..XXXXXX......`;

function getCompressedArray(string) {
	let lines = string.split("\n");
  let returnArray = [];
  lines.forEach(line => {
    let lineArray = [];
    let chars = line.split("");
    let rangeStart = 0;
    let inRange = false;
    for (let i = 0; i < chars.length; i++) {
    	let char = chars[i];
      if (char == "X" && !inRange) {
      	inRange = true;
        rangeStart = i;
      } else if (char != "X" && inRange) {
      	inRange = false;
        lineArray.push([rangeStart, i]);
      }
    }
    returnArray.push(lineArray);
  });
  return JSON.stringify(returnArray, null, "    ");
}

document.getElementById("o").innerHTML = getCompressedArray(ascii);