Štampanje šahovske table sa kraljicama

U ranije prikazanom primeru 2, koji štampa raspored kraljica na tabli, imali smo tablu predstavljenu kao dvodimenzionalni niz stringova 8X8 – [8][8]string, i svaki string je sadržao tačku, kao onaku praznog polja, ili ♛ ako je neka od osam kraljica na datom polju. Pošto je polje [0][0] na našem prikazu dole levo, morali smo početi od zadnjeg reda i štampati jedan po jedan red prema prvom, odnosno od reda [7] do reda [0]:

for i := 7; i >= 0; i-- {
    fmt.Printf("%d %v\n", i+1, tabla[i])
}

Za potrebe štampanja usvojenog modela šahovske table [8]int možemo napraviti privremeni dvodimenzionalni niz [8][8]string, popuniti ga iz [8]int i odštampati kao u ranijem primeru.

// primer 4
package main

import (
    "fmt"
    "math/rand"
)

type šahovskaTabla [8]int

func (t šahovskaTabla) Print() {
    var redovi [8][8]string
    var prazanRed = [8]string{".", ".", ".", ".", ".", ".", ".", "."}

    // inicijalizacija redova
    for red := 0; red < 8; red++ {
        redovi[red] = prazanRed
    }

    for i := 0; i < 8; i++ {
        redovi[t[i]][i] = "♛"
    }

    for i := 7; i >= 0; i-- {
        fmt.Printf("%d %v\n", i+1, redovi[i])
    }
    fmt.Printf(" a b c d e f g h\n %v\n", t)
}

var tabla šahovskaTabla

func main() {
    //rand.Seed(time.Now().UnixNano())

    for i := 0; i < 8; i++ {
        tabla[i] = rand.Intn(8)
    }

    tabla.Print()
}

Ovde prikazani program generiše sledeći izlaz:

    8 [. ♛ ♛ . . . . .]
    7 [. . . . . ♛ . .]
    6 [. . . . . . . .]
    5 [. . . . . . . ♛]
    4 [. . . ♛ . . . .]
    3 [. . . . . . . .]
    2 [♛ . . . ♛ . ♛ .]
    1 [. . . . . . . .]
       a b c d e f g h
      [1 7 7 3 1 6 1 4]

što nas dovodi do kratke priče o generatoru slučajnih brojeva.

U primeru 4 smo našu šahovsku tablu [8]int deklarisali kao tip šahovskaTabla, i omogućili da se nad promenljivama tog tipa izvrši funkcija Print() koja štampa trenutni raspored kraljica.