2016-12-05 23:44:36 +01:00
|
|
|
|
func triples(limit) {
|
2017-09-23 10:01:46 +02:00
|
|
|
|
var primitive = 0
|
|
|
|
|
|
var civilized = 0
|
2016-12-05 23:44:36 +01:00
|
|
|
|
|
|
|
|
|
|
func oyako(a, b, c) {
|
|
|
|
|
|
(var perim = a+b+c) > limit || (
|
2017-09-23 10:01:46 +02:00
|
|
|
|
primitive++
|
|
|
|
|
|
civilized += int(limit / perim)
|
|
|
|
|
|
oyako( a - 2*b + 2*c, 2*a - b + 2*c, 2*a - 2*b + 3*c)
|
|
|
|
|
|
oyako( a + 2*b + 2*c, 2*a + b + 2*c, 2*a + 2*b + 3*c)
|
|
|
|
|
|
oyako(-a + 2*b + 2*c, -2*a + b + 2*c, -2*a + 2*b + 3*c)
|
|
|
|
|
|
)
|
2016-12-05 23:44:36 +01:00
|
|
|
|
}
|
|
|
|
|
|
|
2017-09-23 10:01:46 +02:00
|
|
|
|
oyako(3,4,5)
|
|
|
|
|
|
"#{limit} => (#{primitive} #{civilized})"
|
2016-12-05 23:44:36 +01:00
|
|
|
|
}
|
2017-09-23 10:01:46 +02:00
|
|
|
|
|
|
|
|
|
|
for n (1..Inf) {
|
|
|
|
|
|
say triples(10**n)
|
2016-12-05 23:44:36 +01:00
|
|
|
|
}
|