From 27e90a701121d8e4379be5e3495197a90e69bf97 Mon Sep 17 00:00:00 2001 From: habere-et-dispertire Date: Thu, 15 Jun 2023 01:34:29 +0100 Subject: [PATCH 1/6] [transpose] Implementation --- config.json | 11 ++- .../practice/transpose/.docs/instructions.md | 61 +++++++++++++ .../practice/transpose/.meta/config.json | 19 ++++ .../.meta/solutions/Transpose.rakumod | 10 +++ .../.meta/solutions/transpose.rakutest | 1 + .../transpose/.meta/template-data.yaml | 27 ++++++ exercises/practice/transpose/.meta/tests.toml | 46 ++++++++++ .../practice/transpose/Transpose.rakumod | 2 + .../practice/transpose/transpose.rakutest | 90 +++++++++++++++++++ 9 files changed, 266 insertions(+), 1 deletion(-) create mode 100644 exercises/practice/transpose/.docs/instructions.md create mode 100644 exercises/practice/transpose/.meta/config.json create mode 100644 exercises/practice/transpose/.meta/solutions/Transpose.rakumod create mode 120000 exercises/practice/transpose/.meta/solutions/transpose.rakutest create mode 100644 exercises/practice/transpose/.meta/template-data.yaml create mode 100644 exercises/practice/transpose/.meta/tests.toml create mode 100644 exercises/practice/transpose/Transpose.rakumod create mode 100755 exercises/practice/transpose/transpose.rakutest diff --git a/config.json b/config.json index ee605c1b..19dec235 100644 --- a/config.json +++ b/config.json @@ -481,7 +481,16 @@ "prerequisites": [], "difficulty": 1, "topics": [] - } + }, + { + "slug": "transpose", + "name": "Transpose", + "uuid": "1071ff62-8951-4176-bfcf-0f36b0b122a1", + "practices": [], + "prerequisites": [], + "difficulty": 1, + "topics": [] + } ] }, "concepts": [], diff --git a/exercises/practice/transpose/.docs/instructions.md b/exercises/practice/transpose/.docs/instructions.md new file mode 100644 index 00000000..6033af74 --- /dev/null +++ b/exercises/practice/transpose/.docs/instructions.md @@ -0,0 +1,61 @@ +# Instructions + +Given an input text output it transposed. + +Roughly explained, the transpose of a matrix: + +```text +ABC +DEF +``` + +is given by: + +```text +AD +BE +CF +``` + +Rows become columns and columns become rows. +See [transpose][]. + +If the input has rows of different lengths, this is to be solved as follows: + +- Pad to the left with spaces. +- Don't pad to the right. + +Therefore, transposing this matrix: + +```text +ABC +DE +``` + +results in: + +```text +AD +BE +C +``` + +And transposing: + +```text +AB +DEF +``` + +results in: + +```text +AD +BE + F +``` + +In general, all characters from the input should also be present in the transposed output. +That means that if a column in the input text contains only spaces on its bottom-most row(s), the corresponding output row should contain the spaces in its right-most column(s). + +[transpose]: https://en.wikipedia.org/wiki/Transpose diff --git a/exercises/practice/transpose/.meta/config.json b/exercises/practice/transpose/.meta/config.json new file mode 100644 index 00000000..b3b0a0f1 --- /dev/null +++ b/exercises/practice/transpose/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "habere-et-dispetire" + ], + "files": { + "solution": [ + "Transpose.rakumod" + ], + "test": [ + "transpose.rakutest" + ], + "example": [ + ".meta/solutions/Transpose.rakumod" + ] + }, + "blurb": "Take input text and output it transposed.", + "source": "Reddit r/dailyprogrammer challenge #270 [Easy].", + "source_url": "https://www.reddit.com/r/dailyprogrammer/comments/4msu2x/challenge_270_easy_transpose_the_input_text" +} diff --git a/exercises/practice/transpose/.meta/solutions/Transpose.rakumod b/exercises/practice/transpose/.meta/solutions/Transpose.rakumod new file mode 100644 index 00000000..1d2c34f6 --- /dev/null +++ b/exercises/practice/transpose/.meta/solutions/Transpose.rakumod @@ -0,0 +1,10 @@ +sub transpose ($text) is export { + my @matrix; + + for $text.lines.pairs + -> $line { + @matrix[ .key ; $line.key ] = .value for $line.value.comb.pairs + } + + return @matrix.deepmap( { .defined ?? $_ !! ' ' } ).map( *.join ).join: "\n"; +} diff --git a/exercises/practice/transpose/.meta/solutions/transpose.rakutest b/exercises/practice/transpose/.meta/solutions/transpose.rakutest new file mode 120000 index 00000000..f8e77f49 --- /dev/null +++ b/exercises/practice/transpose/.meta/solutions/transpose.rakutest @@ -0,0 +1 @@ +../../transpose.rakutest \ No newline at end of file diff --git a/exercises/practice/transpose/.meta/template-data.yaml b/exercises/practice/transpose/.meta/template-data.yaml new file mode 100644 index 00000000..8a336b78 --- /dev/null +++ b/exercises/practice/transpose/.meta/template-data.yaml @@ -0,0 +1,27 @@ +properties: + transpose: + test: |- + sprintf(q:to/END/, %case.join("\n").raku, %case.join("\n").raku, %case.raku); + cmp-ok( + transpose(%s), + "eq", + %s, + %s, + ); + END + +example: |- + sub transpose ($text) is export { + my @matrix; + + for $text.lines.pairs + -> $line { + @matrix[ .key ; $line.key ] = .value for $line.value.comb.pairs + } + + return @matrix.deepmap( { .defined ?? $_ !! ' ' } ).map( *.join ).join: "\n"; + } + +stub: |- + sub transpose ($text) is export { + } diff --git a/exercises/practice/transpose/.meta/tests.toml b/exercises/practice/transpose/.meta/tests.toml new file mode 100644 index 00000000..32e366fb --- /dev/null +++ b/exercises/practice/transpose/.meta/tests.toml @@ -0,0 +1,46 @@ +# This is an auto-generated file. +# +# Regenerating this file via `configlet sync` will: +# - Recreate every `description` key/value pair +# - Recreate every `reimplements` key/value pair, where they exist in problem-specifications +# - Remove any `include = true` key/value pair (an omitted `include` key implies inclusion) +# - Preserve any other key/value pair +# +# As user-added comments (using the # character) will be removed when this file +# is regenerated, comments can be added via a `comment` key. + +[404b7262-c050-4df0-a2a2-0cb06cd6a821] +description = "empty string" + +[a89ce8a3-c940-4703-a688-3ea39412fbcb] +description = "two characters in a row" + +[855bb6ae-4180-457c-abd0-ce489803ce98] +description = "two characters in a column" + +[5ceda1c0-f940-441c-a244-0ced197769c8] +description = "simple" + +[a54675dd-ae7d-4a58-a9c4-0c20e99a7c1f] +description = "single line" + +[0dc2ec0b-549d-4047-aeeb-8029fec8d5c5] +description = "first line longer than second line" + +[984e2ec3-b3d3-4b53-8bd6-96f5ef404102] +description = "second line longer than first line" + +[eccd3784-45f0-4a3f-865a-360cb323d314] +description = "mixed line length" + +[85b96b3f-d00c-4f80-8ca2-c8a5c9216c2d] +description = "square" + +[b9257625-7a53-4748-8863-e08e9d27071d] +description = "rectangle" + +[b80badc9-057e-4543-bd07-ce1296a1ea2c] +description = "triangle" + +[76acfd50-5596-4d05-89f1-5116328a7dd9] +description = "jagged triangle" diff --git a/exercises/practice/transpose/Transpose.rakumod b/exercises/practice/transpose/Transpose.rakumod new file mode 100644 index 00000000..26f44e8a --- /dev/null +++ b/exercises/practice/transpose/Transpose.rakumod @@ -0,0 +1,2 @@ +sub transpose ($text) is export { +} diff --git a/exercises/practice/transpose/transpose.rakutest b/exercises/practice/transpose/transpose.rakutest new file mode 100755 index 00000000..4cc6d294 --- /dev/null +++ b/exercises/practice/transpose/transpose.rakutest @@ -0,0 +1,90 @@ +#!/usr/bin/env raku +use Test; +use lib $?FILE.IO.dirname; +use Transpose; + +cmp-ok( # begin: 404b7262-c050-4df0-a2a2-0cb06cd6a821 + transpose(""), + "eq", + "", + "empty string", +); # end: 404b7262-c050-4df0-a2a2-0cb06cd6a821 + +cmp-ok( # begin: a89ce8a3-c940-4703-a688-3ea39412fbcb + transpose("A1"), + "eq", + "A\n1", + "two characters in a row", +); # end: a89ce8a3-c940-4703-a688-3ea39412fbcb + +cmp-ok( # begin: 855bb6ae-4180-457c-abd0-ce489803ce98 + transpose("A\n1"), + "eq", + "A1", + "two characters in a column", +); # end: 855bb6ae-4180-457c-abd0-ce489803ce98 + +cmp-ok( # begin: 5ceda1c0-f940-441c-a244-0ced197769c8 + transpose("ABC\n123"), + "eq", + "A1\nB2\nC3", + "simple", +); # end: 5ceda1c0-f940-441c-a244-0ced197769c8 + +cmp-ok( # begin: a54675dd-ae7d-4a58-a9c4-0c20e99a7c1f + transpose("Single line."), + "eq", + "S\ni\nn\ng\nl\ne\n \nl\ni\nn\ne\n.", + "single line", +); # end: a54675dd-ae7d-4a58-a9c4-0c20e99a7c1f + +cmp-ok( # begin: 0dc2ec0b-549d-4047-aeeb-8029fec8d5c5 + transpose("The fourth line.\nThe fifth line."), + "eq", + "TT\nhh\nee\n \nff\noi\nuf\nrt\nth\nh \n l\nli\nin\nne\ne.\n.", + "first line longer than second line", +); # end: 0dc2ec0b-549d-4047-aeeb-8029fec8d5c5 + +cmp-ok( # begin: 984e2ec3-b3d3-4b53-8bd6-96f5ef404102 + transpose("The first line.\nThe second line."), + "eq", + "TT\nhh\nee\n \nfs\nie\nrc\nso\ntn\n d\nl \nil\nni\nen\n.e\n .", + "second line longer than first line", +); # end: 984e2ec3-b3d3-4b53-8bd6-96f5ef404102 + +cmp-ok( # begin: eccd3784-45f0-4a3f-865a-360cb323d314 + transpose("The longest line.\nA long line.\nA longer line.\nA line."), + "eq", + "TAAA\nh \nelll\n ooi\nlnnn\nogge\nn e.\nglr\nei \nsnl\ntei\n .n\nl e\ni .\nn\ne\n.", + "mixed line length", +); # end: eccd3784-45f0-4a3f-865a-360cb323d314 + +cmp-ok( # begin: 85b96b3f-d00c-4f80-8ca2-c8a5c9216c2d + transpose("HEART\nEMBER\nABUSE\nRESIN\nTREND"), + "eq", + "HEART\nEMBER\nABUSE\nRESIN\nTREND", + "square", +); # end: 85b96b3f-d00c-4f80-8ca2-c8a5c9216c2d + +cmp-ok( # begin: b9257625-7a53-4748-8863-e08e9d27071d + transpose("FRACTURE\nOUTLINED\nBLOOMING\nSEPTETTE"), + "eq", + "FOBS\nRULE\nATOP\nCLOT\nTIME\nUNIT\nRENT\nEDGE", + "rectangle", +); # end: b9257625-7a53-4748-8863-e08e9d27071d + +cmp-ok( # begin: b80badc9-057e-4543-bd07-ce1296a1ea2c + transpose("T\nEE\nAAA\nSSSS\nEEEEE\nRRRRRR"), + "eq", + "TEASER\n EASER\n ASER\n SER\n ER\n R", + "triangle", +); # end: b80badc9-057e-4543-bd07-ce1296a1ea2c + +cmp-ok( # begin: 76acfd50-5596-4d05-89f1-5116328a7dd9 + transpose("11\n2\n3333\n444\n555555\n66666"), + "eq", + "123456\n1 3456\n 3456\n 3 56\n 56\n 5", + "jagged triangle", +); # end: 76acfd50-5596-4d05-89f1-5116328a7dd9 + +done-testing; From f541db08144bff0a96e8859c5a9a8694586b3d9c Mon Sep 17 00:00:00 2001 From: habere-et-dispertire Date: Thu, 15 Jun 2023 01:54:05 +0100 Subject: [PATCH 2/6] [typo] author name --- exercises/practice/transpose/.meta/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exercises/practice/transpose/.meta/config.json b/exercises/practice/transpose/.meta/config.json index b3b0a0f1..a47982f9 100644 --- a/exercises/practice/transpose/.meta/config.json +++ b/exercises/practice/transpose/.meta/config.json @@ -1,6 +1,6 @@ { "authors": [ - "habere-et-dispetire" + "habere-et-dispertire" ], "files": { "solution": [ From d48695f49b00d9f2f3558d438e28d72583a4402b Mon Sep 17 00:00:00 2001 From: habere-et-dispertire Date: Fri, 23 Jun 2023 10:48:24 +0100 Subject: [PATCH 3/6] Added unit module --- exercises/practice/transpose/.meta/solutions/Transpose.rakumod | 2 ++ exercises/practice/transpose/.meta/template-data.yaml | 2 ++ exercises/practice/transpose/Transpose.rakumod | 2 ++ 3 files changed, 6 insertions(+) diff --git a/exercises/practice/transpose/.meta/solutions/Transpose.rakumod b/exercises/practice/transpose/.meta/solutions/Transpose.rakumod index 1d2c34f6..58221185 100644 --- a/exercises/practice/transpose/.meta/solutions/Transpose.rakumod +++ b/exercises/practice/transpose/.meta/solutions/Transpose.rakumod @@ -1,3 +1,5 @@ +unit module Transpose; + sub transpose ($text) is export { my @matrix; diff --git a/exercises/practice/transpose/.meta/template-data.yaml b/exercises/practice/transpose/.meta/template-data.yaml index 8a336b78..cb521eb8 100644 --- a/exercises/practice/transpose/.meta/template-data.yaml +++ b/exercises/practice/transpose/.meta/template-data.yaml @@ -1,3 +1,5 @@ +unit: module + properties: transpose: test: |- diff --git a/exercises/practice/transpose/Transpose.rakumod b/exercises/practice/transpose/Transpose.rakumod index 26f44e8a..efb23874 100644 --- a/exercises/practice/transpose/Transpose.rakumod +++ b/exercises/practice/transpose/Transpose.rakumod @@ -1,2 +1,4 @@ +unit module Transpose; + sub transpose ($text) is export { } From 42ed0ebba70c05a4a8c3d12ee7a62e6d0d6b0507 Mon Sep 17 00:00:00 2001 From: Daniel Mita Date: Sun, 25 Jun 2023 14:33:04 +0100 Subject: [PATCH 4/6] Use heredoc for clearer display of input/output --- .../transpose/.meta/template-data.yaml | 8 +- .../practice/transpose/transpose.rakutest | 199 +++++++++++++++--- 2 files changed, 180 insertions(+), 27 deletions(-) diff --git a/exercises/practice/transpose/.meta/template-data.yaml b/exercises/practice/transpose/.meta/template-data.yaml index cb521eb8..06d87673 100644 --- a/exercises/practice/transpose/.meta/template-data.yaml +++ b/exercises/practice/transpose/.meta/template-data.yaml @@ -3,11 +3,13 @@ unit: module properties: transpose: test: |- - sprintf(q:to/END/, %case.join("\n").raku, %case.join("\n").raku, %case.raku); + sprintf(q:to/END/, (given %case {$_ ?? .append('').join("\n ") !! ""}) , (given %case {$_ ?? .append('').join("\n ") !! ""}), %case.raku); cmp-ok( - transpose(%s), + transpose(q:to/---/.trim), + %s--- "eq", - %s, + q:to/---/.trim, + %s--- %s, ); END diff --git a/exercises/practice/transpose/transpose.rakutest b/exercises/practice/transpose/transpose.rakutest index 4cc6d294..c4f2decc 100755 --- a/exercises/practice/transpose/transpose.rakutest +++ b/exercises/practice/transpose/transpose.rakutest @@ -4,86 +4,237 @@ use lib $?FILE.IO.dirname; use Transpose; cmp-ok( # begin: 404b7262-c050-4df0-a2a2-0cb06cd6a821 - transpose(""), + transpose(q:to/---/.trim), + --- "eq", - "", + q:to/---/.trim, + --- "empty string", ); # end: 404b7262-c050-4df0-a2a2-0cb06cd6a821 cmp-ok( # begin: a89ce8a3-c940-4703-a688-3ea39412fbcb - transpose("A1"), + transpose(q:to/---/.trim), + A1 + --- "eq", - "A\n1", + q:to/---/.trim, + A + 1 + --- "two characters in a row", ); # end: a89ce8a3-c940-4703-a688-3ea39412fbcb cmp-ok( # begin: 855bb6ae-4180-457c-abd0-ce489803ce98 - transpose("A\n1"), + transpose(q:to/---/.trim), + A + 1 + --- "eq", - "A1", + q:to/---/.trim, + A1 + --- "two characters in a column", ); # end: 855bb6ae-4180-457c-abd0-ce489803ce98 cmp-ok( # begin: 5ceda1c0-f940-441c-a244-0ced197769c8 - transpose("ABC\n123"), + transpose(q:to/---/.trim), + ABC + 123 + --- "eq", - "A1\nB2\nC3", + q:to/---/.trim, + A1 + B2 + C3 + --- "simple", ); # end: 5ceda1c0-f940-441c-a244-0ced197769c8 cmp-ok( # begin: a54675dd-ae7d-4a58-a9c4-0c20e99a7c1f - transpose("Single line."), + transpose(q:to/---/.trim), + Single line. + --- "eq", - "S\ni\nn\ng\nl\ne\n \nl\ni\nn\ne\n.", + q:to/---/.trim, + S + i + n + g + l + e + + l + i + n + e + . + --- "single line", ); # end: a54675dd-ae7d-4a58-a9c4-0c20e99a7c1f cmp-ok( # begin: 0dc2ec0b-549d-4047-aeeb-8029fec8d5c5 - transpose("The fourth line.\nThe fifth line."), + transpose(q:to/---/.trim), + The fourth line. + The fifth line. + --- "eq", - "TT\nhh\nee\n \nff\noi\nuf\nrt\nth\nh \n l\nli\nin\nne\ne.\n.", + q:to/---/.trim, + TT + hh + ee + + ff + oi + uf + rt + th + h + l + li + in + ne + e. + . + --- "first line longer than second line", ); # end: 0dc2ec0b-549d-4047-aeeb-8029fec8d5c5 cmp-ok( # begin: 984e2ec3-b3d3-4b53-8bd6-96f5ef404102 - transpose("The first line.\nThe second line."), + transpose(q:to/---/.trim), + The first line. + The second line. + --- "eq", - "TT\nhh\nee\n \nfs\nie\nrc\nso\ntn\n d\nl \nil\nni\nen\n.e\n .", + q:to/---/.trim, + TT + hh + ee + + fs + ie + rc + so + tn + d + l + il + ni + en + .e + . + --- "second line longer than first line", ); # end: 984e2ec3-b3d3-4b53-8bd6-96f5ef404102 cmp-ok( # begin: eccd3784-45f0-4a3f-865a-360cb323d314 - transpose("The longest line.\nA long line.\nA longer line.\nA line."), + transpose(q:to/---/.trim), + The longest line. + A long line. + A longer line. + A line. + --- "eq", - "TAAA\nh \nelll\n ooi\nlnnn\nogge\nn e.\nglr\nei \nsnl\ntei\n .n\nl e\ni .\nn\ne\n.", + q:to/---/.trim, + TAAA + h + elll + ooi + lnnn + ogge + n e. + glr + ei + snl + tei + .n + l e + i . + n + e + . + --- "mixed line length", ); # end: eccd3784-45f0-4a3f-865a-360cb323d314 cmp-ok( # begin: 85b96b3f-d00c-4f80-8ca2-c8a5c9216c2d - transpose("HEART\nEMBER\nABUSE\nRESIN\nTREND"), + transpose(q:to/---/.trim), + HEART + EMBER + ABUSE + RESIN + TREND + --- "eq", - "HEART\nEMBER\nABUSE\nRESIN\nTREND", + q:to/---/.trim, + HEART + EMBER + ABUSE + RESIN + TREND + --- "square", ); # end: 85b96b3f-d00c-4f80-8ca2-c8a5c9216c2d cmp-ok( # begin: b9257625-7a53-4748-8863-e08e9d27071d - transpose("FRACTURE\nOUTLINED\nBLOOMING\nSEPTETTE"), + transpose(q:to/---/.trim), + FRACTURE + OUTLINED + BLOOMING + SEPTETTE + --- "eq", - "FOBS\nRULE\nATOP\nCLOT\nTIME\nUNIT\nRENT\nEDGE", + q:to/---/.trim, + FOBS + RULE + ATOP + CLOT + TIME + UNIT + RENT + EDGE + --- "rectangle", ); # end: b9257625-7a53-4748-8863-e08e9d27071d cmp-ok( # begin: b80badc9-057e-4543-bd07-ce1296a1ea2c - transpose("T\nEE\nAAA\nSSSS\nEEEEE\nRRRRRR"), + transpose(q:to/---/.trim), + T + EE + AAA + SSSS + EEEEE + RRRRRR + --- "eq", - "TEASER\n EASER\n ASER\n SER\n ER\n R", + q:to/---/.trim, + TEASER + EASER + ASER + SER + ER + R + --- "triangle", ); # end: b80badc9-057e-4543-bd07-ce1296a1ea2c cmp-ok( # begin: 76acfd50-5596-4d05-89f1-5116328a7dd9 - transpose("11\n2\n3333\n444\n555555\n66666"), + transpose(q:to/---/.trim), + 11 + 2 + 3333 + 444 + 555555 + 66666 + --- "eq", - "123456\n1 3456\n 3456\n 3 56\n 56\n 5", + q:to/---/.trim, + 123456 + 1 3456 + 3456 + 3 56 + 56 + 5 + --- "jagged triangle", ); # end: 76acfd50-5596-4d05-89f1-5116328a7dd9 From 590b3f668dba0782da7bba9d1b1eb7dbeeaee2a0 Mon Sep 17 00:00:00 2001 From: Daniel Mita Date: Sun, 25 Jun 2023 14:33:59 +0100 Subject: [PATCH 5/6] Update config.json --- exercises/practice/transpose/.meta/config.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/exercises/practice/transpose/.meta/config.json b/exercises/practice/transpose/.meta/config.json index a47982f9..c16c419d 100644 --- a/exercises/practice/transpose/.meta/config.json +++ b/exercises/practice/transpose/.meta/config.json @@ -1,6 +1,7 @@ { "authors": [ - "habere-et-dispertire" + "habere-et-dispertire", + "m-dango" ], "files": { "solution": [ From c261fdaae8e2afc5cd544628b3efb399b783e8ef Mon Sep 17 00:00:00 2001 From: Daniel Mita Date: Sun, 25 Jun 2023 14:48:25 +0100 Subject: [PATCH 6/6] Add spacing for improved readability --- .../transpose/.meta/template-data.yaml | 3 ++ .../practice/transpose/transpose.rakutest | 36 +++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/exercises/practice/transpose/.meta/template-data.yaml b/exercises/practice/transpose/.meta/template-data.yaml index 06d87673..8eab4a4c 100644 --- a/exercises/practice/transpose/.meta/template-data.yaml +++ b/exercises/practice/transpose/.meta/template-data.yaml @@ -7,9 +7,12 @@ properties: cmp-ok( transpose(q:to/---/.trim), %s--- + "eq", + q:to/---/.trim, %s--- + %s, ); END diff --git a/exercises/practice/transpose/transpose.rakutest b/exercises/practice/transpose/transpose.rakutest index c4f2decc..e1ec4fcf 100755 --- a/exercises/practice/transpose/transpose.rakutest +++ b/exercises/practice/transpose/transpose.rakutest @@ -6,9 +6,12 @@ use Transpose; cmp-ok( # begin: 404b7262-c050-4df0-a2a2-0cb06cd6a821 transpose(q:to/---/.trim), --- + "eq", + q:to/---/.trim, --- + "empty string", ); # end: 404b7262-c050-4df0-a2a2-0cb06cd6a821 @@ -16,11 +19,14 @@ cmp-ok( # begin: a89ce8a3-c940-4703-a688-3ea39412fbcb transpose(q:to/---/.trim), A1 --- + "eq", + q:to/---/.trim, A 1 --- + "two characters in a row", ); # end: a89ce8a3-c940-4703-a688-3ea39412fbcb @@ -29,10 +35,13 @@ cmp-ok( # begin: 855bb6ae-4180-457c-abd0-ce489803ce98 A 1 --- + "eq", + q:to/---/.trim, A1 --- + "two characters in a column", ); # end: 855bb6ae-4180-457c-abd0-ce489803ce98 @@ -41,12 +50,15 @@ cmp-ok( # begin: 5ceda1c0-f940-441c-a244-0ced197769c8 ABC 123 --- + "eq", + q:to/---/.trim, A1 B2 C3 --- + "simple", ); # end: 5ceda1c0-f940-441c-a244-0ced197769c8 @@ -54,7 +66,9 @@ cmp-ok( # begin: a54675dd-ae7d-4a58-a9c4-0c20e99a7c1f transpose(q:to/---/.trim), Single line. --- + "eq", + q:to/---/.trim, S i @@ -69,6 +83,7 @@ cmp-ok( # begin: a54675dd-ae7d-4a58-a9c4-0c20e99a7c1f e . --- + "single line", ); # end: a54675dd-ae7d-4a58-a9c4-0c20e99a7c1f @@ -77,7 +92,9 @@ cmp-ok( # begin: 0dc2ec0b-549d-4047-aeeb-8029fec8d5c5 The fourth line. The fifth line. --- + "eq", + q:to/---/.trim, TT hh @@ -96,6 +113,7 @@ cmp-ok( # begin: 0dc2ec0b-549d-4047-aeeb-8029fec8d5c5 e. . --- + "first line longer than second line", ); # end: 0dc2ec0b-549d-4047-aeeb-8029fec8d5c5 @@ -104,7 +122,9 @@ cmp-ok( # begin: 984e2ec3-b3d3-4b53-8bd6-96f5ef404102 The first line. The second line. --- + "eq", + q:to/---/.trim, TT hh @@ -123,6 +143,7 @@ cmp-ok( # begin: 984e2ec3-b3d3-4b53-8bd6-96f5ef404102 .e . --- + "second line longer than first line", ); # end: 984e2ec3-b3d3-4b53-8bd6-96f5ef404102 @@ -133,7 +154,9 @@ cmp-ok( # begin: eccd3784-45f0-4a3f-865a-360cb323d314 A longer line. A line. --- + "eq", + q:to/---/.trim, TAAA h @@ -153,6 +176,7 @@ cmp-ok( # begin: eccd3784-45f0-4a3f-865a-360cb323d314 e . --- + "mixed line length", ); # end: eccd3784-45f0-4a3f-865a-360cb323d314 @@ -164,7 +188,9 @@ cmp-ok( # begin: 85b96b3f-d00c-4f80-8ca2-c8a5c9216c2d RESIN TREND --- + "eq", + q:to/---/.trim, HEART EMBER @@ -172,6 +198,7 @@ cmp-ok( # begin: 85b96b3f-d00c-4f80-8ca2-c8a5c9216c2d RESIN TREND --- + "square", ); # end: 85b96b3f-d00c-4f80-8ca2-c8a5c9216c2d @@ -182,7 +209,9 @@ cmp-ok( # begin: b9257625-7a53-4748-8863-e08e9d27071d BLOOMING SEPTETTE --- + "eq", + q:to/---/.trim, FOBS RULE @@ -193,6 +222,7 @@ cmp-ok( # begin: b9257625-7a53-4748-8863-e08e9d27071d RENT EDGE --- + "rectangle", ); # end: b9257625-7a53-4748-8863-e08e9d27071d @@ -205,7 +235,9 @@ cmp-ok( # begin: b80badc9-057e-4543-bd07-ce1296a1ea2c EEEEE RRRRRR --- + "eq", + q:to/---/.trim, TEASER EASER @@ -214,6 +246,7 @@ cmp-ok( # begin: b80badc9-057e-4543-bd07-ce1296a1ea2c ER R --- + "triangle", ); # end: b80badc9-057e-4543-bd07-ce1296a1ea2c @@ -226,7 +259,9 @@ cmp-ok( # begin: 76acfd50-5596-4d05-89f1-5116328a7dd9 555555 66666 --- + "eq", + q:to/---/.trim, 123456 1 3456 @@ -235,6 +270,7 @@ cmp-ok( # begin: 76acfd50-5596-4d05-89f1-5116328a7dd9 56 5 --- + "jagged triangle", ); # end: 76acfd50-5596-4d05-89f1-5116328a7dd9