Heronian triangles: Difference between revisions

→‎{{header|Smalltalk}}: oops! sort by area first, not by perimeter first! also use a,b,c rather than i,j,k
(Separate language (Smalltalk) from dialect (Squeak))
(→‎{{header|Smalltalk}}: oops! sort by area first, not by perimeter first! also use a,b,c rather than i,j,k)
Line 4,328:
 
heroGenerator := Generator on: [:generator |
1 to: 200 do: [:ia |
ia to: 200 do: [:jb |
jb to: (ia+jb-1 min: 200) do: [:kc |
| triangle |
triangle := {ia. jb. kc.}.
((isPrimitive value: triangle) and: [isHeronian value: triangle])
ifTrue: [generator nextPut: triangle]]]]].
 
heronians := heroGenerator contents.
sorter := perimetersquaredArea ascending , squaredAreaperimeter ascending , #third ascending , #second ascending , #first ascending.
sorted := heronians sorted: sorter.
area210 := sorted select: [:triangle | (squaredArea value: triangle) = 210 squared].
Line 4,348:
Transcript print: (perimeter value: t); tab.
Transcript print: (squaredArea value: t) sqrt.
t reverseDodo: [:edge | Transcript tab; print: edge].].
 
Transcript cr; print: heronians size; nextPutAll: ' heronians triangles of side <= 200 where found'.
header value: 'first 10 sorted by perimeterarea, then areaperimeter, the largest side'.
(sorted first: 10) do: tabulate.
header value: 'heronians of area 210'.
area210 do: tabulate.
 
Transcript flush.</lang>
</lang>
{{out}}
<pre>
517 heronians triangles of side <= 200 where found
 
first 10 sorted by perimeterarea, then areaperimeter, the largest side
peri area a b c
12 6 53 4 35
16 12 6 5 5 6
18 12 8 5 5 8
3032 3024 134 1213 515
3230 2430 155 1312 413
36 36 179 10 917
3654 6036 133 1325 1026
4042 6042 177 15 820
4236 4260 2010 1513 713
4240 8460 158 1415 1317
 
heronians of area 210
peri area a b c
70 210 2817 25 1728
70 210 2920 21 2029
84 210 3712 35 1237
84 210 3917 28 1739
140 210 687 65 768
300 210 1493 148 3149
</pre>
 
Anonymous user