Skip to content

Commit

Permalink
Add rectangles exercise (#124)
Browse files Browse the repository at this point in the history
  • Loading branch information
ErikSchierboom authored Dec 26, 2024
1 parent 3e1484b commit 595472a
Show file tree
Hide file tree
Showing 7 changed files with 245 additions and 0 deletions.
8 changes: 8 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -674,6 +674,14 @@
"prerequisites": [],
"difficulty": 8
},
{
"slug": "rectangles",
"name": "Rectangles",
"uuid": "2c6df8fc-766e-44a5-b30c-0cc14a451c93",
"practices": [],
"prerequisites": [],
"difficulty": 8
},
{
"slug": "game-of-life",
"name": "Conway's Game of Life",
Expand Down
63 changes: 63 additions & 0 deletions exercises/practice/rectangles/.docs/instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# Instructions

Count the rectangles in an ASCII diagram like the one below.

```text
+--+
++ |
+-++--+
| | |
+--+--+
```

The above diagram contains these 6 rectangles:

```text
+-----+
| |
+-----+
```

```text
+--+
| |
| |
| |
+--+
```

```text
+--+
| |
+--+
```

```text
+--+
| |
+--+
```

```text
+--+
| |
+--+
```

```text
++
++
```

You may assume that the input is always a proper rectangle (i.e. the length of every line equals the length of the first line).
17 changes: 17 additions & 0 deletions exercises/practice/rectangles/.meta/config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"authors": [
"erikschierboom"
],
"files": {
"solution": [
"rectangles.ua"
],
"test": [
"tests.ua"
],
"example": [
".meta/example.ua"
]
},
"blurb": "Count the rectangles in an ASCII diagram."
}
12 changes: 12 additions & 0 deletions exercises/practice/rectangles/.meta/example.ua
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Parse ← ⊜∘≠@\n.
Rectangle ← /↧≡(≍⊃↙↘2) ⍜(↙2↘1⊢|⇌) ⍉
Corners ← ▽≡Rectangle. ⧅<4 ⊚=@+
Valid ← (
⊙¤
∩(⍜(-|⇡+1) ⊃(⊢|⊣))°⊟⍉
↧⊃(
/↧∊"+-"♭≡⊡⊞⊂⊂⊃(⊢|⊣)
| /↧∊"+|"♭≡⊡⊞⊂⊙(⊂⊃(⊢|⊣))
)
)
Rectangles ← /+ ≡Valid ⊙¤ ⊸Corners Parse
54 changes: 54 additions & 0 deletions exercises/practice/rectangles/.meta/tests.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# 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.

[485b7bab-4150-40aa-a8db-73013427d08c]
description = "no rows"
include = false

[076929ed-27e8-45dc-b14b-08279944dc49]
description = "no columns"
include = false

[0a8abbd1-a0a4-4180-aa4e-65c1b1a073fa]
description = "no rectangles"

[a4ba42e9-4e7f-4973-b7c7-4ce0760ac6cd]
description = "one rectangle"

[ced06550-83da-4d23-98b7-d24152e0db93]
description = "two rectangles without shared parts"

[5942d69a-a07c-41c8-8b93-2d13877c706a]
description = "five rectangles with shared parts"

[82d70be4-ab37-4bf2-a433-e33778d3bbf1]
description = "rectangle of height 1 is counted"

[57f1bc0e-2782-401e-ab12-7c01d8bfc2e0]
description = "rectangle of width 1 is counted"

[ef0bb65c-bd80-4561-9535-efc4067054f9]
description = "1x1 square is counted"

[e1e1d444-e926-4d30-9bf3-7d8ec9a9e330]
description = "only complete rectangles are counted"

[ca021a84-1281-4a56-9b9b-af14113933a4]
description = "rectangles can be of different sizes"

[51f689a7-ef3f-41ae-aa2f-5ea09ad897ff]
description = "corner is required for a rectangle to be complete"

[d78fe379-8c1b-4d3c-bdf7-29bfb6f6dc66]
description = "large input with many rectangles"

[6ef24e0f-d191-46da-b929-4faca24b4cd2]
description = "rectangles must have four sides"
3 changes: 3 additions & 0 deletions exercises/practice/rectangles/rectangles.ua
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Count the number of rectangles in a grid
# Count ? Grid
Rectangles ← |1 ⊙(⍤"Please implement Rectangles" 0)
88 changes: 88 additions & 0 deletions exercises/practice/rectangles/tests.ua
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
~ "rectangles.ua" ~ Rectangles

# No rectangles
Grid ← $
⍤⤙≍ 0 Rectangles Grid

# One rectangle
Grid ← $ +-+
$ | |
$ +-+
⍤⤙≍ 1 Rectangles Grid

# Two rectangles without shared parts
Grid ← $ +-+
$ | |
$ +-+-+
$ | |
$ +-+
⍤⤙≍ 2 Rectangles Grid

# Five rectangles with shared parts
Grid ← $ +-+
$ | |
$ +-+-+
$ | | |
$ +-+-+
⍤⤙≍ 5 Rectangles Grid

# Rectangle of height 1 is counted
Grid ← $ +--+
$ +--+
⍤⤙≍ 1 Rectangles Grid

# Rectangle of width 1 is counted
Grid ← $ ++
$ ||
$ ++
⍤⤙≍ 1 Rectangles Grid

# 1x1 square is counted
Grid ← $ ++
$ ++
⍤⤙≍ 1 Rectangles Grid

# Only complete rectangles are counted
Grid ← $ +-+
$ |
$ +-+-+
$ | | -
$ +-+-+
⍤⤙≍ 1 Rectangles Grid

# Rectangles can be of different sizes
Grid ← $ +------+----+
$ | | |
$ +---+--+ |
$ | | |
$ +---+-------+
⍤⤙≍ 3 Rectangles Grid

# Corner is required for a rectangle to be complete
Grid ← $ +------+----+
$ | | |
$ +------+ |
$ | | |
$ +---+-------+
⍤⤙≍ 2 Rectangles Grid

# Large input with many rectangles
Grid ← $ +---+--+----+
$ | +--+----+
$ +---+--+ |
$ | +--+----+
$ +---+--+--+-+
$ +---+--+--+-+
$ +------+ | |
$ +-+
⍤⤙≍ 60 Rectangles Grid

# Rectangles must have four sides
Grid ← $ +-+ +-+
$ | | | |
$ +-+-+-+
$ | |
$ +-+-+-+
$ | | | |
$ +-+ +-+
⍤⤙≍ 5 Rectangles Grid

0 comments on commit 595472a

Please sign in to comment.