-
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
spiral-matrix: implement. #526
Changes from all commits
d072f34
581737d
1fc1586
5b1dca9
5952752
21e5cf7
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -724,6 +724,18 @@ | |
"text formatting" | ||
] | ||
}, | ||
{ | ||
"uuid": "666fda78-851e-4bb0-a416-953528f46bd7", | ||
"slug": "spiral-matrix", | ||
"core": false, | ||
"unlocked_by": null, | ||
"difficulty": 2, | ||
"topics": [ | ||
"algorithms", | ||
"control-flow (loops)", | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
|
||
"lists" | ||
] | ||
}, | ||
{ | ||
"uuid": "ecc97fc6-2e72-4325-9b67-b56c83b13a91", | ||
"slug": "grep", | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# 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 | ||
|
||
```plain | ||
1 2 3 | ||
8 9 4 | ||
7 6 5 | ||
``` | ||
|
||
###### Spiral matrix of size 4 | ||
|
||
```plain | ||
1 2 3 4 | ||
12 13 14 5 | ||
11 16 15 6 | ||
10 9 8 7 | ||
``` | ||
## Source | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. There should be a blank line between sections, and there should actually be a To use the $ cd exercism/python # or wherever you have this repo cloned to
$ bin/fetch_configlet
$ bin/configlet generate . --only spiral-matrix |
||
|
||
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. |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
def spiral(size): | ||
m = [[0] * size for i in range(size)] | ||
dx, dy = [0, 1, 0, -1], [1, 0, -1, 0] | ||
x, y, c = 0, -1, 1 | ||
for k in range(2*size - 1): | ||
for j in range((2*size - k) // 2): | ||
x += dx[k % 4] | ||
y += dy[k % 4] | ||
m[x][y] = c | ||
c += 1 | ||
return m |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
def spiral(size): | ||
pass |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import unittest | ||
|
||
from spiral_matrix import spiral | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could you add a comment that this tests are based on version |
||
# Tests are based on the version 1.0.0 of: | ||
# https://github.com/exercism/problem-specifications/blob/master/exercises/spiral-matrix/canonical-data.json | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This comment should be There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. You want me to put something between those two slashes, or not? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. @Average-user, no, it's just a shorthand way of saying that we are skipping some uninteresting directories in the middle. The full path would be |
||
|
||
|
||
class SpiralMatrixTest(unittest.TestCase): | ||
def test_spiral_matrix_of_0(self): | ||
self.assertEqual(spiral(0), []) | ||
|
||
def test_spiral_matrix_of_1(self): | ||
self.assertEqual(spiral(1), [[1]]) | ||
|
||
def test_spiral_matrix_of_2(self): | ||
self.assertEqual(spiral(2), [[1, 2], | ||
[4, 3]]) | ||
|
||
def test_spiral_matrix_of_3(self): | ||
self.assertEqual(spiral(3), [[1, 2, 3], | ||
[8, 9, 4], | ||
[7, 6, 5]]) | ||
|
||
def test_spiral_matrix_of_4(self): | ||
self.assertEqual(spiral(4), [[1, 2, 3, 4], | ||
[12, 13, 14, 5], | ||
[11, 16, 15, 6], | ||
[10, 9, 8, 7]]) | ||
|
||
def test_spiral_matrix_of_5(self): | ||
self.assertEqual(spiral(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]]) | ||
|
||
|
||
if __name__ == '__main__': | ||
unittest.main() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you please add some topics of your choosing? You can use this list - exercism/problem-specifications#884 (comment)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
i'm not sure what to put. some idea ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@Average-user I guess the following ones will be Ok:
algorithms
is also suitable