diff --git a/output/pdf/cargo-filling-2.pdf b/output/pdf/cargo-filling-2.pdf new file mode 100644 index 0000000..b66ec2e Binary files /dev/null and b/output/pdf/cargo-filling-2.pdf differ diff --git a/tasks/cargo-filling/docs/cargo-filling-2.data.json b/tasks/cargo-filling/docs/cargo-filling-2.data.json new file mode 100644 index 0000000..79b147c --- /dev/null +++ b/tasks/cargo-filling/docs/cargo-filling-2.data.json @@ -0,0 +1,886 @@ +{ + "pages": [ + { + "page": 1, + "cards": [ + { + "index": 0, + "asteroidScale": 0.85, + "innerAst": { + "left": 60 + }, + "badge": { + "left": 36, + "top": 33 + } + }, + { + "index": 1, + "asteroidScale": 0.95, + "ship": { + "right": -20.5, + "top": -7 + }, + "innerAst": { + "left": 54, + "top": 61 + }, + "badge": { + "left": 23 + } + }, + { + "index": 2, + "ship": { + "right": -24.5, + "top": -7 + }, + "innerAst": { + "left": 47, + "top": 61 + }, + "badge": { + "left": 22, + "top": 41 + } + }, + { + "index": 3, + "ship": { + "right": -14.5, + "top": -9 + }, + "innerAst": { + "left": 54, + "top": 67 + }, + "badge": { + "left": 29, + "top": 49 + } + }, + { + "index": 4, + "asteroidScale": 1.2, + "ship": { + "right": -18.5 + }, + "innerAst": { + "left": 44, + "top": 51 + }, + "badge": { + "left": 27 + } + }, + { + "index": 5, + "ship": { + "right": -20.5 + }, + "innerAst": { + "left": 53, + "top": 67 + }, + "badge": { + "left": 24 + } + } + ] + }, + { + "page": 2, + "cards": [ + { + "index": 0, + "asteroidScale": 1.95, + "ship": { + "right": -22.5, + "top": -3 + }, + "innerAst": { + "left": 49, + "top": 42 + }, + "badge": { + "left": 25, + "top": 33 + } + }, + { + "index": 1, + "ship": { + "right": -22.5 + }, + "innerAst": { + "left": 39, + "top": 44 + }, + "badge": { + "left": 27 + } + }, + { + "index": 2, + "asteroidScale": 2, + "ship": { + "right": -20.5 + }, + "innerAst": { + "left": 52, + "top": 60 + }, + "badge": { + "left": 23, + "top": 37 + } + }, + { + "index": 3, + "ship": { + "right": -20.5 + }, + "innerAst": { + "left": 55, + "top": 62 + }, + "badge": { + "left": 27, + "top": 38 + } + }, + { + "index": 4, + "ship": { + "right": -20.5, + "top": -7 + }, + "innerAst": { + "left": 46, + "top": 51 + }, + "badge": { + "left": 26, + "top": 42 + } + }, + { + "index": 5, + "ship": { + "right": -22.5, + "top": -7 + }, + "innerAst": { + "left": 53, + "top": 56 + }, + "badge": { + "left": 22 + } + } + ] + }, + { + "page": 3, + "cards": [ + { + "index": 0, + "ship": { + "right": -14.5, + "top": -9 + }, + "innerAst": { + "left": 54, + "top": 61 + }, + "badge": { + "left": 28, + "top": 48 + } + }, + { + "index": 1, + "ship": { + "right": -22.5, + "top": -9 + }, + "innerAst": { + "left": 51, + "top": 58 + }, + "badge": { + "left": 22, + "top": 42 + } + }, + { + "index": 2, + "ship": { + "right": -18.5, + "top": -7 + }, + "innerAst": { + "left": 45, + "top": 49 + }, + "badge": { + "left": 26, + "top": 44 + } + }, + { + "index": 3, + "ship": { + "right": -20.5, + "top": -3 + }, + "innerAst": { + "left": 39, + "top": 34 + }, + "badge": { + "left": 23, + "top": 36 + } + }, + { + "index": 4, + "ship": { + "right": -16.5, + "top": -3 + }, + "innerAst": { + "left": 59, + "top": 68 + }, + "badge": { + "left": 25, + "top": 31 + } + }, + { + "index": 5, + "innerAst": { + "left": 61, + "top": 75 + }, + "badge": { + "left": 35, + "top": 32 + } + } + ] + }, + { + "page": 4, + "cards": [ + { + "index": 0, + "ship": { + "right": -18.5 + }, + "innerAst": { + "left": 47, + "top": 49 + }, + "badge": { + "left": 27, + "top": 36 + } + }, + { + "index": 1, + "ship": { + "right": -20.5, + "top": -3 + }, + "innerAst": { + "left": 64, + "top": 43 + }, + "badge": { + "left": 23, + "top": 35 + } + }, + { + "index": 2, + "ship": { + "right": -24.5 + }, + "badge": { + "left": 26 + } + }, + { + "index": 3, + "innerAst": { + "left": 62, + "top": 72 + }, + "badge": { + "left": 35, + "top": 32 + } + }, + { + "index": 4, + "asteroidScale": 2, + "ship": { + "right": -20.5, + "top": -7 + }, + "innerAst": { + "top": 60 + }, + "badge": { + "left": 23 + } + }, + { + "index": 5, + "ship": { + "right": -26.5 + }, + "innerAst": { + "left": 48, + "top": 56 + }, + "badge": { + "left": 22, + "top": 40 + } + } + ] + }, + { + "page": 5, + "cards": [ + { + "index": 0, + "asteroidScale": 1.25, + "ship": { + "right": -22.5, + "top": -3 + }, + "innerAst": { + "left": 53, + "top": 51 + }, + "badge": { + "left": 45, + "top": 78 + } + }, + { + "index": 1, + "ship": { + "right": -18.5, + "top": -7 + }, + "innerAst": { + "left": 59, + "top": 67 + }, + "badge": { + "left": 27, + "top": 35 + } + }, + { + "index": 2, + "ship": { + "right": -18.5 + }, + "innerAst": { + "left": 54, + "top": 55 + }, + "badge": { + "left": 51, + "top": 20 + } + }, + { + "index": 3, + "ship": { + "right": -18.5 + }, + "innerAst": { + "left": 56, + "top": 55 + }, + "badge": { + "left": 18, + "top": 49 + } + }, + { + "index": 4, + "ship": { + "right": -22.5, + "top": -3 + }, + "innerAst": { + "left": 44, + "top": 38 + }, + "badge": { + "left": 24, + "top": 34 + } + }, + { + "index": 5, + "ship": { + "right": -18.5 + }, + "innerAst": { + "left": 61, + "top": 49 + }, + "badge": { + "left": 27, + "top": 36 + } + } + ] + }, + { + "page": 6, + "cards": [ + { + "index": 0, + "ship": { + "right": -22.5, + "top": -7 + }, + "innerAst": { + "left": 52, + "top": 56 + }, + "badge": { + "left": 23 + } + }, + { + "index": 1, + "innerAst": { + "left": 73, + "top": 66 + }, + "badge": { + "left": 36, + "top": 33 + } + }, + { + "index": 2, + "ship": { + "right": -18.5, + "top": -7 + }, + "innerAst": { + "left": 66, + "top": 43 + }, + "badge": { + "left": 24, + "top": 36 + } + }, + { + "index": 3, + "ship": { + "right": -20.5 + }, + "innerAst": { + "left": 48, + "top": 53 + }, + "badge": { + "left": 27, + "top": 40 + } + }, + { + "index": 4, + "ship": { + "right": -18.5 + }, + "innerAst": { + "top": 61 + }, + "badge": { + "left": 27, + "top": 36 + } + }, + { + "index": 5, + "ship": { + "right": -18.5 + }, + "innerAst": { + "left": 53, + "top": 61 + }, + "badge": { + "left": 32, + "top": 43 + } + } + ] + }, + { + "page": 7, + "cards": [ + { + "index": 0, + "asteroidScale": 1.35, + "ship": { + "right": -24.5 + }, + "innerAst": { + "left": 55, + "top": 55 + }, + "badge": { + "left": 24 + } + }, + { + "index": 1, + "ship": { + "right": -14.5, + "top": -9 + }, + "innerAst": { + "left": 56 + }, + "badge": { + "left": 34, + "top": 48 + } + }, + { + "index": 2, + "asteroidScale": 2, + "ship": { + "right": -18.5 + }, + "innerAst": { + "left": 54, + "top": 39 + }, + "badge": { + "left": 27, + "top": 34 + } + }, + { + "index": 3, + "ship": { + "right": -22.5 + }, + "innerAst": { + "left": 54, + "top": 41 + }, + "badge": { + "left": 27 + } + }, + { + "index": 4, + "asteroidScale": 1.9, + "ship": { + "right": -20.5, + "top": -7 + }, + "badge": { + "left": 23, + "top": 37 + } + }, + { + "index": 5, + "ship": { + "top": -7 + }, + "innerAst": { + "left": 60 + }, + "badge": { + "left": 35, + "top": 31 + } + } + ] + }, + { + "page": 8, + "cards": [ + { + "index": 0, + "ship": { + "right": -22.5 + }, + "innerAst": { + "left": 42, + "top": 44 + }, + "badge": { + "left": 27 + } + }, + { + "index": 1, + "ship": { + "right": -18.5, + "top": -7 + }, + "innerAst": { + "left": 48, + "top": 50 + }, + "badge": { + "left": 27, + "top": 38 + } + }, + { + "index": 2, + "ship": { + "right": -20.5, + "top": -9 + }, + "innerAst": { + "left": 55, + "top": 57 + }, + "badge": { + "left": 23, + "top": 40 + } + }, + { + "index": 3, + "ship": { + "right": -18.5, + "top": -9 + }, + "innerAst": { + "left": 49, + "top": 39 + }, + "badge": { + "left": 26, + "top": 33 + } + }, + { + "index": 5, + "ship": { + "right": -18.5, + "top": -7 + }, + "innerAst": { + "left": 62, + "top": 58 + }, + "badge": { + "left": 26, + "top": 45 + } + } + ] + }, + { + "page": 9, + "cards": [ + { + "index": 0, + "ship": { + "right": -20.5, + "top": -7 + }, + "innerAst": { + "top": 64 + }, + "badge": { + "left": 24, + "top": 37 + } + }, + { + "index": 1, + "ship": { + "right": -20.5, + "top": -9 + }, + "innerAst": { + "left": 49, + "top": 50 + }, + "badge": { + "left": 28, + "top": 48 + } + }, + { + "index": 2, + "ship": { + "right": -24.5, + "top": -9 + }, + "innerAst": { + "left": 39, + "top": 62 + }, + "badge": { + "left": 22, + "top": 46 + } + }, + { + "index": 3, + "asteroidScale": 1.95, + "ship": { + "right": -14.5, + "top": -9 + }, + "innerAst": { + "left": 59, + "top": 59 + }, + "badge": { + "left": 38, + "top": 44 + } + }, + { + "index": 4, + "asteroidScale": 1.85, + "ship": { + "right": -20.5, + "top": -7 + }, + "innerAst": { + "left": 60, + "top": 58 + }, + "badge": { + "left": 23 + } + }, + { + "index": 5, + "ship": { + "right": -18.5 + }, + "innerAst": { + "left": 59, + "top": 52 + }, + "badge": { + "left": 28, + "top": 35 + } + } + ] + }, + { + "page": 10, + "cards": [ + { + "index": 0, + "asteroidScale": 1.95, + "ship": { + "right": -22.5, + "top": -3 + }, + "innerAst": { + "left": 49, + "top": 42 + }, + "badge": { + "left": 25, + "top": 33 + } + }, + { + "index": 1, + "ship": { + "right": -22.5 + }, + "innerAst": { + "left": 39, + "top": 44 + }, + "badge": { + "left": 27 + } + }, + { + "index": 2, + "asteroidScale": 2, + "ship": { + "right": -20.5 + }, + "innerAst": { + "left": 52, + "top": 60 + }, + "badge": { + "left": 23, + "top": 37 + } + }, + { + "index": 3, + "ship": { + "right": -20.5 + }, + "innerAst": { + "left": 55, + "top": 62 + }, + "badge": { + "left": 27, + "top": 38 + } + }, + { + "index": 4, + "ship": { + "right": -20.5, + "top": -7 + }, + "innerAst": { + "left": 46, + "top": 51 + }, + "badge": { + "left": 26, + "top": 42 + } + }, + { + "index": 5, + "ship": { + "right": -22.5, + "top": -7 + }, + "innerAst": { + "left": 53, + "top": 56 + }, + "badge": { + "left": 22 + } + } + ] + } + ] +} \ No newline at end of file diff --git a/tasks/cargo-filling/docs/cargo-filling-2.md b/tasks/cargo-filling/docs/cargo-filling-2.md new file mode 100644 index 0000000..d7d6bb4 --- /dev/null +++ b/tasks/cargo-filling/docs/cargo-filling-2.md @@ -0,0 +1,43 @@ +# Cargo Filling — Document 2 + +Addition crossing the **tens** boundary (odd pages) and the **twenties** boundary (even pages). +10 pages, 6 cards per page, 60 problems total. + +Same ships, asteroids, hero/footer images and element positions as Document 1 — **only the numbers changed** +(positions are preserved via `cargo-filling-2.data.json`, copied from Doc 1; page 10 reuses page 2's layout). + +## Crossing rule (the only difference from Doc 1) + +- **Odd pages (1, 3, 5, 7, 9)** — cross **10**: cargo capacity badge = `10`, A already in cargo (1–9), + N = 10 − A, brace value `10`. +- **Even pages (2, 4, 6, 8, 10)** — cross **20**: cargo capacity badge = `20`, A already in cargo (11–19), + N = 20 − A, brace value `20`. +- **Floating asteroid B is always 1–9** on every page. The child splits B = N + M so A + N hits the boundary. +- Full expression: `A + B = (A + N) + M = C`. + +Numbers are **randomly spread**: each page draws 6 **distinct** A values spread across the whole valid +A-range, each paired with a varied B (preferring B values not yet used on the page). Only the constraints +you set apply: asteroid B=1–9, capacity 10/20, crossing with non-zero fill N and non-zero remnant M. +Generated with seeded RNG (`mulberry32(20260622)`) in `/tmp/build-cf2.cjs` so the set is reproducible. + +Card 1 of page 1 is the worked **example** (answers filled in handwriting style): A=5, B=9 → N=5, M=4, C=14. + +## Numbers per page (A + B) + +| Page | Boundary | Problems (A+B) | +|------|----------|----------------| +| 1 | 10 | 5+9, 3+8, 4+7, 2+9, 6+6, 9+4 | +| 2 | 20 | 19+3, 17+4, 15+6, 18+7, 14+9, 12+9 | +| 3 | 10 | 3+8, 5+6, 6+7, 2+9, 8+5, 4+8 | +| 4 | 20 | 12+9, 18+3, 19+2, 14+9, 17+5, 16+7 | +| 5 | 10 | 9+2, 3+8, 5+7, 7+5, 8+3, 4+9 | +| 6 | 20 | 16+5, 14+7, 17+9, 12+9, 19+8, 15+6 | +| 7 | 10 | 5+6, 6+5, 7+7, 8+4, 3+8, 2+9 | +| 8 | 20 | 18+9, 12+9, 17+5, 19+3, 15+8, 13+9 | +| 9 | 10 | 8+6, 4+7, 5+9, 9+3, 6+5, 3+8 | +| 10 | 20 | 17+7, 18+6, 13+8, 16+9, 15+6, 19+2 | + +## Hero orientation + +Odd pages = hero on the right (`flex-row-reverse`), even pages = hero on the left (matches Doc 1 convention). +Page 10 reuses page 2's hero/footer (splitter6 / cabin3). diff --git a/tasks/cargo-filling/docs/cargo-filling-2.template.html b/tasks/cargo-filling/docs/cargo-filling-2.template.html new file mode 100644 index 0000000..d86cbef --- /dev/null +++ b/tasks/cargo-filling/docs/cargo-filling-2.template.html @@ -0,0 +1,2576 @@ + + +
+ + + + + + +
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 5
+ 
+ 3
+ 
+ 4
+ 
+ 2
+ 
+ 6
+ 
+ 9
+ 
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 19
+ 
+ 17
+ 
+ 15
+ 
+ 18
+ 
+ 14
+ 
+ 12
+ 
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 3
+ 
+ 5
+ 
+ 6
+ 
+ 2
+ 
+ 8
+ 
+ 4
+ 
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 12
+ 
+ 18
+ 
+ 19
+ 
+ 14
+ 
+ 17
+ 
+ 16
+ 
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 9
+ 
+ 3
+ 
+ 5
+ 
+ 7
+ 
+ 8
+ 
+ 4
+ 
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 16
+ 
+ 14
+ 
+ 17
+ 
+ 12
+ 
+ 19
+ 
+ 15
+ 
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 5
+ 
+ 6
+ 
+ 7
+ 
+ 8
+ 
+ 3
+ 
+ 2
+ 
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 18
+ 
+ 12
+ 
+ 17
+ 
+ 19
+ 
+ 15
+ 
+ 13
+ 
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 8
+ 
+ 4
+ 
+ 5
+ 
+ 9
+ 
+ 6
+ 
+ 3
+ 
+
+ На какие части нужно расщепить астероид, чтобы заполнить свободное место в трюме? Какой кусочек останется в космосе? Каков общий объём?
+
+ 17
+ 
+ 18
+ 
+ 13
+ 
+ 16
+ 
+ 15
+ 
+ 19
+ 