Posted by maedhros Wed 7th Mar 2007 19:56 - Syntax is Java - 53 views
Download | New Post | Modify | Hide line numbers
Description:
wut?

  1. // fredrihl o-2
  2.  
  3. import easyIO.*; // EasyIO v4.0
  4. import java.util.*;
  5. //import java.io.*;
  6.  
  7.  
  8. /**
  9. * Oblig 2 INF1010.
  10. * @author fredrihl
  11. * @version 1
  12. * @param args filen som skal løses
  13. */
  14. class o2 {
  15.     public static void main ([] args) {
  16.         if (args.length == 1) {
  17.             fil = args[0];
  18.             Kontroll k = new Kontroll(fil);
  19.         } else .out.print(" * Angi fil, eks: 'java o2 sudoku.txt'\n");
  20.     } // main
  21. } // o2
  22.  
  23.  
  24.  
  25.  
  26. class Kontroll {
  27.  
  28.     Utsyn ut = new Utsyn();
  29.     Brett brett;
  30.  
  31.     /**
  32.      * Kontruktøren i klassen Kontroll bruker angitt filnavn til å hente en slik fil og blablabla.
  33.      */
  34.     Kontroll( fil) {
  35.     /*    Alle løsningene til en tom fil:*/
  36.  
  37.     /*/    Generere tom
  38.         int dim=2, horz=1, vert=1;
  39.         this.b = new Brett(dim, horz, vert);
  40.         for(int i=0; i
  41.     //*/
  42.        
  43.     //lese fra fil
  44.         In data = new In(fil);
  45.         int dim = 0, hr = 0, vr = 0;
  46.         int i = 0, id=0;
  47.        
  48.         //lesing
  49.         if(!data.endOfFile()) dim = data.inInt();
  50.          else ut.readError();
  51.         if(!data.endOfFile()) hr = data.inInt();
  52.          else ut.readError();
  53.         if(!data.endOfFile()) vr = data.inInt();
  54.          else ut.readError();
  55.          
  56.         brett = new Brett(dim, hr, vr);
  57.        
  58.         while(!data.endOfFile() && i) {
  59.             int j=0;
  60.             while(j < dim) {
  61.                 int boks = ((id/(hr * dim)) * hr)+((id % dim) / vr);    //utregning av boks
  62.                 brett.assign(new Rute(data.inChar("\n "), i, j++, boks, id++, brett) );
  63.             }
  64.             i++;
  65.         } // while
  66.         data.close();
  67.         //*/
  68.         brett.tilordneSektor();
  69.         int[][] a = new int[dim][dim];
  70.         for(int x=0; x)
  71.             for(int y=0; y)
  72.                 a[x][y] = brett.ruter[x][y].getValue();
  73.         ut.printBrett(a);
  74. //        brett.bokser.skriv();
  75.         brett.ruter[0][0].provAlleSifferMegOgResten(0,0);
  76.         brett.skrivLosninger();
  77.         .out.print("\n antalltestbrett: " +brett.antalltestbrett+"\n");
  78.  
  79.     } // Kontroll()
  80. }
  81.  
  82.  
  83.  
  84. // ** Modell ** //
  85.  
  86. class Brett {
  87.    
  88.     int dimensjon, ant_x, ant_y; //dimensjoner, antall Boks i x- og y-retning
  89.     Rute[][] ruter;
  90.     Sektor[] kolonner, rader, bokser;   
  91.     ArrayList[][]> losninger = new ArrayList[][]>();
  92.     int antalltestbrett = 0;
  93.    
  94.     Brett(int dimensjon, int ant_x, int ant_y) {
  95.         this.ruter = new Rute[dimensjon][dimensjon];
  96.         this.dimensjon = dimensjon;
  97.         this.ant_x = ant_x;
  98.         this.ant_y = ant_y;
  99.         this.kolonner = new Kol[dimensjon];
  100.         this.rader = new Rad[dimensjon];
  101.         this.bokser = new Boks[dimensjon];
  102.         for(int i=0; i) {
  103.             kolonner[i] = new Kol();
  104.             rader[i] = new Rad();
  105.             bokser[i] = new Boks();
  106.         }
  107.     }
  108.  
  109.     public void assign(Rute r) {
  110.         int[] koo = r.sektor();
  111.         this.ruter[koo[0]][koo[1]] = r;
  112.     }
  113.    
  114.     public void tilordneSektor() {
  115.         for(Rute rt[]: ruter) {
  116.             for(Rute r: rt){
  117.                 int[] koo = r.sektor();
  118.                 this.kolonner[koo[0]].assign(r);
  119.                 this.rader[koo[1]].assign(r);
  120.                 this.bokser[koo[2]].assign(r);
  121.             }
  122.         }
  123.     }
  124.        
  125.    
  126.     public int giDim() {
  127.         return this.dimensjon;
  128.     }
  129.    
  130.    
  131.    
  132.     public void addLosning(Rute[][] l) {
  133.         int[][] losning = new int[dimensjon][dimensjon];
  134.         for(int x=0; x)
  135.             for(int y=0; y)
  136.                 losning[x][y] = ruter[x][y].getValue();
  137.         this.losninger.add(losning);
  138.     }
  139.    
  140.        
  141.     public void skrivLosninger() {
  142.         for(int[][] l: losninger) Utsyn.printBrett(l);
  143.     }
  144.    
  145. }
  146.  
  147. /**
  148. * Generell superklasse for de forskjellige sektorene på brettet
  149. */
  150. class Sektor {
  151.     ArrayList verdier = new ArrayList();
  152.  
  153.     public void assign(Rute r) {
  154.         this.verdier.add(r);
  155.     }
  156.     public boolean unique(int value) {
  157.         boolean finnes = false;
  158.         for(Rute r: verdier) if(r.getValue() == value) finnes = true;
  159.         return !finnes;
  160.     }
  161.     void skriv() {
  162.         for(Rute r: verdier) .out.print("mongo: "+r.getValue() + " ");
  163.     }
  164. }
  165.  
  166. class Rad extends Sektor {
  167.     //nothing
  168. }
  169.  
  170. class Kol extends Sektor {
  171. //
  172. }
  173.  
  174. class Boks extends Sektor {
  175.  
  176. }
  177.  
  178. class Rute {
  179.  
  180.     int value, id;
  181.     int kol, rad, boks, dim;
  182.     Brett br; // brukes i den rekursive metoden.
  183.    
  184.     Rute(char c, int x, int y, int boks, int id, Brett br) {   
  185.         this.value = toNumber(c);
  186.         this.boks = boks;
  187.         this.id = id;
  188.         this.kol = x;
  189.         this.rad = y;
  190.         this.dim = br.giDim();
  191.         this.br = br;
  192.     }
  193.    
  194.     public int getValue() {
  195.         return this.value;
  196.     }
  197.     public void setValue(int v) {
  198.         this.value = v;
  199.     }
  200.    
  201.     public int[] sektor() {
  202.         int[] k = {kol,rad,boks};
  203.         return k;
  204.     }
  205.    
  206.     private static int toNumber(char c) {
  207.         int value;
  208.         value = .digit(c, 36);
  209.         if(value == -1) value = 0;    //Usatt verdi = 0
  210.         return value;
  211.     }
  212.    
  213.     public void provAlleSifferMegOgResten(int x, int y) {
  214.  
  215.         boolean alle=false;
  216.  
  217.         y++;
  218.         if (y == dim) {
  219.             y = 0;
  220.             x++;
  221.             if (x == dim)
  222.             alle = true;
  223.         } //slutt if
  224.        
  225.         if (value == 0) {
  226.             for(int v=1; v) {
  227.                 if(br.kolonner[kol].unique(v) && br.rader[rad].unique(v) && br.bokser[boks].unique(v)){
  228.                     setValue(v);
  229.                     if(alle) {
  230.                         br.addLosning(br.ruter);
  231.                         br.antalltestbrett++;
  232.                         alle = false;
  233.                     } else br.ruter[x][y].provAlleSifferMegOgResten(x,y);
  234.                 }
  235.             }//for()
  236.             setValue(0);
  237.         } else {
  238.        
  239.             if(alle) {
  240.                 br.addLosning(br.ruter);
  241.                 alle = false;
  242.             } else br.ruter[x][y].provAlleSifferMegOgResten(x,y);
  243.         }
  244.    
  245.     } //provalle
  246.  
  247.  
  248. }
  249.  
  250.  
  251. /**
  252. * Kontroll setter i gang sirkuset.
  253. */
  254.  
  255.  
  256. class Utsyn {
  257.  
  258.     private static char toChar(int value) {
  259.         char c = .forDigit(value, 36);       
  260.         if(value==-1) c = '-';
  261.         return c;
  262.     }
  263.  
  264.     static void readError() {
  265.         .out.print(" ** Error: Det har oppstått en feil under lesing av fil.\n");
  266.     }
  267.    
  268.     static void printBrett(int[][] brett) {
  269.         out = "";
  270.         for(int[] rad: brett) {
  271.             for(int r: rad) {
  272.                 out += toChar(r) + "  ";
  273.             }
  274.             out += "\n";
  275.         }
  276.         .out.println(out);
  277.     }
  278.    
  279. }

PermaLink to this entry https://pastebin.co.uk/11533
Posted by maedhros Wed 7th Mar 2007 19:56 - Syntax is Java - 53 views
Download | New Post | Modify | Hide line numbers

 

Comments: 0