Skip to content

Commit

Permalink
Merge pull request JuliaLang#115 from CNOT/master
Browse files Browse the repository at this point in the history
added spiral-matrix
  • Loading branch information
SaschaMann authored Jun 26, 2018
2 parents 342d944 + 6562236 commit 6c8a1db
Show file tree
Hide file tree
Showing 5 changed files with 80 additions and 0 deletions.
12 changes: 12 additions & 0 deletions config.json
Original file line number Diff line number Diff line change
Expand Up @@ -407,6 +407,18 @@
"exceptions"
]
},
{
"uuid": "3a2facfd-5ec8-49a0-a5aa-2229f07da896",
"slug": "spiral-matrix",
"core": false,
"unlocked_by": null,
"difficulty": 3,
"topics": [
"matrix",
"mathematics",
"iterators"
]
},
{
"slug": "isbn-verifier",
"uuid": "22b64a2b-7f08-444d-be6e-8b42e5c9207c",
Expand Down
31 changes: 31 additions & 0 deletions exercises/spiral-matrix/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Spiral Matrix

Given the size, return a square matrix of numbers in spiral order.

The matrix should be filled with natural numbers, starting from 1
in the top-left corner, increasing in an inward, clockwise spiral order,
like these examples:

###### Spiral matrix of size 3

```text
1 2 3
8 9 4
7 6 5
```

###### Spiral matrix of size 4

```text
1 2 3 4
12 13 14 5
11 16 15 6
10 9 8 7
```
## Source

Reddit r/dailyprogrammer challenge #320 [Easy] Spiral Ascension. [https://www.reddit.com/r/dailyprogrammer/comments/6i60lr/20170619_challenge_320_easy_spiral_ascension/](https://www.reddit.com/r/dailyprogrammer/comments/6i60lr/20170619_challenge_320_easy_spiral_ascension/)


## Submitting Incomplete Solutions
It's possible to submit an incomplete solution so you can see how others have completed the exercise.
9 changes: 9 additions & 0 deletions exercises/spiral-matrix/example.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#Credit to u/SingularInfinity on Redit: https://www.reddit.com/r/dailyprogrammer/comments/6i60lr/20170619_challenge_320_easy_spiral_ascension/djb8po0

function spiral_matrix(n::Int)
n < 0 && throw(DomainError("n should be positive"))
n == 0 && return Matrix{Int}(0,0)
n == 1 && return reshape(Int[1], 1, 1)
m = (2n - 1) .+ spiral_matrix(n-1)
return [ RowVector(1:n); rot180(m) n+1:2n-1 ]
end
25 changes: 25 additions & 0 deletions exercises/spiral-matrix/runtests.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using Base.Test

include("spiral-matrix.jl")


@testset "Different valid values" begin
@testset "Empty spiral" begin
@test spiral_matrix(0) == Matrix{Int}(0,0)
end
@testset "Trivial spiral" begin
@test spiral_matrix(1) == reshape([1],(1,1))
end
@testset "Spiral of size 2" begin
@test spiral_matrix(2) == [1 2; 4 3]
end
@testset "Spiral of size 3" begin
@test spiral_matrix(3) == [1 2 3; 8 9 4; 7 6 5]
end
@testset "Spiral of size 4" begin
@test spiral_matrix(4) == [1 2 3 4; 12 13 14 5; 11 16 15 6; 10 9 8 7]
end
@testset "Spiral of size 5" begin
@test spiral_matrix(5) == [1 2 3 4 5; 16 17 18 19 6; 15 24 25 20 7; 14 23 22 21 8; 13 12 11 10 9]
end
end
3 changes: 3 additions & 0 deletions exercises/spiral-matrix/spiral-matrix.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
function spiral_matrix(n::Int)

end

0 comments on commit 6c8a1db

Please sign in to comment.