summaryrefslogtreecommitdiff
path: root/protohackers
diff options
context:
space:
mode:
Diffstat (limited to 'protohackers')
-rw-r--r--protohackers/0-smoke-test/flake.lock25
-rw-r--r--protohackers/0-smoke-test/flake.nix24
-rw-r--r--protohackers/0-smoke-test/go.mod3
-rw-r--r--protohackers/0-smoke-test/main.go42
-rw-r--r--protohackers/1-prime-test/flake.lock25
-rw-r--r--protohackers/1-prime-test/flake.nix24
-rw-r--r--protohackers/1-prime-test/go.mod3
-rw-r--r--protohackers/1-prime-test/main.go71
8 files changed, 217 insertions, 0 deletions
diff --git a/protohackers/0-smoke-test/flake.lock b/protohackers/0-smoke-test/flake.lock
new file mode 100644
index 0000000..6d89d83
--- /dev/null
+++ b/protohackers/0-smoke-test/flake.lock
@@ -0,0 +1,25 @@
+{
+ "nodes": {
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1661353537,
+ "narHash": "sha256-1E2IGPajOsrkR49mM5h55OtYnU0dGyre6gl60NXKITE=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "0e304ff0d9db453a4b230e9386418fd974d5804a",
+ "type": "github"
+ },
+ "original": {
+ "id": "nixpkgs",
+ "type": "indirect"
+ }
+ },
+ "root": {
+ "inputs": {
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/protohackers/0-smoke-test/flake.nix b/protohackers/0-smoke-test/flake.nix
new file mode 100644
index 0000000..76a6f25
--- /dev/null
+++ b/protohackers/0-smoke-test/flake.nix
@@ -0,0 +1,24 @@
+{
+ description = "Protohackers 0: Smoke test";
+
+ outputs = { self, nixpkgs }:
+ let
+ system = "x86_64-linux";
+ pkgs = import nixpkgs { inherit system; };
+ in rec
+ {
+ packages.x86_64-linux.docker-image = pkgs.dockerTools.buildImage {
+ name = "smoke-test";
+ config = {
+ Cmd = [ "${packages.x86_64-linux.smoke-test}/bin/0-smoke-test" ];
+ };
+ };
+ packages.x86_64-linux.binary = pkgs.buildGoModule {
+ pname = "smoke-test";
+ version = "0.0.1";
+ src = self;
+
+ vendorSha256 = "pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
+ };
+ };
+}
diff --git a/protohackers/0-smoke-test/go.mod b/protohackers/0-smoke-test/go.mod
new file mode 100644
index 0000000..7010dd8
--- /dev/null
+++ b/protohackers/0-smoke-test/go.mod
@@ -0,0 +1,3 @@
+module 0-smoke-test
+
+go 1.18
diff --git a/protohackers/0-smoke-test/main.go b/protohackers/0-smoke-test/main.go
new file mode 100644
index 0000000..213d111
--- /dev/null
+++ b/protohackers/0-smoke-test/main.go
@@ -0,0 +1,42 @@
+package main
+
+import (
+ "io"
+ "log"
+ "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()
+
+ var buf [1024]byte
+ for {
+ n, readErr := conn.Read(buf[:])
+ log.Println("writing ", string(buf[:n]))
+ _, writeErr := conn.Write(buf[:n])
+ if writeErr != nil {
+ log.Println("error when writing", err)
+ }
+ if readErr != nil {
+ if readErr != io.EOF {
+ log.Println("error when reading", err)
+ }
+ return
+ }
+ }
+}
diff --git a/protohackers/1-prime-test/flake.lock b/protohackers/1-prime-test/flake.lock
new file mode 100644
index 0000000..6d89d83
--- /dev/null
+++ b/protohackers/1-prime-test/flake.lock
@@ -0,0 +1,25 @@
+{
+ "nodes": {
+ "nixpkgs": {
+ "locked": {
+ "lastModified": 1661353537,
+ "narHash": "sha256-1E2IGPajOsrkR49mM5h55OtYnU0dGyre6gl60NXKITE=",
+ "owner": "NixOS",
+ "repo": "nixpkgs",
+ "rev": "0e304ff0d9db453a4b230e9386418fd974d5804a",
+ "type": "github"
+ },
+ "original": {
+ "id": "nixpkgs",
+ "type": "indirect"
+ }
+ },
+ "root": {
+ "inputs": {
+ "nixpkgs": "nixpkgs"
+ }
+ }
+ },
+ "root": "root",
+ "version": 7
+}
diff --git a/protohackers/1-prime-test/flake.nix b/protohackers/1-prime-test/flake.nix
new file mode 100644
index 0000000..d8479b2
--- /dev/null
+++ b/protohackers/1-prime-test/flake.nix
@@ -0,0 +1,24 @@
+{
+ description = "Protohackers 1: Prime test";
+
+ outputs = { self, nixpkgs }:
+ let
+ system = "x86_64-linux";
+ pkgs = import nixpkgs { inherit system; };
+ in rec
+ {
+ packages.x86_64-linux.docker-image = pkgs.dockerTools.buildImage {
+ name = "prime-test";
+ config = {
+ Cmd = [ "${packages.x86_64-linux.binary}/bin/1-prime-test" ];
+ };
+ };
+ packages.x86_64-linux.binary = pkgs.buildGoModule {
+ pname = "prime-test";
+ version = "0.0.1";
+ src = self;
+
+ vendorSha256 = "pQpattmS9VmO3ZIQUFn66az8GSmB4IvYhTTCFn6SUmo=";
+ };
+ };
+}
diff --git a/protohackers/1-prime-test/go.mod b/protohackers/1-prime-test/go.mod
new file mode 100644
index 0000000..78c74d2
--- /dev/null
+++ b/protohackers/1-prime-test/go.mod
@@ -0,0 +1,3 @@
+module 1-prime-test
+
+go 1.18
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
+}