CSES - Putka Open 2015 – 2/6 - Results
Submission details
Task:Sudoku
Sender:
Submission time:2015-08-14 21:34:13 +0300
Language:Java
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED100
Test results
testverdicttime
#1ACCEPTED0.20 sdetails
#2ACCEPTED0.19 sdetails
#3ACCEPTED0.19 sdetails
#4ACCEPTED0.20 sdetails
#5ACCEPTED0.19 sdetails

Code

//package putka2.sudoku;

import java.util.Scanner;

/**
 *
 * @author Adreno
 */
public class Putka2Sudoku {

    public static int[][] s;
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String syote = "" + input.nextInt();
        s = new int[9][9];
        for (int i=0; i<9; i++) {
            s[0][i] = Integer.parseInt("" + syote.charAt(i));
        }
        ratkaise(1, 0);

        for (int y=0; y<9; y++) {
            for (int x=0; x<9; x++) {
                System.out.print(s[y][x]);
            }
            System.out.println();
        }
    }
    
    public static boolean ratkaise(int y, int x) {
        boolean[] varatut = new boolean[10];
        for (int i=0; i<y; i++) {
            varatut[s[i][x]] = true;
        }
        for (int i=0; i<x; i++) {
            varatut[s[y][i]] = true;
        }
        
        // blocks
        int bX = 0;
        if (x < 3) bX = 0;
        else if (x < 6) bX = 3;
        else bX = 6;
        int bY = 0;
        if (y < 3) bY = 0;
        else if (y < 6) bY = 3;
        else bY = 6;
        for (int i=0; i<3; i++) {
            for (int j=0; j<3; j++) {
                varatut[s[bY+i][bX+j]] = true;
            }
        }
        
        
        int nextY = y;
        int nextX = x+1;
        if (nextX == 9) {
            nextX = 0;
            nextY = y+1;
            if (nextY == 9) {
                for (int i=1; i<=9; i++) {
                    if (varatut[i]) continue;
                    s[y][x] = i;
                    return true;
                }
            }
        }
        for (int i=1; i<=9; i++) {
            if (varatut[i]) continue;
            s[y][x] = i;
            if (ratkaise(nextY, nextX)) return true;
            s[y][x] = 0;
        }
        return false;
    }
    
}

Test details

Test 1

Verdict: ACCEPTED

input
592836471

correct output
592836471
836471592
471592836
928364715
364715928
...

user output
592836471
134257689
678149235
213465798
456798123
...

Test 2

Verdict: ACCEPTED

input
672935418

correct output
672935418
935418672
418672935
729354186
354186729
...

user output
672935418
134268579
589147236
213456897
456789123
...

Test 3

Verdict: ACCEPTED

input
329174658

correct output
329174658
174658329
658329174
291746583
746583291
...

user output
329174658
145268379
678359124
213485796
456791283
...

Test 4

Verdict: ACCEPTED

input
376958421

correct output
376958421
958421376
421376958
769584213
584213769
...

user output
376958421
124367589
589124367
213475698
457689132
...

Test 5

Verdict: ACCEPTED

input
875694321

correct output
875694321
694321875
321875694
756943218
943218756
...

user output
875694321
123578469
469123578
214356897
356789142
...