Navigation

Health News

Top Stories

// server.mjs
import { createServer } from 'node:http';

const server = createServer((req, res) => {
  res.writeHead(200, { 'Content-Type': 'text/plain' });
  res.end('Hello World!\n');
});

// starts a simple http server locally on port 3000
server.listen(3000, '127.0.0.1', () => {
  console.log('Listening on 127.0.0.1:3000');
});

// run with `node server.mjs`
const axios = require('axios');
const { JSDOM } = require('jsdom');

async function fetchGoogleDoc(url) {
    try {
        const response = await axios.get(url);
        return response.data;
    } catch (error) {
        console.error('Error fetching the Google Doc:', error);
        throw error;
    }
}

function parseContent(html) {
    const dom = new JSDOM(html);
    const document = dom.window.document;
    const rows = Array.from(document.querySelectorAll('table tr'));
    const characters = [];
    let maxX = 0, maxY = 0;

    rows.slice(1).forEach(row => {
        const cells = row.querySelectorAll('td');
        if (cells.length === 3) {
            const x = parseInt(cells[0].textContent.trim(), 10);
            const char = cells[1].textContent.trim();
            const y = parseInt(cells[2].textContent.trim(), 10);
            characters.push({ char, x, y });
            if (x > maxX) maxX = x;
            if (y > maxY) maxY = y;
        }
    });

    return { characters, maxX, maxY };
}

function createGrid(maxX, maxY) {
    return Array.from({ length: maxY + 1 }, () => Array(maxX + 1).fill(' '));
}

function populateGrid(grid, characters) {
    characters.forEach(({ char, x, y }) => {
        grid[y][x] = char;
    });
}

function printGrid(grid) {
    grid.forEach(row => {
        console.log(row.join(''));
    });
}

async function decodeMessage(url) {
    const html = await fetchGoogleDoc(url);
    const { characters, maxX, maxY } = parseContent(html);
    const grid = createGrid(maxX, maxY);
    populateGrid(grid, characters);
    printGrid(grid);
}

// URL of the Google Doc
const url = 'https://docs.google.com/document/d/e/2PACX-1vShuWova56o7XS1S3LwEIzkYJA8pBQENja01DNnVDorDVXbWakDT4NioAScvP1OCX6eeKSqRyzUW_qJ/pub';
decodeMessage(url);