diff options
author | Mathias Magnusson <mathias@magnusson.space> | 2024-02-28 18:00:30 +0100 |
---|---|---|
committer | Mathias Magnusson <mathias@magnusson.space> | 2024-02-28 18:00:30 +0100 |
commit | 4e8ac826929117f95baeb37e1518773d1169d900 (patch) | |
tree | 8d83639b336ece6422e9f3391655db12f30d6013 /protohackers/1-prime-test/main.go | |
parent | d4fcb8a4a815ce8c888c3e06330e9cff71e3c312 (diff) | |
download | programming-problem-solving-4e8ac826929117f95baeb37e1518773d1169d900.tar.gz |
Random uncommited stuff
Diffstat (limited to 'protohackers/1-prime-test/main.go')
-rw-r--r-- | protohackers/1-prime-test/main.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/protohackers/1-prime-test/main.go b/protohackers/1-prime-test/main.go new file mode 100644 index 0000000..66e7f16 --- /dev/null +++ b/protohackers/1-prime-test/main.go @@ -0,0 +1,71 @@ +package main + +import ( + "bufio" + "encoding/json" + "log" + "math" + "net" +) + +func main() { + listener, err := net.Listen("tcp", "0.0.0.0:7000") + if err != nil { + panic(err) + } + + for { + go handle(listener.Accept()) + } +} + +func handle(conn net.Conn, err error) { + if err != nil { + log.Println(err) + return + } + defer conn.Close() + + reader := bufio.NewScanner(conn) + writer := json.NewEncoder(conn) + for reader.Scan() { + log.Println("received ", reader.Text()) + var req struct { + Method string `json:"method"` + Number *float64 `json:"number"` + } + if err := json.Unmarshal(reader.Bytes(), &req); err != nil { + log.Println(err) + return + } + if req.Method != "isPrime" || req.Number == nil { + _, err := conn.Write([]byte("you dingus")) + if err != nil { + log.Println(err) + } + return + } + res := struct { + Method string `json:"method"` + Prime bool `json:"prime"` + }{Method: "isPrime"} + n := int64(*req.Number) + if *req.Number == float64(n) { + res.Prime = isPrime(n) + } + if err := writer.Encode(res); err != nil { + log.Println(err) + return + } + } +} + +func isPrime(n int64) bool { + max := int64(math.Sqrt(float64(n))) + for i := int64(2); i <= max; i++ { + if n%i == 0 { + return false + } + } + return n > 1 +} |