161 lines
3.5 KiB
Go
161 lines
3.5 KiB
Go
package maxsubsum
|
|
|
|
/* ---------------------------------------------------------------- *
|
|
* IMPORTS
|
|
* ---------------------------------------------------------------- */
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"ads/internal/core/metrics"
|
|
"ads/internal/setup"
|
|
)
|
|
|
|
/* ---------------------------------------------------------------- *
|
|
* GLOBAL VARIABLES/CONSTANTS
|
|
* ---------------------------------------------------------------- */
|
|
|
|
//
|
|
|
|
/* ---------------------------------------------------------------- *
|
|
* CHECKS
|
|
* ---------------------------------------------------------------- */
|
|
|
|
func preChecks(L []int, _ ...interface{}) error {
|
|
if !(len(L) > 0) {
|
|
return fmt.Errorf("Liste darf nicht leer sein.")
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func postChecks(L []int, _ ...interface{}) error {
|
|
// TODO
|
|
return nil
|
|
}
|
|
|
|
/* ---------------------------------------------------------------- *
|
|
* METHOD Algorithm + Display
|
|
* ---------------------------------------------------------------- */
|
|
|
|
func FancyMaxSubSum(input_L []int) (int, int, int, error) {
|
|
var name = "MaxSubSum (Maximale Teilsumme)"
|
|
var inputs = map[string]interface{}{
|
|
"L": input_L,
|
|
}
|
|
var outputs map[string]interface{}
|
|
var (
|
|
output_maxSum int
|
|
output_indexFrom int
|
|
output_indexTo int
|
|
)
|
|
var err error
|
|
|
|
do_once := true
|
|
for do_once {
|
|
do_once = false
|
|
|
|
// Start Message
|
|
setup.DisplayStartOfAlgorithm(name, inputs)
|
|
|
|
// Prechecks:
|
|
if setup.AppConfigPerformChecks() {
|
|
err = preChecks(input_L)
|
|
if err != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
// Ausführung des Algorithmus:
|
|
metrics.ResetMetrics()
|
|
metrics.StartMetrics()
|
|
output_maxSum, output_indexFrom, output_indexTo = MaxSubSum(input_L)
|
|
metrics.StopMetrics()
|
|
outputs = map[string]interface{}{
|
|
"maxSum": output_maxSum,
|
|
"index_from": output_indexFrom,
|
|
"index_to": output_indexTo,
|
|
}
|
|
|
|
// Metriken anzeigen
|
|
if setup.AppConfigShowMetrics() {
|
|
setup.DisplayMetrics()
|
|
}
|
|
|
|
// End Message
|
|
setup.DisplayEndOfAlgorithm(outputs)
|
|
|
|
// Postchecks:
|
|
if setup.AppConfigPerformChecks() {
|
|
err = postChecks(input_L, output_maxSum, output_indexFrom, output_indexTo)
|
|
if err != nil {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
return output_maxSum, output_indexFrom, output_indexTo, err
|
|
}
|
|
|
|
/* ---------------------------------------------------------------- *
|
|
* ALGORITHM max sub sum (D & C)
|
|
* ---------------------------------------------------------------- */
|
|
|
|
func FancyMaxSubSumDC(input_L []int) (int, int, int, error) {
|
|
var name = "MaxSubSum (Maximale Teilsumme mit D & C)"
|
|
var inputs = map[string]interface{}{
|
|
"L": input_L,
|
|
}
|
|
var outputs map[string]interface{}
|
|
var (
|
|
output_maxSum int
|
|
output_indexFrom int
|
|
output_indexTo int
|
|
)
|
|
var err error
|
|
|
|
do_once := true
|
|
for do_once {
|
|
do_once = false
|
|
|
|
// Start Message
|
|
setup.DisplayStartOfAlgorithm(name, inputs)
|
|
|
|
// Prechecks:
|
|
if setup.AppConfigPerformChecks() {
|
|
err = preChecks(input_L)
|
|
if err != nil {
|
|
break
|
|
}
|
|
}
|
|
|
|
// Ausführung des Algorithmus:
|
|
metrics.ResetMetrics()
|
|
metrics.StartMetrics()
|
|
output_maxSum, output_indexFrom, output_indexTo = MaxSubSumDC(input_L)
|
|
metrics.StopMetrics()
|
|
outputs = map[string]interface{}{
|
|
"maxSum": output_maxSum,
|
|
"index_from": output_indexFrom,
|
|
"index_to": output_indexTo,
|
|
}
|
|
|
|
// Metriken anzeigen
|
|
if setup.AppConfigShowMetrics() {
|
|
setup.DisplayMetrics()
|
|
}
|
|
|
|
// End Message
|
|
setup.DisplayEndOfAlgorithm(outputs)
|
|
|
|
// Postchecks:
|
|
if setup.AppConfigPerformChecks() {
|
|
err = postChecks(input_L, output_maxSum, output_indexFrom, output_indexTo)
|
|
if err != nil {
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
return output_maxSum, output_indexFrom, output_indexTo, err
|
|
}
|