const input = await Deno.readTextFile("example.txt"); const lines = input.split("\n").map(x => x.trim()).filter(x => x.length > 0).map(x=>x.split("")); const width = lines[0].length; const height = lines.length; for (let i = 0; i < width; i++) { let place = 0; for (let j = 0; j < height; j++) { const ch = lines[j][i]; if(ch === "O"){ //swap const tmp = lines[place][i]; lines[place][i] = ch; lines[j][i] = tmp; place++; } else if(ch === "."){ // do nothing } else if(ch === "#"){ place = j + 1; } else{ throw new Error(`unknown char ${ch}`); } } } await Deno.writeTextFile("tf.txt", lines.map(x=> x.join("")).join("\n")); const answer = lines.map((x, i) => { // count O const count = x.map(y=> y === "O" ? 1 : 0 as number).reduce((acc, x) => acc + x, 0); return (lines.length-i) * count; }).reduce((a, b) => a + b, 0); console.log(answer);