// A maximum of 3 points will be given for the first test execution, if the program correctly prints the sorted slice
// after entering three distinct integers. **Points are awarded incrementally each time that an integer
// is added and it correctly prints the sorted slice.

//A maximum of 2 points will be given for the second test execution,
// if the program correctly prints the sorted slice after entering four distinct integers.
// **Points are awarded if it correctly prints the sorted slice after adding the fourth integer.

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func sortIntegers(integers []int) {
	//  Insertion sort O(n^2)
	i := 1
	for i < len(integers) {
		insert := integers[i]
		j := i - 1
		for j >= 0 {
			if insert < integers[j] {
				integers[j+1] = integers[j]
				j -= 1
			} else {
				break
			}
		}
		integers[j+1] = insert
		i += 1
	}
}

func main() {
	inputReader := bufio.NewReader(os.Stdin)
	var integers []int

	for {
		fmt.Println("Enter a integer of text: ")
		line, err := inputReader.ReadString('\n')

		if err != nil {
			fmt.Fprintf(os.Stderr, "An error occurred with your input.")
		}

		if strings.Contains(line, "X") {
			fmt.Println("Closing...")
			os.Exit(0)
		}

		inputInteger, err := strconv.Atoi(strings.TrimSpace(line))

		if err != nil {
			fmt.Fprintf(os.Stderr, "Could not convert %s to integer", strings.TrimSpace(line))
			continue
		}

		integers = append(integers, inputInteger)
		sortIntegers(integers)
		fmt.Println(integers)
	}
}
