Exercise 1-5
authorwatkinsr <ryanwatkins54@gmail.com>
Sun, 31 May 2020 18:24:27 +0000 (19:24 +0100)
committerwatkinsr <ryanwatkins54@gmail.com>
Sun, 31 May 2020 18:24:27 +0000 (19:24 +0100)
dup3 [new file with mode: 0755]
dup3.go
lissajous/lissajous.go [new file with mode: 0644]

diff --git a/dup3 b/dup3
new file mode 100755 (executable)
index 0000000..0ba59e9
Binary files /dev/null and b/dup3 differ
diff --git a/dup3.go b/dup3.go
index 1c8319e862da3068893834ce206328319fcd622c..ec698f10c2efbe9507840ed3d55614269bef296c 100644 (file)
--- a/dup3.go
+++ b/dup3.go
@@ -8,20 +8,20 @@ import (
 )
 
 func main() {
 )
 
 func main() {
-       counts := make(map[string]int)
-       for _, filename := range os.Args[1:] {
-       data, err := ioutil.ReadFile(filename)
-       if err != nil {
-               fmt.Fprintf(os.Stderr, "dup3: %v\n", err)
-               continue
-       }
-       for _, line := range strings.Split(string(data), "\n") {
-               counts[line]++
-       }
-       }
-       for line, n := range counts {
-               if n > 1 {
-               fmt.Printf("%d\t%s\n", n, line)
-               }
-       }
+  counts := make(map[string]int)
+  for _, filename := range os.Args[1:] {
+    data, err := ioutil.ReadFile(filename)
+    if err != nil {
+      fmt.Fprintf(os.Stderr, "dup3: %v\n", err)
+      continue
+    }
+    for _, line := range strings.Split(string(data), "\n") {
+      counts[line]++
+    }
+  }
+  for line, n := range counts {
+    if n > 1 {
+      fmt.Printf("%d\t%s\n", n, line)
+    }
+  }
 }
 }
diff --git a/lissajous/lissajous.go b/lissajous/lissajous.go
new file mode 100644 (file)
index 0000000..97ed49e
--- /dev/null
@@ -0,0 +1,47 @@
+package main
+
+import (
+  "image"
+  "image/color"
+  "image/gif"
+  "io"
+  "math"
+  "math/rand"
+  "os"
+)
+
+var palette = []color.Color{color.RGBA{0x00,0x16,0x00,0xff}, color.Black}
+
+const (
+  whiteIndex = 0
+  blackIndex = 1
+)
+func main() {
+  lissajous(os.Stdout)
+}
+func lissajous(out io.Writer) {
+  const (
+    cycles = 5
+    res = 0.001
+    size = 100
+    nframes = 64
+    delay = 8
+  )
+  freq := rand.Float64() * 3.0
+  anim := gif.GIF{LoopCount: nframes}
+  phase := 0.0
+  for i := 0; i < nframes; i++ {
+    rect := image.Rect(0, 0, 2*size+1, 2*size+1)
+    img := image.NewPaletted(rect, palette)
+    for t:= 0.0; t < cycles*2*math.Pi; t += res {
+    x := math.Sin(t)
+    y := math.Sin(t*freq + phase)
+    img.SetColorIndex(size+int(x*size+0.5), size+int(y*size+0.5),
+      blackIndex)
+    }
+    phase += 1
+    anim.Delay = append(anim.Delay, delay)
+    anim.Image = append(anim.Image, img)
+  }
+  gif.EncodeAll(out, &anim)
+}