+ 1
Spiral (Python)
The task of Python. Given an integer N. You need to create an array of size 2*N + 1. In the center of the array is the number 1. Example(if N = 2): 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 You must write the code by which the array will be filled counterclockwise, starting with 1. The result should be of this type (the order of filling should be identical to the example): 13 12 11 10 25 14 3 2 9 24 15 4 1 8 23 16 5 6 7 22 17 18 19 20 21 How to implement it without "import" (numpy, math etc.)? Interested in the implementation of only using loops(for).
11 Réponses
+ 3
There's always a pattern. It repeats every two numbers (N). We start with N = 2.
[[3, 2] ,[4, 1]]
The next N+1 terms are added at the end of the array.
[[3, 2], [4, 1], [5, 6, 7]]
All remaiming untouched lists inside the array are filled with the next N numbers starting with the right-most untouched list. The numbers are added at the end of each list.
[[3, 2, 9], [4, 1, 8], [5, 6, 7]]
We increase N by 1 (N = 3). The next N+1 terms are added in reverse order at the beginning of the array.
[[13, 12, 11, 10], [3, 2, 9], [4, 1, 8], [5, 6, 7]]
All remaining untouched list inside the array are filled with the next N number starting with the left-most untouched list. The numbers are added at the beginning of each list.
[[13, 12, 11, 10], [14, 3, 2, 9], [15, 4, 1, 8], [16, 5, 6, 7]]
We increase N by 1 and repeat the pattern (every two increases).
+ 2
What have you tried so far?
Take a look at a similar challenge.
https://www.sololearn.com/learn/4543/
+ 2
There are three actions:
Finish if the target in front of you is out of board.
Turn if the cell left hand side is zero.
Otherwise move and increment value set.
All you need is a 2d list, a key for moving ULDR, a row column position and a counter.
+ 2
Dmitry Venzik that was just an outline. You may have the joy to write it in this way or another. I have a similar code with a bit more tricky rules for moves.
https://code.sololearn.com/cuD4yIJFV1vI/?ref=app
+ 2
https://code.sololearn.com/co8PFBt54mIp/?ref=app
+ 1
Diego Wow, that's a really cool explanation. Thank you very much! Now I can write code and test it.
+ 1
tamaslud Thanks! :)
I'll try to understand your code while someone else's code is hard for me to understand. I want to understand the principle of operation of the filling of the array. I will run the code in the "debug" mode in PyCharm, it helps to understand how this or that code element works :)
+ 1
tamaslud To be honest, I haven't tried to write my own code for spiral yet. Until they solve different tasks codeforces.com.
+ 1
Dmitry Venzik i have also lost sometimes in rows and cols, but after some modifications it works. I have defined a tuple with moves up, down, l, r, udlrudlrudlr etc. and started to move from the middle. If the next type of turning offers un untouched matrix element aka zero it turns else going forward til i run out pf possible elements.
0
"What have you tried so far?"
Diego, What do you mean?
I write code in PyCharm, tried to write a solution, but I don't quite understand how the universal code should look like, so that at any N the filling is the same. I want to understand in what direction to think.
0
tamaslud Thanks for reply! Where can I see the implementation of this method in more detail?