A list of practical projects that anyone can solve in any programming language
github.com
github.com
https://github.com/seaneshbaugh/rosetta-euler
It's an ongoing thing I work on when I'm not working on anything in particular.
Dare you to add an HDL.
> I learned so much solving problem XXX so is it okay to publish my solution elsewhere?
It appears that you have answered your own question. There is nothing quite like that "Aha!" moment when you finally beat a problem which you have been working on for some time. It is often through the best of intentions in wishing to share our insights so that others can enjoy that moment too. Sadly, however, that will not be the case for your readers. Real learning is an active process and seeing how it is done is a long way from experiencing that epiphany of discovery. Please do not deny others what you have so richly valued yourself.
Just saying.
I'd be more happy with a book that has 50 fairly simple apps to build in a simple language like Python where the apps aren't a whole lot longer than tic-tac-toe (~1/2 page).
The problems are mostly bioinformatics related, which often boils down to string manipulation/comparison, graph theory
Although I agree with another poster that Euler is a bit math heavy, being able to submit a single number to check your solution is handy. Google's foobar recruiting puzzle system actually tests your program, but it's limited to Python and Java.
Non-trivial if "look for ways to make it more efficient" means non-trivial suggestions (ie. not "add moar indexes").
Thanks OP for posting the link; I'm glad to see people like it. I'll be reading comments here, so keep 'em coming. ;)
I have the theory part covered, but I'm always on the lookout for things that could make for decent practical assignment problems - reasonably attainable in scope, but without being too contrived.
not to sound pedantic, but for any integer greater than 1 there is always at least one prime factor: https://en.wikipedia.org/wiki/Fundamental_theorem_of_arithme...
edit: for prime numbers, it is the number itself
(Your point stands, though: every integer > 1 has at least one prime factor.)
besides, you may as well consider 1 a prime factor. the task is just a silly programming toy problem. 1 not being prime is pure definition, including 1 in the primes would not materially change the definition of primes. just make a lot of advanced math tedious to write down.
It would be entirely unreasonable to say that 4 might as well be considered a prime number because of this.
EDIT: Because it gets brought up so often, I want to respond directly to the 1 being prime point. Saying this is true purely by definition is only true in the highly technical sense that we could make the definition whatever we want.
One of the core properties of primes is Euclid's lemma, which states that if p is a prime and p divides xy then p divides x or p divides y. Symbolic, this is p|xy => p|x OR p|y.
Indeed when we generalize the notion of "prime" from the integers to arbitrary rings, this "lemma" becomes part of the definition. In fact, even "irreducible" elements, which is a strictly weaker requirement than prime elements, excludes units (such as 1).
Taking 1 not to be prime is, none the less, pretty clearly better than the alternative. Here are a few examples of neat things that would break if we took 1 to be prime:
When p is prime Z/pZ -- i.e., "integers mod p" -- is a field, meaning a thing in which you can do +,-,*,/. This would be false if we allowed p=1, though admittedly there's a not-too-crazy way you could change the usual definition of "field" that would fix it.
The "fundamental theorem of arithmetic": Every positive integer is the product of primes and this product is unique up to rearrangement. This would be false if we took 1 to be prime, because you can always add or remove 1s from the factorization.
The famous Riemann zeta function (zeta(s) = sum over positive integers n of n^-s) has a representation as an infinite product: zeta(s) = product over prime p of (1-p^-s)^-1. For a little example of why this is nice, note that it provides an instant proof that there are infinitely many primes, because as s->1 zeta(s)->infinity, which would be impossible if that were a finite product. This would become nonsense if we allowed p=1 because one factor would then be 1/0.
Prime numbers all have exactly two divisors (1 and p). This would become false if we took 1 to be prime.
[0]: https://sites.google.com/site/prologsite/prolog-problems
[1]: http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/func...
[2]: https://wiki.haskell.org/99_questions
[3]: https://wiki.python.org/moin/ProblemSets/99%20Prolog%20Probl...
Coq is certainly a programming language, as you can build programs. But you can't interact with the subsystem, you can only build pure functions (Therefore it is quite hard to build a performance monitor).
In my opinion English could also go as a programming language. Especially given the rise in NLP products. You can actually program a computer to do quite advanced tasks solely through natural languages.
Some bloke called Turing had a few ideas on a definition. (I'll whisper "whoosh" here - for my own note)
Given that any programming language can be defined in English (or any other human language, with a few contortions as required, if any) then of course English can be used to create a Turing Machine (TM). It doesn't take much NLP to define a full TM via speech.
A Turing machine does not talk about expressing computations, but rather a class of problems that can be computed.
Remember, not all programming languages are Turing complete (Coq being one of them).
Given how simple a Turing Machine can be, I seriously doubt (without any proof) that coq is not able to recreate a TM.
I am not an expert but the explanation about Turing Machines I read was in GED and involved a simple tape and a slack handful of symbols and operations and some basic hand waving. If coq can't manage that then it is unlikely to be useful - which I doubt.
Coq only accepts well funded recursion. Non-bound Turing machines span a bigger complexity class.
In other words: Turing machines can loop forever, Coq can not express programs that can do so.
Read your CS 101:
But we could also consider another example: try to return the nth digit using a regular expression.
Or try to make an <insert non-trivial application> in Brainf*uck.
The platform is all open source on Github.
Yeah, running it all client-side makes more sense. See my profile info if you ever feel like chatting about it.
I've been looking for some meatier projects that still have good feedback loops, without requiring too much domain knowledge.
For example, I've been working through a project with the friend that involves scraping prices off of a website and trying to build a thing to automatically order things off of the websites.
Multiple distinct parts, each with their own, very visible, success state. But at the same time, not too many challenging domain specific issues (main issue was just explaining CSS selectors and form POSTs).
They contain a surprising amount of basic computer science in very short questions. Master them and you'll be well on your way to understanding functional (or declarative, in the case of Prolog) programming.
...most of the population? Yes.
...John Carmack? No.