diff --git a/config.json b/config.json index 01c61442..b9c9e529 100644 --- a/config.json +++ b/config.json @@ -74,6 +74,14 @@ ], "difficulty": 1 }, + { + "slug": "square-root", + "name": "Square Root", + "uuid": "b272305d-7c9c-4dfe-b15c-ca950d69ee69", + "practices": [], + "prerequisites": [], + "difficulty": 2 + }, { "slug": "collatz-conjecture", "name": "Collatz Conjecture", diff --git a/exercises/practice/square-root/.docs/instructions.md b/exercises/practice/square-root/.docs/instructions.md new file mode 100644 index 00000000..e9905e9d --- /dev/null +++ b/exercises/practice/square-root/.docs/instructions.md @@ -0,0 +1,13 @@ +# Instructions + +Given a natural radicand, return its square root. + +Note that the term "radicand" refers to the number for which the root is to be determined. +That is, it is the number under the root symbol. + +Check out the Wikipedia pages on [square root][square-root] and [methods of computing square roots][computing-square-roots]. + +Recall also that natural numbers are positive real whole numbers (i.e. 1, 2, 3 and up). + +[square-root]: https://en.wikipedia.org/wiki/Square_root +[computing-square-roots]: https://en.wikipedia.org/wiki/Methods_of_computing_square_roots diff --git a/exercises/practice/square-root/.meta/config.json b/exercises/practice/square-root/.meta/config.json new file mode 100644 index 00000000..824ed52a --- /dev/null +++ b/exercises/practice/square-root/.meta/config.json @@ -0,0 +1,19 @@ +{ + "authors": [ + "keiravillekode" + ], + "files": { + "solution": [ + "square_root.zig" + ], + "test": [ + "test_square_root.zig" + ], + "example": [ + ".meta/example.zig" + ] + }, + "blurb": "Given a natural radicand, return its square root.", + "source": "wolf99", + "source_url": "https://github.com/exercism/problem-specifications/pull/1582" +} diff --git a/exercises/practice/square-root/.meta/example.zig b/exercises/practice/square-root/.meta/example.zig new file mode 100644 index 00000000..547c22ce --- /dev/null +++ b/exercises/practice/square-root/.meta/example.zig @@ -0,0 +1,7 @@ +pub fn squareRoot(radicand: usize) usize { + var result: usize = 0; + while (result * result < radicand) { + result += 1; + } + return result; +} diff --git a/exercises/practice/square-root/.meta/tests.toml b/exercises/practice/square-root/.meta/tests.toml new file mode 100644 index 00000000..ead7882f --- /dev/null +++ b/exercises/practice/square-root/.meta/tests.toml @@ -0,0 +1,28 @@ +# 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. + +[9b748478-7b0a-490c-b87a-609dacf631fd] +description = "root of 1" + +[7d3aa9ba-9ac6-4e93-a18b-2e8b477139bb] +description = "root of 4" + +[6624aabf-3659-4ae0-a1c8-25ae7f33c6ef] +description = "root of 25" + +[93beac69-265e-4429-abb1-94506b431f81] +description = "root of 81" + +[fbddfeda-8c4f-4bc4-87ca-6991af35360e] +description = "root of 196" + +[c03d0532-8368-4734-a8e0-f96a9eb7fc1d] +description = "root of 65025" diff --git a/exercises/practice/square-root/square_root.zig b/exercises/practice/square-root/square_root.zig new file mode 100644 index 00000000..a36a48a0 --- /dev/null +++ b/exercises/practice/square-root/square_root.zig @@ -0,0 +1,4 @@ +pub fn squareRoot(radicand: usize) usize { + _ = radicand; + @compileError("please implement the squareRoot function"); +} diff --git a/exercises/practice/square-root/test_square_root.zig b/exercises/practice/square-root/test_square_root.zig new file mode 100644 index 00000000..1135c08a --- /dev/null +++ b/exercises/practice/square-root/test_square_root.zig @@ -0,0 +1,40 @@ +const std = @import("std"); +const testing = std.testing; + +const square_root = @import("square_root.zig"); + +test "root of 1" { + const expected: usize = 1; + const actual = square_root.squareRoot(1); + try testing.expectEqual(expected, actual); +} + +test "root of 4" { + const expected: usize = 2; + const actual = square_root.squareRoot(4); + try testing.expectEqual(expected, actual); +} + +test "root of 25" { + const expected: usize = 5; + const actual = square_root.squareRoot(25); + try testing.expectEqual(expected, actual); +} + +test "root of 81" { + const expected: usize = 9; + const actual = square_root.squareRoot(81); + try testing.expectEqual(expected, actual); +} + +test "root of 196" { + const expected: usize = 14; + const actual = square_root.squareRoot(196); + try testing.expectEqual(expected, actual); +} + +test "root of 65025" { + const expected: usize = 255; + const actual = square_root.squareRoot(65025); + try testing.expectEqual(expected, actual); +}