Goldbach's comet: Difference between revisions

→‎{{header|Wren}}: Converted this to a DOME script so we can plot the points using the new Wren-plot module.
(Added Rust solution)
(→‎{{header|Wren}}: Converted this to a DOME script so we can plot the points using the new Wren-plot module.)
Line 1,007:
 
=={{header|Wren}}==
{{libheader|DOME}}
{{libheader|Wren-math}}
{{libheader|Wren-trait}}
{{libheader|Wren-fmt}}
{{libheader|Wren-plot}}
<lang ecmascript>import "./math" for Int
It appears that most people are interpreting the stretch goal to mean that the first 2000 G values should be calculated and plotted rather than values up to G(2000). So we follow that here.
<lang ecmascript>import "./mathdome" for IntWindow
import "graphics" for Canvas, Color
import "./math2" for Int
import "./trait" for Stepped
import "./fmt" for Fmt
import "io./plot" for FileAxes
 
var limit = 20004002
var primes = Int.primeSieve(limit-1).skip(1).toList
var goldbach = {4: 1}
Line 1,042 ⟶ 1,047:
System.print("\nG(1000000) = %(gm)")
 
var Red = []
// create .csv file for values up to 2000 for display by an external plotter
var Blue = []
// the third field being the color (red = 0, blue = 1, green = 2)
var Green = []
File.create("goldbachs_comet.csv") { |file|
 
for(i in Stepped.new(4..limit, 2)) {
// create lists for the first 2000 G values for plotting by DOME.
file.writeBytes("%(i), %(goldbach[i]), %(i/2 % 3)\n")
for(ie in Stepped.new(4..limit, 2)) {
var c = e % 6
var n = e/2 - 1
if (c == 0) {
Red.add([n, goldbach[e]])
} else if (c == 2) {
Blue.add([n, goldbach[e]])
} else {
Green.add([n, goldbach[e]])
}
}
}</lang>
 
class Main {
construct new() {
Window.title = "Goldbach's comet"
Canvas.resize(1000, 600)
Window.resize(1000, 600)
Canvas.cls(Color.white)
var axes = Axes.new(100, 500, 800, 400, 0..2000, 0..200)
axes.draw(Color.black, 2)
var xMarks = Stepped.new(0..2000, 200)
var yMarks = Stepped.new(0..200, 20)
axes.mark(xMarks, yMarks, Color.black, 2)
var xMarks2 = Stepped.new(0..2000, 400)
var yMarks2 = Stepped.new(0..200, 40)
axes.label(xMarks2, yMarks2, Color.black, 2, Color.black)
axes.plot(Red, Color.red, "+")
axes.plot(Blue, Color.blue, "+")
axes.plot(Green, Color.green, "+")
}
 
init() {}
 
update() {}
 
draw(alpha) {}
}
 
var Game = Main.new()</lang>
 
{{out}}
9,476

edits