82 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
// For more tutorials: https://blog.learngoprogramming.com
 | 
						|
//
 | 
						|
// Copyright © 2018 Inanc Gumus
 | 
						|
// Learn Go Programming Course
 | 
						|
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
 | 
						|
//
 | 
						|
 | 
						|
package main
 | 
						|
 | 
						|
import (
 | 
						|
	"fmt"
 | 
						|
	"strings"
 | 
						|
)
 | 
						|
 | 
						|
func main() {
 | 
						|
	//
 | 
						|
	// DAILY REQUESTS DATA
 | 
						|
	//
 | 
						|
	reqs := []int{
 | 
						|
		500, 600, 250,
 | 
						|
		200, 400, 50,
 | 
						|
		900, 800, 600,
 | 
						|
		750, 250, 100,
 | 
						|
		100, 150,
 | 
						|
	}
 | 
						|
 | 
						|
	//
 | 
						|
	// There are 3 requests per day
 | 
						|
	//
 | 
						|
	const N = 3
 | 
						|
 | 
						|
	//
 | 
						|
	// Allocate the slice efficiently with the exact size needed
 | 
						|
	//
 | 
						|
	l := len(reqs)
 | 
						|
	size := l / N
 | 
						|
	if l%N != 0 {
 | 
						|
		size++
 | 
						|
	}
 | 
						|
	daily := make([][]int, 0, size)
 | 
						|
 | 
						|
	//
 | 
						|
	// Group the `reqs` per day into a slice named: `daily`
 | 
						|
	//
 | 
						|
	for N < len(reqs) {
 | 
						|
		daily = append(daily, reqs[:N]) // add the current batch of nums to the `groups`
 | 
						|
		reqs = reqs[N:]                 // move the slice pointer for the next batch
 | 
						|
	}
 | 
						|
 | 
						|
	//
 | 
						|
	// Add the residual elements to the group (len(reqs) % N)
 | 
						|
	//
 | 
						|
	daily = append(daily, reqs)
 | 
						|
 | 
						|
	//
 | 
						|
	// Print the header:
 | 
						|
	//
 | 
						|
	fmt.Printf("%-10s%-10s\n", "Day", "Requests")
 | 
						|
	fmt.Println(strings.Repeat("=", 20))
 | 
						|
 | 
						|
	//
 | 
						|
	// Print the data per day along with the totals:
 | 
						|
	//
 | 
						|
	var grand int
 | 
						|
 | 
						|
	for i, d := range daily {
 | 
						|
		var sum int
 | 
						|
 | 
						|
		for _, q := range d {
 | 
						|
			sum += q
 | 
						|
			fmt.Printf("%-10d%-10d\n", i+1, q)
 | 
						|
		}
 | 
						|
 | 
						|
		fmt.Println(strings.Repeat("-", 20))
 | 
						|
		fmt.Printf("%10s%-10d\n\n", "", sum)
 | 
						|
 | 
						|
		grand += sum
 | 
						|
	}
 | 
						|
 | 
						|
	fmt.Printf("%10s%-10d\n", "", grand)
 | 
						|
}
 |