package main

import "fmt"

func main() {
	// Slice bersarang: alokasikan setiap baris dengan make.
	matriks := make([][]int, 3)
	for i := range matriks {
		matriks[i] = make([]int, 3)
		for j := range matriks[i] {
			matriks[i][j] = i*3 + j + 1
		}
	}
	fmt.Println("matriks      :", matriks)
	fmt.Println("matriks[1][2]:", matriks[1][2])
	fmt.Println("matriks[2]   :", matriks[2])

	// Literal slice bersarang: panjang tiap baris boleh berbeda.
	segitiga := [][]int{
		{1},
		{1, 2},
		{1, 2, 3},
	}
	fmt.Println("segitiga     :", segitiga)
	for i, baris := range segitiga {
		fmt.Printf("len baris %d  = %d\n", i, len(baris))
	}

	// Jebakan: satu slice dipakai ulang untuk semua baris.
	satuBaris := make([]int, 3)
	jebakan := make([][]int, 3)
	for i := range jebakan {
		jebakan[i] = satuBaris
	}
	jebakan[0][0] = 42
	fmt.Println("jebakan      :", jebakan)
}
