blob: f398cdbbd1c1c53cb744020f935fd7b652445d3a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
#!/usr/local/opt/tcl-tk/bin/tclsh
#
# See https://theweeklychallenge.org/blog/perl-weekly-challenge-148
#
#
# Run as: tclsh ch-2.tcl
#
set COUNT 5
set A 0
set B 1
set C 2
set SUM 3
set out {}
for {set i 0} {$i < $COUNT} {incr i} {
lset out $i $A 999999
lset out $i $B 999999
lset out $i $C 999999
lset out $i $SUM [expr 3 * 999999]
}
set max_index 0
for {set k 0} {$k < [lindex $out $max_index $SUM]} {incr k} {
set a [expr 3 * $k + 2]
set f1 [expr $k + 1]
set f2 [expr 8 * $k + 5]
set d1 {}
for {set i 1} {$i * $i <= $f1} {incr i} {
if {$f1 % $i == 0} {
lappend d1 $i
if {$i != $f1 / $i} {
lappend d1 [expr $f1 / $i]
}
}
}
set d2 {}
for {set i 1} {$i * $i <= $f2} {incr i} {
if {$f2 % $i == 0} {
set s1 [expr isqrt ($i)]
set s2 [expr isqrt ($f2 / $i)]
if {$s1 * $s1 == $i} {
lappend d2 $s1
}
if {$s2 * $s2 == $f2 / $i && $s1 != $s2} {
lappend d2 $s2
}
}
}
foreach d1v $d1 {
foreach d2v $d2 {
set b [expr $d1v * $d2v]
set c [expr $f1 * $f1 * $f2 / ($b * $b)]
if {$a + $b + $c < [lindex $out $max_index $SUM]} {
set seen 0
for {set i 0} {$i < $COUNT} {incr i} {
if {[lindex $out $i $A] == $a && \
[lindex $out $i $B] == $b} {
set seen 1
}
}
if {$seen > 0} {
break
}
lset out $max_index $A $a
lset out $max_index $B $b
lset out $max_index $C $c
lset out $max_index $SUM [expr $a + $b + $c]
set max_index 0
set max_sum [lindex $out $max_index $SUM]
for {set i 1} {$i < $COUNT} {incr i} {
if {$max_sum < [lindex $out $i $SUM]} {
set max_sum [lindex $out $i $SUM]
set max_index $i
}
}
}
}
}
}
foreach row $out {
puts -nonewline [lindex $row $A]
puts -nonewline " "
puts -nonewline [lindex $row $B]
puts -nonewline " "
puts [lindex $row $C]
}
|