Last active
September 1, 2026 11:25
-
-
Save postspectacular/a122ab9c1cd52934b8093461231c6044 to your computer and use it in GitHub Desktop.
Print sizes generator script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { | |
| comp, | |
| groupByObj, | |
| map, | |
| multiplex, | |
| noop, | |
| pairs, | |
| postProcess, | |
| pushKeys, | |
| range2d, | |
| transduce, | |
| } from "@thi.ng/transducers"; | |
| import { formatQuantity, quantity } from "@thi.ng/units"; | |
| // produce all possible 2D sizes in semi-open min/max interval | |
| const sizes = range2d(4, 15, 4, 15); | |
| // main transformation of input sizes | |
| const groups = transduce( | |
| // compose transducer steps | |
| comp( | |
| // first build tuples of: | |
| // original size and formatted as inches and centimeters | |
| multiplex( | |
| noop(), | |
| map((size) => formatQuantity(quantity(size, "inch"), "inch", 0)), | |
| map((size) => formatQuantity(quantity(size, "inch"), "cm", 0)) | |
| ), | |
| // then build final format, still keeping original size | |
| map(([size, inch, cm]) => [size, `${inch} (${cm})`]) | |
| ), | |
| // group all results based on their aspect ratio | |
| groupByObj<[number[], string], string>({ | |
| // grouping criteria | |
| key: ([[x, y]]) => | |
| x === y ? "square" : x < y ? "portrait" : "landscape", | |
| // for each group only keep formatted values | |
| // post process each group to join values into single string | |
| group: postProcess(pushKeys(1), (x) => x.join("\n")), | |
| }), | |
| // input sizes | |
| sizes | |
| ); | |
| // print groups | |
| for (let [id, sizes] of pairs(groups)) { | |
| console.log(`${id}:\n${sizes}\n`); | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| square: | |
| 4 × 4 inch (10 × 10 cm) | |
| 5 × 5 inch (13 × 13 cm) | |
| 6 × 6 inch (15 × 15 cm) | |
| 7 × 7 inch (18 × 18 cm) | |
| 8 × 8 inch (20 × 20 cm) | |
| 9 × 9 inch (23 × 23 cm) | |
| 10 × 10 inch (25 × 25 cm) | |
| 11 × 11 inch (28 × 28 cm) | |
| 12 × 12 inch (30 × 30 cm) | |
| 13 × 13 inch (33 × 33 cm) | |
| 14 × 14 inch (36 × 36 cm) | |
| landscape: | |
| 5 × 4 inch (13 × 10 cm) | |
| 6 × 4 inch (15 × 10 cm) | |
| 7 × 4 inch (18 × 10 cm) | |
| 8 × 4 inch (20 × 10 cm) | |
| 9 × 4 inch (23 × 10 cm) | |
| 10 × 4 inch (25 × 10 cm) | |
| 11 × 4 inch (28 × 10 cm) | |
| 12 × 4 inch (30 × 10 cm) | |
| 13 × 4 inch (33 × 10 cm) | |
| 14 × 4 inch (36 × 10 cm) | |
| 6 × 5 inch (15 × 13 cm) | |
| 7 × 5 inch (18 × 13 cm) | |
| 8 × 5 inch (20 × 13 cm) | |
| 9 × 5 inch (23 × 13 cm) | |
| 10 × 5 inch (25 × 13 cm) | |
| 11 × 5 inch (28 × 13 cm) | |
| 12 × 5 inch (30 × 13 cm) | |
| 13 × 5 inch (33 × 13 cm) | |
| 14 × 5 inch (36 × 13 cm) | |
| 7 × 6 inch (18 × 15 cm) | |
| 8 × 6 inch (20 × 15 cm) | |
| 9 × 6 inch (23 × 15 cm) | |
| 10 × 6 inch (25 × 15 cm) | |
| 11 × 6 inch (28 × 15 cm) | |
| 12 × 6 inch (30 × 15 cm) | |
| 13 × 6 inch (33 × 15 cm) | |
| 14 × 6 inch (36 × 15 cm) | |
| 8 × 7 inch (20 × 18 cm) | |
| 9 × 7 inch (23 × 18 cm) | |
| 10 × 7 inch (25 × 18 cm) | |
| 11 × 7 inch (28 × 18 cm) | |
| 12 × 7 inch (30 × 18 cm) | |
| 13 × 7 inch (33 × 18 cm) | |
| 14 × 7 inch (36 × 18 cm) | |
| 9 × 8 inch (23 × 20 cm) | |
| 10 × 8 inch (25 × 20 cm) | |
| 11 × 8 inch (28 × 20 cm) | |
| 12 × 8 inch (30 × 20 cm) | |
| 13 × 8 inch (33 × 20 cm) | |
| 14 × 8 inch (36 × 20 cm) | |
| 10 × 9 inch (25 × 23 cm) | |
| 11 × 9 inch (28 × 23 cm) | |
| 12 × 9 inch (30 × 23 cm) | |
| 13 × 9 inch (33 × 23 cm) | |
| 14 × 9 inch (36 × 23 cm) | |
| 11 × 10 inch (28 × 25 cm) | |
| 12 × 10 inch (30 × 25 cm) | |
| 13 × 10 inch (33 × 25 cm) | |
| 14 × 10 inch (36 × 25 cm) | |
| 12 × 11 inch (30 × 28 cm) | |
| 13 × 11 inch (33 × 28 cm) | |
| 14 × 11 inch (36 × 28 cm) | |
| 13 × 12 inch (33 × 30 cm) | |
| 14 × 12 inch (36 × 30 cm) | |
| 14 × 13 inch (36 × 33 cm) | |
| portrait: | |
| 4 × 5 inch (10 × 13 cm) | |
| 4 × 6 inch (10 × 15 cm) | |
| 5 × 6 inch (13 × 15 cm) | |
| 4 × 7 inch (10 × 18 cm) | |
| 5 × 7 inch (13 × 18 cm) | |
| 6 × 7 inch (15 × 18 cm) | |
| 4 × 8 inch (10 × 20 cm) | |
| 5 × 8 inch (13 × 20 cm) | |
| 6 × 8 inch (15 × 20 cm) | |
| 7 × 8 inch (18 × 20 cm) | |
| 4 × 9 inch (10 × 23 cm) | |
| 5 × 9 inch (13 × 23 cm) | |
| 6 × 9 inch (15 × 23 cm) | |
| 7 × 9 inch (18 × 23 cm) | |
| 8 × 9 inch (20 × 23 cm) | |
| 4 × 10 inch (10 × 25 cm) | |
| 5 × 10 inch (13 × 25 cm) | |
| 6 × 10 inch (15 × 25 cm) | |
| 7 × 10 inch (18 × 25 cm) | |
| 8 × 10 inch (20 × 25 cm) | |
| 9 × 10 inch (23 × 25 cm) | |
| 4 × 11 inch (10 × 28 cm) | |
| 5 × 11 inch (13 × 28 cm) | |
| 6 × 11 inch (15 × 28 cm) | |
| 7 × 11 inch (18 × 28 cm) | |
| 8 × 11 inch (20 × 28 cm) | |
| 9 × 11 inch (23 × 28 cm) | |
| 10 × 11 inch (25 × 28 cm) | |
| 4 × 12 inch (10 × 30 cm) | |
| 5 × 12 inch (13 × 30 cm) | |
| 6 × 12 inch (15 × 30 cm) | |
| 7 × 12 inch (18 × 30 cm) | |
| 8 × 12 inch (20 × 30 cm) | |
| 9 × 12 inch (23 × 30 cm) | |
| 10 × 12 inch (25 × 30 cm) | |
| 11 × 12 inch (28 × 30 cm) | |
| 4 × 13 inch (10 × 33 cm) | |
| 5 × 13 inch (13 × 33 cm) | |
| 6 × 13 inch (15 × 33 cm) | |
| 7 × 13 inch (18 × 33 cm) | |
| 8 × 13 inch (20 × 33 cm) | |
| 9 × 13 inch (23 × 33 cm) | |
| 10 × 13 inch (25 × 33 cm) | |
| 11 × 13 inch (28 × 33 cm) | |
| 12 × 13 inch (30 × 33 cm) | |
| 4 × 14 inch (10 × 36 cm) | |
| 5 × 14 inch (13 × 36 cm) | |
| 6 × 14 inch (15 × 36 cm) | |
| 7 × 14 inch (18 × 36 cm) | |
| 8 × 14 inch (20 × 36 cm) | |
| 9 × 14 inch (23 × 36 cm) | |
| 10 × 14 inch (25 × 36 cm) | |
| 11 × 14 inch (28 × 36 cm) | |
| 12 × 14 inch (30 × 36 cm) | |
| 13 × 14 inch (33 × 36 cm) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment