The problems aren't restricted to mathy things (project Euler) or really super specific algorithm or optimization problems. They are more open ended, where often times much of the problem is figuring out what kind of problem you're dealing with.
A lot of potentially good sites with coding challenges have that problem. You want to improve your coding skills in some language and you end up spending 90% of the time solving a math puzzle and writing 5 lines of code.
+1 on Advent of Code. Particularly useful are the sample input/output values that provide excellent unit tests. For 2017 I took the first few days and am working on solving them using classic red/green TDD in as many languages as possible
One time I took some time off between jobs and found https://topcoder.com which is a combination of competition and freelance site. It can be a lot more than just practice, but I found it great for getting deep into areas I don't usually work. Worked on various small mobile, translation, compound matching programs. The jobs varied from maybe an hour's worth to days. Often only one to three of the solutions get awarded cash prizes, but I figured I want to learn this stuff anyway and having a deadline or competition really was motivational. One thing to keep in mind is that it's okay if you think you should have placed but didn't. The site is also really well run. There's topcoder staff assigned to liason with the poster of the task and a forum for each challenge for questions, answers, and getting additional materials in a timely manner.
For anybody trying to find the actual content, their site is probably one of the worst sites I've ever used with repeated CMS errors, repeated nginx/1.14.0 404 screens, and trying to load flash of all things. Finally all the challenges are buried within confusing menu options and marketing.
If you ask this question, you are at least not a complete junior anymore. You may be trusted to program fogbugz in 5 minutes now.
Medium level ITers have in general more need for clear communication skills than for more code. A simple way to acquire them is trying to explain something to someone else. It's also fun to actually help someone.
LeetCode is nice because it shows you other people's solutions when you correctly submit. Super useful for seeing code with faster execution times, I've learned some tricks from that.
I've been with the same company for six years but still like practicing sometimes. I don't do it very regularly because I have another personal project that takes up my free time, but sometimes when I feel like a break from the bigger project I'll spend a few days just going through Leetcode problems.
I found codefights.com to have the most relevant exercises. I have used it for interview prep and just to get a new language under my fingers.
Other sites just haven't cut it for me. Some are heavy on arbitrary math puzzles with little focus on actual coding skills. HackerRank you spend half of every algorithm reading the inputs from stdin. Some you run out of puzzles and just have to repeat.
I like how easy it is to browse through other people's solutions and find neat tricks or ask for explanations on parts of code you don't understand. From my experience people will gladly reply with helpful answers.
It's also a cool way to be exposed to some lesser known mathematical concepts or problems that often make it into the questions.
I keep practicing on https://www.interviewbit.com. Although it's meant for interviews, the quality of problems is really high. The whole site is gamified and the point system maintains an urgency to solve problems and makes problem solving fun.
It has a very playful presentation and progress system, the challenges are nice and the solution steps usually can be visualized well. Also supports a lot of languages.
CodeCademy is great for picking up Python/random tools. Great interactive exercises.
For Full-Stack Web Dev: freeCodeCamp teaches quite a bit. App Academy recently opened their entire curriculum online for free, which also might be worth checking out.
firecode.io is my favorite by far, but I'm afraid of it's future as it's been in beta for years and the site has frequent outages. Also I wish they had as many questions as leetcode.
I enjoy codeforces. The interface is a bit retro but it grows on you. Problems are pretty challenging and you can see other’s solutions from past contests.
The problems aren't restricted to mathy things (project Euler) or really super specific algorithm or optimization problems. They are more open ended, where often times much of the problem is figuring out what kind of problem you're dealing with.
The weird story arcs for each year are fun, too.
More hit or miss, but also https://programmingpraxis.com