aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Krňávek <Jan.Krnavek@gmail.com>2021-08-15 15:43:47 +0200
committerJan Krňávek <Jan.Krnavek@gmail.com>2021-08-15 15:43:47 +0200
commitbc5ebe26f5e8921e985eea19d96ac717942adae3 (patch)
treef81347cd5099e89964ca2bdd18867583b6bbb147
parentab045ec199743bf79bb05c7e2666d357dda9579b (diff)
downloadperlweeklychallenge-club-bc5ebe26f5e8921e985eea19d96ac717942adae3.tar.gz
perlweeklychallenge-club-bc5ebe26f5e8921e985eea19d96ac717942adae3.tar.bz2
perlweeklychallenge-club-bc5ebe26f5e8921e985eea19d96ac717942adae3.zip
solution week 125-1
-rw-r--r--challenge-125/wambash/raku/ch-1.raku33
1 files changed, 33 insertions, 0 deletions
diff --git a/challenge-125/wambash/raku/ch-1.raku b/challenge-125/wambash/raku/ch-1.raku
new file mode 100644
index 0000000000..5abb5ade24
--- /dev/null
+++ b/challenge-125/wambash/raku/ch-1.raku
@@ -0,0 +1,33 @@
+#!/usr/bin/env raku
+
+constant @next-candidates :=
+ (( 1, 2, 2),(-2,-1,-2),(2,2,3)),
+ (( 1, 2, 2),( 2, 1, 2),(2,2,3)),
+ ((-1,-2,-2),( 2, 1, 2),(2,2,3)),
+;
+
+sub next-level (@a,:$n) {
+ @a
+ andthen @next-candidates.map: $_ «*« *
+ andthen .map: { [Z+] $_ }\
+ andthen .map: *.cache
+ andthen |.grep: { .any ≤ $n }
+}
+
+sub pythagorean-triples ($n) { # only primitive
+ ((3,4,5),), { .map: &next-level.assuming(:$n) } ... :!elems
+ andthen .map: |*.grep: $n == *.any # by `$n %% *.any` you could have generators for all Pythagorean-triples
+}
+
+multi MAIN (Bool :test($)!) {
+ use Test;
+ is pythagorean-triples( 5), ((3,4,5),(5,12,13));
+ is pythagorean-triples(13), ((5,12,13),(13,84,85));
+ is pythagorean-triples( 1), ();
+ is pythagorean-triples(65), ((33,56,65),(65,72,97),(63,16,65),(65,2112,2113));
+ done-testing;
+}
+
+multi MAIN ($n=420) {
+ say pythagorean-triples($n) || -1
+}