Solution to the puzzle
Step by step walkthrough
Step 1
Highlighted ↙(2) is either (●↙) or (↓←). If we consider (●↙), there's no combination of ↗(3) that includes ↙. Or if you want to think about it logically, since we're going ↙, the only way to end up with ↗ at the end is to go ↗ two times but that's not possible since it violates the rules. Also, there's no combination of →(4) that includes ↙←. Again, thinking about it logically, if we go left 2 times there's no way to end up with a right pointing arrow with 2 moves left. So, we can eliminate (●↙) since ↙ doesn't fit anywhere. Then placing (↓←) is easy.
Step 2
The only combination of ↗(3) that fits is (↗→←) and that is easy to place, or if you want to think logically, since there's already a ←, we need to negate it with → and then ↗ to achieve the desired result.
Step 3
The only combinations of ●(5) that fit are (●↗→↙←) and (↗→↓↙↖). In both cases they contain a ↙. Placing ↙ is easy; it does not belong to neither the first nor the second square since in both cases it's going in an opposite direction to the desired outcome and we cannot reverse it in 1 move.
Step 4
This part is also simple. The only combination of ←(4) that fits is (●→↙↖) so we need to place ↙↖ but ↙ is already present in the bottom row so it cannot go there. We can also fill the missing square of ←(3).
Step 5
There are 3 possibilities for ←(2): (●←), (↑↙) and (↓↖). We can immediately discard (↑↙) since ↙ already exists on the top row and ↙ does not belong on the bottom row as the final outcome is pointing upwards and we cannot reverse the bottom direction in 1 move. We can also discard (↓↖) through some analysis. ↖ needs to go on the bottom row since it already exists on the top row. If that happens then the last square of ↑(3) must be filled with →. Now if we look at the top clue ←(3), the only way to satisfy this clue is to fill the remaining 2 squares with ↙↖ but these two symbols already exist on the middle row so that cannot be the case. We are left with (●←) so we can fill that in, and the remaining square of ↑(3).
Step 6
The only combination of ←(3) that works is (↗↙←) and that is easy to fill since ↙ already exists in the middle row.
Step 7
The only combination of ↖(3) that fits is (↗↙↖). Also easy to fill in since ↗ exists in the last column so it cannot go there.
Step 8
The only combination of →(4) that fits needs →↗ and that can be filled in easily.
Step 9
Highlighted ●(5) can only be (●↗→↙←) or (↗→↓↙↖). If we take (●↗→↙←), the missing symbols are ●↙← but neither of them can fit in the bottom square so that is out of the question. From (↗→↓↙↖) we need ↓↙↖ and only ↓ fits in the bottom square so we can fill that in.
Step 10
Here ●(5) can only be (●↗→↙←) or (↗→↓↙↖). If we consider (●↗→↙←), ←● are missing and ← has to go at the top square since it is not valid for →(2). After that we can fill in the missing ↑ for ↖(2) but now that creates a problem. This is a bit hard to explain but the 2 squares for ↘(3) above the ↑ we just filled will have to be populated with ↓↘ which are both downward pointing arrows. Now if we look at the 2 clues to the left of these squares, we see ↖(3) and ↗(3) which are both upward pointing arrows. This means that their missing squares will have to be both upward pointing to achieve the desired direction. But now this means that the ↙(4) in the middle column will contain 2 upward pointing arrows which is a contradiction since we cannot achieve a downward final result with 2 arrows out of 4 already pointing upwards. After all that long analysis we can eliminate (●↗→↙←) and finally fill in (↗→↓↙↖) which is straightforward. We can also fill the 2 obvious squares.
Step 11
Consider the highlighted ↘(3). The only combination that fits is (●→↓). If we fill in → at the top, this leaves the ↖(3) on its left with →←↖. At the bottom, we filled in ↓, so the ↗(3) on its left is missing ↑ and ↗. The middle column ↙(4) ended up having ↓← and now the only way to satisfy it is to fill ↙↗ or ↖↘. Taking both the row and the column together, we can now deduce that the last square in the middle column ↙(4) has to be ↗, which means that the one on its right is ↑. This creates a contradiction in the rightmost vertical ↑(4). We have just added ↖↑, and there already was a ←. It is not possible to fill in the final square to get ↑ as a result. So, this means that the correct way to fill the highlighted ↘(3) was with ↓ at the top and → at the bottom.
Step 12
Highlighted ↖(3) can only be filled with ↖ and ↑. If we fill it as ↓↑↖, that leaves the middle column ↙(4) as ↓↙↑● since that's the only combination and ↙ does not belong in the last square. This means that the ↗(3) below the highlighted clue will be filled with →●↑ which has now created a problem for the ↑(4) to the right of the middle column. It is left with ↖↑← and with nothing to satisfy the last square. Now we know that ↑ cannot be filled in the middle square of the highlighted clue.
Step 13
As shown in step 9, we know that the highlighted ●(5) is missing ↖ and ↙. We can see that ↙ doesn't go in the top square since that would be a ↑ going next to it to satisfy ←(2) but there is already a ↑ in that column. With that in place, the entire top part of the puzzle can be filled in since only 1 square would be left from each clue.
Step 14
Consider the highlighted ↓(5), we can see that it already contains 2 upward pointing arrows. In order to achieve a final downward direction, the last three symbols have to be downward, specifically ↘↓↙. The second row already contains ↓↙. This leaves ↘ to fit there.
Step 15
This one took me a while to figure out. Taking the highlighted ●(9), we know that the remaining symbols are ↑↗→. The first part was realizing that the first two squares cannot be both pointing upwards because if they were then the first 2 columns would need to be filled with downward pointing arrows to satisfy the clues, but now if we filled both columns with downward arrows, the ↓(2) on the left will never be fulfilled. This means that → cannot be in the last square. This still left me with 2 possible squares for →. I couldn't find any logical reasoning in a few moves so I had to play out one of them. I placed the → in the second square and went from there. ↗ couldn't go in the first square so it had to go in the last square and ↑ was left in the first square. The rest of the symbols marked in yellow below easily followed until I arrived at the contradiction shown in blue. This meant that → had to go in the first square.
Step 16
Taking the same row again, I realized that ↑ doesn't go in the second square since ↓(5) doesn't contain a combination with both ↖ and ↑. The last square in that row can also be filled.
Step 17
Taking the highlighted ↙(3), the remaining symbols must be ← and ↙. ↙ cannot go in the middle row because we are already expecting a downward pointing arrow from the ↓(5) on the right, since, as previously mentioned, 3 downward pointing arrows are needed to satisfy that clue. So we can fill ← in the second square and the 2 adjacent symbols easily.
Step 18
This one is straightforward. Only ↓ and ↙ are left for ↓(5) and ↙ already exists in the first row to be filled.
Step 19
This one is exactly the same as step 18. ↓ and ↙ are left and ↙ already exists in the last row. The remaining square of ●(2) and ↗(3) can also be filled.
Step 20
In the highlighted ●(4), we need to negate the existing arrows with ↗ and ↑. We can see that ↗ cannot go in the last square since ↖(2) would be impossible to satisfy with a right-pointing arrow. The other square of ↖(2) can also be filled in.
Step 21
The two possibilities of ↙(2) are (●↙) and (↓←). (↓←) is definitely wrong since both symbols exist in the top row. (●↙) can be easily filled in.
Step 22
In the highlighted ●(7), we need to fill in → and ↗. If we fill in → in the second square, ↖ would have to come above it to fulfill ↑(2) but that leads to a contradiction since there's no valid combination of ↘(4) that contains ↖↗↓. With this, we can complete the rest of the puzzle.