Advertisement
Guest User

sudoku

a guest
May 15th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 6.25 KB | None | 0 0
  1. % sudoku.pl
  2. % Aswin F. van Woudenberg
  3.  
  4. :- use_module(library('clp/bounds')).
  5.  
  6. sudoku([
  7.         AA, AB, AC, AD, AE, AF, AG, AH, AI,
  8.         BA, BB, BC, BD, BE, BF, BG, BH, BI,
  9.         CA, CB, CC, CD, CE, CF, CG, CH, CI,
  10.         DA, DB, DC, DD, DE, DF, DG, DH, DI,
  11.         EA, EB, EC, ED, EE, EF, EG, EH, EI,
  12.         FA, FB, FC, FD, FE, FF, FG, FH, FI,
  13.         GA, GB, GC, GD, GE, GF, GG, GH, GI,
  14.         HA, HB, HC, HD, HE, HF, HG, HH, HI,
  15.         IA, IB, IC, ID, IE, IF, IG, IH, II]) :-
  16.     Vars = [
  17.         AA, AB, AC, AD, AE, AF, AG, AH, AI,
  18.         BA, BB, BC, BD, BE, BF, BG, BH, BI,
  19.         CA, CB, CC, CD, CE, CF, CG, CH, CI,
  20.         DA, DB, DC, DD, DE, DF, DG, DH, DI,
  21.         EA, EB, EC, ED, EE, EF, EG, EH, EI,
  22.         FA, FB, FC, FD, FE, FF, FG, FH, FI,
  23.         GA, GB, GC, GD, GE, GF, GG, GH, GI,
  24.         HA, HB, HC, HD, HE, HF, HG, HH, HI,
  25.         IA, IB, IC, ID, IE, IF, IG, IH, II],
  26.     Vars in 1..9,
  27.     all_different([AA, AB, AC, BA, BB, BC, CA, CB, CC]),
  28.     all_different([AD, AE, AF, BD, BE, BF, CD, CE, CF]),
  29.     all_different([AG, AH, AI, BG, BH, BI, CG, CH, CI]),
  30.     all_different([DA, DB, DC, EA, EB, EC, FA, FB, FC]),
  31.     all_different([DD, DE, DF, ED, EE, EF, FD, FE, FF]),
  32.     all_different([DG, DH, DI, EG, EH, EI, FG, FH, FI]),
  33.     all_different([GA, GB, GC, HA, HB, HC, IA, IB, IC]),
  34.     all_different([GD, GE, GF, HD, HE, HF, ID, IE, IF]),
  35.     all_different([GG, GH, GI, HG, HH, HI, IG, IH, II]),
  36.     all_different([AA, AB, AC, AD, AE, AF, AG, AH, AI]),
  37.     all_different([BA, BB, BC, BD, BE, BF, BG, BH, BI]),
  38.     all_different([CA, CB, CC, CD, CE, CF, CG, CH, CI]),
  39.     all_different([DA, DB, DC, DD, DE, DF, DG, DH, DI]),
  40.     all_different([EA, EB, EC, ED, EE, EF, EG, EH, EI]),
  41.     all_different([FA, FB, FC, FD, FE, FF, FG, FH, FI]),
  42.     all_different([GA, GB, GC, GD, GE, GF, GG, GH, GI]),
  43.     all_different([HA, HB, HC, HD, HE, HF, HG, HH, HI]),
  44.     all_different([IA, IB, IC, ID, IE, IF, IG, IH, II]),
  45.     all_different([AA, BA, CA, DA, EA, FA, GA, HA, IA]),
  46.     all_different([AB, BB, CB, DB, EB, FB, GB, HB, IB]),
  47.     all_different([AC, BC, CC, DC, EC, FC, GC, HC, IC]),
  48.     all_different([AD, BD, CD, DD, ED, FD, GD, HD, ID]),
  49.     all_different([AE, BE, CE, DE, EE, FE, GE, HE, IE]),
  50.     all_different([AF, BF, CF, DF, EF, FF, GF, HF, IF]),
  51.     all_different([AG, BG, CG, DG, EG, FG, GG, HG, IG]),
  52.     all_different([AH, BH, CH, DH, EH, FH, GH, HH, IH]),
  53.     all_different([AI, BI, CI, DI, EI, FI, GI, HI, II]),
  54.     label(Vars).
  55.  
  56. write_sol([
  57.         AA, AB, AC, AD, AE, AF, AG, AH, AI,
  58.         BA, BB, BC, BD, BE, BF, BG, BH, BI,
  59.         CA, CB, CC, CD, CE, CF, CG, CH, CI,
  60.         DA, DB, DC, DD, DE, DF, DG, DH, DI,
  61.         EA, EB, EC, ED, EE, EF, EG, EH, EI,
  62.         FA, FB, FC, FD, FE, FF, FG, FH, FI,
  63.         GA, GB, GC, GD, GE, GF, GG, GH, GI,
  64.         HA, HB, HC, HD, HE, HF, HG, HH, HI,
  65.         IA, IB, IC, ID, IE, IF, IG, IH, II]) :-
  66.     write('+---+---+---+'), nl,
  67.     write('|'), write(AA), write(AB), write(AC), write('|'),write(AD), write(AE), write(AF), write('|'),write(AG), write(AH), write(AI), write('|'),nl,
  68.     write('|'), write(BA), write(BB), write(BC), write('|'),write(BD), write(BE), write(BF), write('|'),write(BG), write(BH), write(BI), write('|'),nl,
  69.     write('|'), write(CA), write(CB), write(CC), write('|'),write(CD), write(CE), write(CF), write('|'),write(CG), write(CH), write(CI), write('|'),nl,
  70.     write('+---+---+---+'), nl,
  71.     write('|'), write(DA), write(DB), write(DC), write('|'),write(DD), write(DE), write(DF), write('|'),write(DG), write(DH), write(DI), write('|'),nl,
  72.     write('|'), write(EA), write(EB), write(EC), write('|'),write(ED), write(EE), write(EF), write('|'),write(EG), write(EH), write(EI), write('|'),nl,
  73.     write('|'), write(FA), write(FB), write(FC), write('|'),write(FD), write(FE), write(FF), write('|'),write(FG), write(FH), write(FI), write('|'),nl,
  74.     write('+---+---+---+'), nl,
  75.     write('|'), write(GA), write(GB), write(GC), write('|'),write(GD), write(GE), write(GF), write('|'),write(GG), write(GH), write(GI), write('|'),nl,
  76.     write('|'), write(HA), write(HB), write(HC), write('|'),write(HD), write(HE), write(HF), write('|'),write(HG), write(HH), write(HI), write('|'),nl,
  77.     write('|'), write(IA), write(IB), write(IC), write('|'),write(ID), write(IE), write(IF), write('|'),write(IG), write(IH), write(II), write('|'),nl,
  78.     write('+---+---+---+'), nl.
  79.    
  80. get_num(NumValue) :-
  81.     get_single_char(Value),
  82.     (member(Value, [49,50,51,52,53,54,55,56,57]),
  83.      NumValue is Value - 48,
  84.      write(NumValue)), !;
  85.     (write('x')).
  86.  
  87. read_sudoku([
  88.         AA, AB, AC, AD, AE, AF, AG, AH, AI,
  89.         BA, BB, BC, BD, BE, BF, BG, BH, BI,
  90.         CA, CB, CC, CD, CE, CF, CG, CH, CI,
  91.         DA, DB, DC, DD, DE, DF, DG, DH, DI,
  92.         EA, EB, EC, ED, EE, EF, EG, EH, EI,
  93.         FA, FB, FC, FD, FE, FF, FG, FH, FI,
  94.         GA, GB, GC, GD, GE, GF, GG, GH, GI,
  95.         HA, HB, HC, HD, HE, HF, HG, HH, HI,
  96.         IA, IB, IC, ID, IE, IF, IG, IH, II]) :-
  97.     write('+---+---+---+'), nl,
  98.     write('|'), get_num(AA), get_num(AB), get_num(AC), write('|'),get_num(AD), get_num(AE), get_num(AF), write('|'),get_num(AG), get_num(AH), get_num(AI), write('|'),nl,
  99.     write('|'), get_num(BA), get_num(BB), get_num(BC), write('|'),get_num(BD), get_num(BE), get_num(BF), write('|'),get_num(BG), get_num(BH), get_num(BI), write('|'),nl,
  100.     write('|'), get_num(CA), get_num(CB), get_num(CC), write('|'),get_num(CD), get_num(CE), get_num(CF), write('|'),get_num(CG), get_num(CH), get_num(CI), write('|'),nl,
  101.     write('+---+---+---+'), nl,
  102.     write('|'), get_num(DA), get_num(DB), get_num(DC), write('|'),get_num(DD), get_num(DE), get_num(DF), write('|'),get_num(DG), get_num(DH), get_num(DI), write('|'),nl,
  103.     write('|'), get_num(EA), get_num(EB), get_num(EC), write('|'),get_num(ED), get_num(EE), get_num(EF), write('|'),get_num(EG), get_num(EH), get_num(EI), write('|'),nl,
  104.     write('|'), get_num(FA), get_num(FB), get_num(FC), write('|'),get_num(FD), get_num(FE), get_num(FF), write('|'),get_num(FG), get_num(FH), get_num(FI), write('|'),nl,
  105.     write('+---+---+---+'), nl,
  106.     write('|'), get_num(GA), get_num(GB), get_num(GC), write('|'),get_num(GD), get_num(GE), get_num(GF), write('|'),get_num(GG), get_num(GH), get_num(GI), write('|'),nl,
  107.     write('|'), get_num(HA), get_num(HB), get_num(HC), write('|'),get_num(HD), get_num(HE), get_num(HF), write('|'),get_num(HG), get_num(HH), get_num(HI), write('|'),nl,
  108.     write('|'), get_num(IA), get_num(IB), get_num(IC), write('|'),get_num(ID), get_num(IE), get_num(IF), write('|'),get_num(IG), get_num(IH), get_num(II), write('|'),nl,
  109.     write('+---+---+---+'), nl.
  110.  
  111. solve_sudoku :-
  112.     read_sudoku(L),
  113.     sudoku(L),
  114.     write_sol(L).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement