From 2ba3b07a4231fdde1c342af6dc89b06aa4a9cbfb Mon Sep 17 00:00:00 2001 From: Erik Schierboom Date: Tue, 12 Nov 2024 15:58:22 +0100 Subject: [PATCH] Add `largest-series-product` exercise --- config.json | 8 +++ .../.docs/instructions.md | 26 ++++++++ .../.docs/introduction.md | 5 ++ .../largest-series-product/.meta/config.json | 19 ++++++ .../largest-series-product/.meta/example.ua | 0 .../largest-series-product/.meta/tests.toml | 60 +++++++++++++++++++ .../largest-series-product.ua | 1 + .../practice/largest-series-product/tests.ua | 12 ++++ 8 files changed, 131 insertions(+) create mode 100644 exercises/practice/largest-series-product/.docs/instructions.md create mode 100644 exercises/practice/largest-series-product/.docs/introduction.md create mode 100644 exercises/practice/largest-series-product/.meta/config.json create mode 100644 exercises/practice/largest-series-product/.meta/example.ua create mode 100644 exercises/practice/largest-series-product/.meta/tests.toml create mode 100644 exercises/practice/largest-series-product/largest-series-product.ua create mode 100644 exercises/practice/largest-series-product/tests.ua diff --git a/config.json b/config.json index cfa1c8c..da29068 100644 --- a/config.json +++ b/config.json @@ -37,6 +37,14 @@ "practices": [], "prerequisites": [], "difficulty": 1 + }, + { + "slug": "largest-series-product", + "name": "Largest Series Product", + "uuid": "b6f74823-beaa-4246-b8a0-847fadb54727", + "practices": [], + "prerequisites": [], + "difficulty": 5 } ] }, diff --git a/exercises/practice/largest-series-product/.docs/instructions.md b/exercises/practice/largest-series-product/.docs/instructions.md new file mode 100644 index 0000000..f297b57 --- /dev/null +++ b/exercises/practice/largest-series-product/.docs/instructions.md @@ -0,0 +1,26 @@ +# Instructions + +Your task is to look for patterns in the long sequence of digits in the encrypted signal. + +The technique you're going to use here is called the largest series product. + +Let's define a few terms, first. + +- **input**: the sequence of digits that you need to analyze +- **series**: a sequence of adjacent digits (those that are next to each other) that is contained within the input +- **span**: how many digits long each series is +- **product**: what you get when you multiply numbers together + +Let's work through an example, with the input `"63915"`. + +- To form a series, take adjacent digits in the original input. +- If you are working with a span of `3`, there will be three possible series: + - `"639"` + - `"391"` + - `"915"` +- Then we need to calculate the product of each series: + - The product of the series `"639"` is 162 (`6 × 3 × 9 = 162`) + - The product of the series `"391"` is 27 (`3 × 9 × 1 = 27`) + - The product of the series `"915"` is 45 (`9 × 1 × 5 = 45`) +- 162 is bigger than both 27 and 45, so the largest series product of `"63915"` is from the series `"639"`. + So the answer is **162**. diff --git a/exercises/practice/largest-series-product/.docs/introduction.md b/exercises/practice/largest-series-product/.docs/introduction.md new file mode 100644 index 0000000..597bb5f --- /dev/null +++ b/exercises/practice/largest-series-product/.docs/introduction.md @@ -0,0 +1,5 @@ +# Introduction + +You work for a government agency that has intercepted a series of encrypted communication signals from a group of bank robbers. +The signals contain a long sequence of digits. +Your team needs to use various digital signal processing techniques to analyze the signals and identify any patterns that may indicate the planning of a heist. diff --git a/exercises/practice/largest-series-product/.meta/config.json b/exercises/practice/largest-series-product/.meta/config.json new file mode 100644 index 0000000..100820c --- /dev/null +++ b/exercises/practice/largest-series-product/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "erikschierboom" + ], + "files": { + "solution": [ + "largest-series-product.ua" + ], + "test": [ + "tests.ua" + ], + "example": [ + ".meta/example.ua" + ] + }, + "blurb": "Given a string of digits, calculate the largest product for a contiguous substring of digits of length n.", + "source": "A variation on Problem 8 at Project Euler", + "source_url": "https://projecteuler.net/problem=8" +} diff --git a/exercises/practice/largest-series-product/.meta/example.ua b/exercises/practice/largest-series-product/.meta/example.ua new file mode 100644 index 0000000..e69de29 diff --git a/exercises/practice/largest-series-product/.meta/tests.toml b/exercises/practice/largest-series-product/.meta/tests.toml new file mode 100644 index 0000000..6c111ad --- /dev/null +++ b/exercises/practice/largest-series-product/.meta/tests.toml @@ -0,0 +1,60 @@ +# 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. + +[7c82f8b7-e347-48ee-8a22-f672323324d4] +description = "finds the largest product if span equals length" + +[88523f65-21ba-4458-a76a-b4aaf6e4cb5e] +description = "can find the largest product of 2 with numbers in order" + +[f1376b48-1157-419d-92c2-1d7e36a70b8a] +description = "can find the largest product of 2" + +[46356a67-7e02-489e-8fea-321c2fa7b4a4] +description = "can find the largest product of 3 with numbers in order" + +[a2dcb54b-2b8f-4993-92dd-5ce56dece64a] +description = "can find the largest product of 3" + +[673210a3-33cd-4708-940b-c482d7a88f9d] +description = "can find the largest product of 5 with numbers in order" + +[02acd5a6-3bbf-46df-8282-8b313a80a7c9] +description = "can get the largest product of a big number" + +[76dcc407-21e9-424c-a98e-609f269622b5] +description = "reports zero if the only digits are zero" + +[6ef0df9f-52d4-4a5d-b210-f6fae5f20e19] +description = "reports zero if all spans include zero" + +[5d81aaf7-4f67-4125-bf33-11493cc7eab7] +description = "rejects span longer than string length" + +[06bc8b90-0c51-4c54-ac22-3ec3893a079e] +description = "reports 1 for empty string and empty product (0 span)" + +[3ec0d92e-f2e2-4090-a380-70afee02f4c0] +description = "reports 1 for nonempty string and empty product (0 span)" + +[6d96c691-4374-4404-80ee-2ea8f3613dd4] +description = "rejects empty string and nonzero span" + +[7a38f2d6-3c35-45f6-8d6f-12e6e32d4d74] +description = "rejects invalid character in digits" + +[5fe3c0e5-a945-49f2-b584-f0814b4dd1ef] +description = "rejects negative span" +include = false + +[c859f34a-9bfe-4897-9c2f-6d7f8598e7f0] +description = "rejects negative span" +reimplements = "5fe3c0e5-a945-49f2-b584-f0814b4dd1ef" diff --git a/exercises/practice/largest-series-product/largest-series-product.ua b/exercises/practice/largest-series-product/largest-series-product.ua new file mode 100644 index 0000000..02764e3 --- /dev/null +++ b/exercises/practice/largest-series-product/largest-series-product.ua @@ -0,0 +1 @@ +LargestProduct ← |2 /↥ ≡/× ◫ :- @0 ⍤ "span must be smaller than string length" ◡(≤⧻) diff --git a/exercises/practice/largest-series-product/tests.ua b/exercises/practice/largest-series-product/tests.ua new file mode 100644 index 0000000..f4a67a4 --- /dev/null +++ b/exercises/practice/largest-series-product/tests.ua @@ -0,0 +1,12 @@ +~ "largest-series-product.ua" ~ LargestProduct + +⍤⤙≍ 18 LargestProduct "29" 2 # finds the largest product if span equals length +⍤⤙≍ 72 LargestProduct "0123456789" 2 # can find the largest product of 2 with numbers in order +⍤⤙≍ 48 LargestProduct "576802143" 2 # can find the largest product of 2 +⍤⤙≍ 504 LargestProduct "0123456789" 3 # can find the largest product of 3 with numbers in order +⍤⤙≍ 270 LargestProduct "1027839564" 3 # can find the largest product of 3 +⍤⤙≍ 15120 LargestProduct "0123456789" 5 # can find the largest product of 5 with numbers in order +⍤⤙≍ 23520 LargestProduct "73167176531330624919225119674426574742355349194934" 6 # can get the largest product of a big number +⍤⤙≍ 0 LargestProduct "0000" 2 # reports zero if the only digits are zero +⍤⤙≍ 0 LargestProduct "99099" 3 # reports zero if all spans include zero +⍤⤙≍ "span must be smaller than string length" ⍣(LargestProduct "123" 4) # rejects span longer than string length