By the way, is it a secret to programmers that Pythagorean triples can be parametrised?
I understand that the point of the code is to enumerate them without knowing that they can be parametrised, but the parametrisation in this case is not so scary, so it’s a fun bit of trivia for programmers (for mathematicians, it’s more fundamental, as the Pythagorean parametrisation is an important prototype for counting rational points on elliptic curves, a fundamental problem in number theory).
Slightly less easy nor well-known amongst mathemticians (or at least, this is new to me), you can enumerate all primitive Pythagorean triples in a tree!
This tree is really interesting! I wonder where those matrices come from. The proof that it works is a boring mechanical check, but I’m now interested in how they were derived in the first place. This is a 20th century discovery, unlike the parametrisation which comes from antiquity. I think I’ll be reading some papers about this.
I know this wasn’t the point of this post but I love stuff like this because it makes learning concepts in other languages easier.
I was just looking into ranges in D the other day and now not only do I have a good example of how to write a fairly simple one I also have a generator example to boot. I didn’t even know D had generators!
Here’s a Common Lisp version of the “lambda” code, based on this C++ code. Compile time was instantaneous at the REPL and the runtime for the first 1000 triples was 0.227 seconds.
For comparison, the C++ code compiled with clang++ -O3 (XCode on OSX Mojave) on the same machine
took 0.1 second to compile and ran in 0.15 seconds.
By the way, is it a secret to programmers that Pythagorean triples can be parametrised?
I understand that the point of the code is to enumerate them without knowing that they can be parametrised, but the parametrisation in this case is not so scary, so it’s a fun bit of trivia for programmers (for mathematicians, it’s more fundamental, as the Pythagorean parametrisation is an important prototype for counting rational points on elliptic curves, a fundamental problem in number theory).
https://en.wikipedia.org/wiki/Pythagorean_triple#Generating_a_triple
Slightly less easy nor well-known amongst mathemticians (or at least, this is new to me), you can enumerate all primitive Pythagorean triples in a tree!
https://en.wikipedia.org/wiki/Tree_of_primitive_Pythagorean_triples
This tree is really interesting! I wonder where those matrices come from. The proof that it works is a boring mechanical check, but I’m now interested in how they were derived in the first place. This is a 20th century discovery, unlike the parametrisation which comes from antiquity. I think I’ll be reading some papers about this.
I’d never heard of Pythagorean triples until Eric Niebler’s post, I definitely wouldn’t have picked it as an example of ranges!
I just went from the rebuttal post and its code to what I wrote today.
I know this wasn’t the point of this post but I love stuff like this because it makes learning concepts in other languages easier.
I was just looking into ranges in D the other day and now not only do I have a good example of how to write a fairly simple one I also have a generator example to boot. I didn’t even know D had generators!
Last year’s Advent of Code also had a problem that was particularly well-suited for generators.
http://jordi.inversethought.com/blog/advent-of-d/#day15
http://inversethought.com/hg/aoc/file/tip/2017/day15/problem
http://inversethought.com/hg/aoc/file/tip/2017/day15/app.d
Here’s a Common Lisp version of the “lambda” code, based on this C++ code. Compile time was instantaneous at the REPL and the runtime for the first 1000 triples was 0.227 seconds.
For comparison, the C++ code compiled with clang++ -O3 (XCode on OSX Mojave) on the same machine took 0.1 second to compile and ran in 0.15 seconds.