Skip to content

Instantly share code, notes, and snippets.

@avrahamappel
Last active March 6, 2024 20:53
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save avrahamappel/2e121343697c45b37c755ab3bba91936 to your computer and use it in GitHub Desktop.
Save avrahamappel/2e121343697c45b37c755ab3bba91936 to your computer and use it in GitHub Desktop.
Nonogram starter
// Calculate the overlap for a single row
const row = (len, nums) => {
let overlap = len - (nums.reduce((a, n) => a + n) + nums.length - 1);
return nums.some((n) => n > overlap) ? overlap : Infinity;
};
// Calculate the overlap for many rows
const rows = (len, rows) =>
rows.map((nums) => ({
name: JSON.stringify(nums),
value: row(len, nums),
})).filter(({ value }) => value !== Infinity);
// Calculate the overlap for a nonograms.org puzzle (old interface)
const nonograms_org = () => {
// Top row
const tr = $('.nmtt');
const cols = tr.innerText.split('\n\n\n').map(r => r.split('\n\t\n'));
const arr = [];
for (let i = 0; i < cols[0].length; i++) {
arr[i] = cols.map(c => c[i]);
}
const top_numbers = arr.map((row) => row
.filter((n) => n.match(/\d+/))
.map((n) => Number.parseInt(n))
);
const width = top_numbers.length;
// Left row
const lr = $('.nmtl');
const left_numbers = lr.innerText
.trim()
.split('\n\n\n')
.map((r) => r.trim()
.split(/\s+/)
.map((n) => Number.parseInt(n))
);
const height = left_numbers.length;
const left_row = rows(width, left_numbers);
const top_row = rows(height, top_numbers);
return { top_row, left_row };
}
nonograms_org()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment