From 3ca391ca27cfce852c1740eb1546f3fa4c77d5c4 Mon Sep 17 00:00:00 2001 From: Matej Focko Date: Thu, 20 Jun 2024 19:57:55 +0200 Subject: [PATCH] =?UTF-8?q?go:=20add=20=C2=AB1552.=20Magnetic=20Force=20Be?= =?UTF-8?q?tween=20Two=20Balls=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Matej Focko --- go/magnetic-force-between-two-balls.go | 41 ++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 go/magnetic-force-between-two-balls.go diff --git a/go/magnetic-force-between-two-balls.go b/go/magnetic-force-between-two-balls.go new file mode 100644 index 0000000..95bc635 --- /dev/null +++ b/go/magnetic-force-between-two-balls.go @@ -0,0 +1,41 @@ +package main + +import "slices" + +func maxDistance(position []int, m int) int { + placed := func(distance int) bool { + counter := 1 + + last := position[0] + for _, p := range position { + if p-last >= distance { + counter++ + last = p + } + + if counter >= m { + return true + } + } + + return false + } + + slices.Sort(position) + + low := 1 + high := (position[len(position)-1] - position[0]) / (m - 1) + + foundMax := 1 + for low <= high { + mid := low + (high-low)/2 + if placed(mid) { + foundMax = mid + low = mid + 1 + } else { + high = mid - 1 + } + } + + return foundMax +}