Domanda

Dato un array di 81 elementi (pensato per rappresentare una griglia 9x9) come posso andare su ogni elemento, afferrare i tre attorno ad esso e quindi eseguire un'operazione su quelli, quindi continuare con i tre successivi di ogni riga, colonna, o submatrix. Guarda sotto o una griglia di sudoku per vedere il layout.


define COL(n)      ((n) % 9)
define ROW(n)      ((n) / 9)
define SUB(n)      ((n / 3) % 9)

Ad esempio, ho


int grid[81];

e


int array_x[9], array_y[9], array_s[9];

Dato che la griglia totale 9x9 può essere suddivisa in 9 delle seguenti categorie, ci sono nove elementi in ciascun array e spero di prendere gli elementi di ogni colonna (l'asse x) in gruppi di tre, eseguire


r = ((a = ~a) & (b = ~b)) | ((b | a) & ~c);

// or

r = ((~a & ~b)) | ((~b | ~a) & ~c);

su di essi, prendi i tre numeri risultanti, eseguili su di essi e quindi memorizzali nell'array.

Se questo sembra impossibile, mi dispiace, vorrei un modo diverso di farlo. Sicuramente aperto ai suggerimenti ...

È stato utile?

Soluzione

Un altro tentativo:

void applyThingy(int *grid, int xPitch, int yPitch)
{
    int row, column;
    int *rowPointer = grid;

    for(row = 0; row < 3; ++row)
    {
        int *columnPointer = rowPointer;

        for(column = 0; column < 3; ++column)
        {
            doOperation(columnPointer);
            columnPointer += xPitch;
        }

        rowPointer += yPitch * 9;
    }
}

applyThingy(&grid[SUB(n)], 1, 1); // Perform on 3x3 subgrid
applyThingy(&grid[ROW(n)], 1, 0); // Perform on row
applyThingy(&grid[COL(n)], 0, 1); // Perform on column

Altri suggerimenti

Non sono sicuro di cosa tu voglia fare, ma è qualcosa del genere ?:

#define IDX(row, col) ((row)*9+(col))

int m = some_column;
for (int n = 0; n < 9; n += 3) {
  a = grid[IDX(n, m)];
  b = grid[IDX(n+1, m)];
  c = grid[IDX(n+2, m)];
  r = ...;
  ...
}

Inoltre, non sono sicuro di cosa tu voglia fare della tua operazione

r = ((a = ~a) & (b = ~b)) | ((b | a) & ~c);

Stai assegnando ~ a a a , è quello che vuoi? Come viene definito a e su cosa stai cercando di impostarlo? Cosa stai cercando di ottenere?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top