aboutsummaryrefslogtreecommitdiff
path: root/math/mimax.go
diff options
context:
space:
mode:
authorAlexander Kiryukhin <a.kiryukhin@mail.ru>2022-05-01 21:50:12 +0300
committerAlexander Kiryukhin <a.kiryukhin@mail.ru>2022-05-01 21:50:12 +0300
commit9fcf8e29214210612d545bed50d7f889800ac639 (patch)
tree3a99d2cd37fb8158d49abc1de6298758d205c9dd /math/mimax.go
Initial
Diffstat (limited to 'math/mimax.go')
-rw-r--r--math/mimax.go63
1 files changed, 63 insertions, 0 deletions
diff --git a/math/mimax.go b/math/mimax.go
new file mode 100644
index 0000000..546afba
--- /dev/null
+++ b/math/mimax.go
@@ -0,0 +1,63 @@
+package math
+
+import "go.neonxp.dev/extra/utils"
+
+// MinScalar возвращает минимальное из переданных скалярных значений
+func MinScalar[T utils.Scalar](a ...T) T {
+ i := -1
+ for j, v := range a {
+ if i == -1 {
+ i = j
+ continue
+ }
+ if v < a[i] {
+ i = j
+ }
+ }
+ return a[i]
+}
+
+// MaxScalar возвращает максимальное из переданных скалярных значений
+func MaxScalar[T utils.Scalar](a ...T) T {
+ i := -1
+ for j, v := range a {
+ if i == -1 {
+ i = j
+ continue
+ }
+ if v > a[i] {
+ i = j
+ }
+ }
+ return a[i]
+}
+
+// Min возвращает минимальное из переданных Sortable значений
+func Min[T utils.Sortable[T]](a ...T) T {
+ i := -1
+ for j, v := range a {
+ if i == -1 {
+ i = j
+ continue
+ }
+ if v.Less(a[i]) {
+ i = j
+ }
+ }
+ return a[i]
+}
+
+// Max возвращает максимальное из переданных Sortable значений
+func Max[T utils.Sortable[T]](a ...T) T {
+ i := -1
+ for j, v := range a {
+ if i == -1 {
+ i = j
+ continue
+ }
+ if a[i].Less(v) {
+ i = j
+ }
+ }
+ return a[i]
+}