#include "time.h"
#include "stdlib.h"
#include "stdio.h"

//N x M parameters
static int rows = 7;
static int columns = 10;

int row_compare(const void * first_row, const void * second_row)
{
    const int * first_row_1 = *(const int**)first_row;
    const int * second_row_1 = *(const int**)second_row;

    if (first_row_1[columns] < second_row_1[columns])
        return -1;
    else if (first_row_1[columns] > second_row_1[columns])
        return 1;
    else
        return 0;
}

void print_array(int ** arr)
{
    printf("\nARRAY:\n");
    for(int i = 0; i < rows; i++)
    {
        printf("ROW %d:", i);
        for(int j = 0; j < columns; j++)
        {
            printf("%4d  ", arr[i][j]);
        }
        printf("METRIC: %d\n", arr[i][columns]);
    }
}

int main(int argc, char* argv[])
{
    //init values
    srand((unsigned)time(NULL));
    //allocs
    int ** my_array = (int**)malloc(sizeof(int*) * rows); //allocate pointers to rows
    for (int i = 0; i < rows; i++)
        my_array[i] = (int*)malloc(sizeof(int) * (columns+1)); //allocate the whole row + place for metric
    //fill the array + calculate the metric
    for (int i = 0; i < rows; i++)
    {
        //fill row with random values
        for (int j = 0; j < columns; j++)
            my_array[i][j] = (rand() % 20) - 10;
        //calculate metric for a row
        int metric = 0;
        for (int j = 0; j < columns; j++)
        {
            int elem = my_array[i][j];
            if ( (elem % 2) != 0 && elem < 0)
                metric += elem;
        }
        my_array[i][columns] = metric; //metric value
    }
    print_array(my_array);
    //sort it!
    qsort(my_array, rows, sizeof(int*), row_compare);
    print_array(my_array);
    system("pause");
    //free everything
    for (int i = 0; i < rows; i++)
        free(my_array[i]);
    free(my_array);
	return 0;
}

