summaryrefslogtreecommitdiffstats
path: root/board.c
blob: 4b9fb7cfb73bfdfd8bf163157624d19186697d98 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <ncurses.h>
#include <stdlib.h>
#include <time.h>
#include "board.h"

int puzzle[81];
int total = 0;

void puzzle_swap(int puzzle[81]);

void generate_first_line(int puzzle[81]) {
    srand ( time(NULL) );
    for (int i=0; i < 9; i++) {
        puzzle[i] = i + 1;
    }

    for (int i=0; i < 9; i++) {
        int random = (rand() % 9);
        int swap;

        swap = puzzle[random];
        puzzle[random] = puzzle[i];
        puzzle[i] = swap;

    }
}

void print_puzzle(int puzzle[81], bool reveal) {
    for (int i=0; i < 81; i++) {
        if ( i     == 0 ) printw(" SUDOKU");
        if ( i % 9 == 0 ) printw("\n");
        else if ( i % 3 == 0 ) printw("|");
        if ( i != 0 && i % 27 == 0 ) printw(" ===========================\n");

        if (puzzle[i] & 2) printw("%2d ", puzzle[i]);
        else if ( reveal == true ) printw("%2d ", puzzle[i]);
        else       printw("   ");
    }
}

void generate_puzzle(int puzzle[81]){
    for (int i=9; i < 81; i++){
        /* way too much nonsense to make a valid board
         *  "The seed row method" -> https://sudokupulse.com/articles/how-to-create-sudoku-puzzles/
        * row 2 */
        if ( i < 15) puzzle[i] = puzzle[i-6];
        else if ( i >= 15 && i < 18 ) puzzle[i] = puzzle[i-15];
        /* row 3 */
        else if ( i >= 18 && i < 24 ) puzzle[i] = puzzle[i-6];
        else if ( i >= 24 && i < 27 ) puzzle[i] = puzzle[i-15];
        /* row 4 */
        else if ( i >= 27 && i < 35 ) puzzle[i] = puzzle[i-26];
        else if ( i == 35 )           puzzle[i] = puzzle[i-35];
        /* row 5 */
        else if ( i >= 36 && i < 42 ) puzzle[i] = puzzle[i-6];
        else if ( i >= 42 && i < 45 ) puzzle[i] = puzzle[i-15];
        /* row 6 */
        else if ( i >= 45 && i < 51 ) puzzle[i] = puzzle[i-6];
        else if ( i >= 51 && i < 54 ) puzzle[i] = puzzle[i-15];
        /* row 7 */
        else if ( i >= 54 && i < 62 ) puzzle[i] = puzzle[i-26];
        else if ( i == 62 )           puzzle[i] = puzzle[i-35];
        /* row 8 */
        else if ( i >= 63 && i < 69 ) puzzle[i] = puzzle[i-6];
        else if ( i >= 69 && i < 72 ) puzzle[i] = puzzle[i-15];
        /* row 9 */
        else if ( i >= 72 && i < 78 ) puzzle[i] = puzzle[i-6];
        else if ( i >= 78 && i < 81 ) puzzle[i] = puzzle[i-15];

        puzzle_swap(puzzle);

    }
}

void puzzle_swap(int puzzle[81]) {

}