// 4. hét – String += ciklusban vs strings.Builder
// Futtatás: go run ./h04/builder
package main

import (
	"fmt"
	"strings"
	"time"
)

// Minden += új stringet hoz létre és átmásolja a régit: O(n²)
func concatPlus(n int) string {
	s := ""
	for i := 0; i < n; i++ {
		s += "x"
	}
	return s
}

// strings.Builder: dinamikus bájttömb, amortizáltan O(1) hozzáfűzés
func concatBuilder(n int) string {
	var sb strings.Builder
	for i := 0; i < n; i++ {
		sb.WriteString("x")
	}
	return sb.String()
}

func main() {
	fmt.Println("        n   string += (ms)   strings.Builder (ms)")
	for n := 10_000; n <= 160_000; n *= 2 {
		t0 := time.Now()
		concatPlus(n)
		t1 := time.Now()
		concatBuilder(n)
		t2 := time.Now()
		fmt.Printf("%9d %16.1f %22.2f\n", n,
			float64(t1.Sub(t0).Microseconds())/1000, float64(t2.Sub(t1).Microseconds())/1000)
	}
}
