package main import ( "fmt" ) func createArr(nptr *int) *[][]bool { arr := make([][]bool, (1 << *nptr)) for i := range arr { arr[i] = make([]bool, *nptr) } for row := 1; row < len(arr); row++ { copy(arr[row], arr[row-1]) column: for column := range arr[row]{ if arr[row][column] == false { arr[row][column] = true break column } else { arr[row][column] = false } } } return &arr } func readArr(arrptr *[][]bool, kpttr *int) *[][]bool { var validRows [][]bool counter := 0 for row := range *arrptr { counter = 0 for column := range (*arrptr)[row] { if (*arrptr)[row][column] == true { counter++ } } if counter == *kpttr { validRows = append(validRows, (*arrptr)[row]) } } return &validRows } func main() { n := 4 k := 3 arrptr := createArr(&n) fmt.Println(*arrptr) validRowpttr := readArr(arrptr, &k) fmt.Println(*validRowpttr) }