Advertisement
Guest User

Untitled

a guest
Nov 19th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Go 1.69 KB | None | 0 0
  1. package main
  2.  
  3. import (
  4.     "bufio"
  5.     "fmt"
  6.     "net"
  7.     "strconv"
  8.     "os"
  9.     //"time"
  10. )
  11.  
  12. func check(err error, message string) {
  13.     if err != nil {
  14.         panic(err)
  15.     }
  16.     //fmt.Printf("%s\n", message)
  17. }
  18.  
  19. func FiboLoop1(n int) uint64 {
  20.     f := make([]uint64, n+1, n+2)
  21.     if n < 2 {
  22.         f = f[0:2]
  23.     }
  24.     f[0] = 0
  25.     f[1] = 1
  26.     for i := 2; i <= n; i++ {
  27.         f[i] = f[i-1] + f[i-2]
  28.     }
  29.     return uint64(f[n])
  30. }
  31.  
  32. func FiboLoop2(n int) uint64 {
  33.     a := 0
  34.     b := 1
  35.     for i := 0; i < n; i++ {
  36.         temp := a
  37.         a = b
  38.         b = temp + a
  39.     }
  40.     return uint64(a)
  41. }
  42.  
  43. func makeFibo(n int) string {
  44.     result := " "
  45.     for i:=0; i<=n; i++ {
  46.         result += strconv.FormatUint(FiboLoop2(i), 10) + " "
  47.     }
  48.     return result + "\r\n"
  49. }
  50.  
  51.  
  52. func main() {
  53.     if (len(os.Args) != 2 ) {
  54.         fmt.Println("Port number must be the 1st and only argument!")
  55.         return
  56.     }
  57.     ln, err := net.Listen("tcp", ":"+os.Args[1])
  58.     check(err, "Server is ready.")
  59.  
  60.     for {
  61.         conn, err := ln.Accept()
  62.         check(err, "Accepted connection.")
  63.  
  64.         go func() {
  65.             buf := bufio.NewReader(conn)
  66.  
  67.             //for {
  68.             num, err := buf.ReadString('\n')
  69.             if err != nil {
  70.                 conn.Write([]byte("Invalid input\r\n"))
  71.                 conn.Close()
  72.                 return
  73.             }
  74.             //fmt.Println(num[:len(num)-2])
  75.             //fmt.Println(len(num))
  76.  
  77.             numFib, err := strconv.Atoi(num[:len(num)-2])
  78.             if err != nil {
  79.                 conn.Write([]byte("Invalid input\r\n"))
  80.                 conn.Close()
  81.                 return
  82.             }
  83.             //fmt.Printf("Fibonacchi number: %d\n", numFib)
  84.  
  85.             //startLoop := time.Now()
  86.             result := makeFibo(numFib)
  87.             //fmt.Printf("\nIt took %s to make FIBO\n", time.Since(startLoop))
  88.  
  89.             conn.Write([]byte(result))
  90.             conn.Close()
  91.             //}
  92.         }()
  93.     }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement