From b3ec87c1c34a7e4d891064995f6c8bbf194811a4 Mon Sep 17 00:00:00 2001 From: emil Date: Wed, 27 Nov 2024 21:45:27 +0300 Subject: [PATCH] Add analitical version of algorithm with plotting --- Main.java | 12 +- statistical/demo/pom.xml | 21 + .../demo/src/main/java/com/example/Main.java | 382 ++++++++++++++++++ .../demo/target/classes/Main$Chromosome.class | Bin 0 -> 3502 bytes statistical/demo/target/classes/Main.class | Bin 0 -> 8590 bytes .../classes/com/example/Main$Chromosome.class | Bin 0 -> 3549 bytes .../target/classes/com/example/Main.class | Bin 0 -> 8854 bytes statistical/demo/target/demo-1.0-SNAPSHOT.jar | Bin 0 -> 8164 bytes .../demo/target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 2 + .../compile/default-compile/inputFiles.lst | 1 + .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 13 files changed, 415 insertions(+), 6 deletions(-) create mode 100644 statistical/demo/pom.xml create mode 100644 statistical/demo/src/main/java/com/example/Main.java create mode 100644 statistical/demo/target/classes/Main$Chromosome.class create mode 100644 statistical/demo/target/classes/Main.class create mode 100644 statistical/demo/target/classes/com/example/Main$Chromosome.class create mode 100644 statistical/demo/target/classes/com/example/Main.class create mode 100644 statistical/demo/target/demo-1.0-SNAPSHOT.jar create mode 100644 statistical/demo/target/maven-archiver/pom.properties create mode 100644 statistical/demo/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 statistical/demo/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 statistical/demo/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 statistical/demo/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst diff --git a/Main.java b/Main.java index e1c38d8..db30672 100644 --- a/Main.java +++ b/Main.java @@ -49,13 +49,13 @@ public class Main { // Choosing variables for different sudoku difficulties if (mutablePositions.size() < EASYTHRESHOLD) { // Easy sudoku - POPULATIONSIZE = 75; - TOURNAMENTSIZE = 4; - MUTATIONRATE = 0.04; - } else if (mutablePositions.size() < HARDTHRESHOLD) { // Hard sudoku - POPULATIONSIZE = 150; + POPULATIONSIZE = 100; TOURNAMENTSIZE = 5; - MUTATIONRATE = 0.055; + MUTATIONRATE = 0.05; + } else if (mutablePositions.size() < HARDTHRESHOLD) { // Hard sudoku + POPULATIONSIZE = 100; + TOURNAMENTSIZE = 5; + MUTATIONRATE = 0.057; } else { // Ultra-hard sudoku POPULATIONSIZE = 2000; diff --git a/statistical/demo/pom.xml b/statistical/demo/pom.xml new file mode 100644 index 0000000..fcce154 --- /dev/null +++ b/statistical/demo/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + com.example + SudokuSolver + 1.0-SNAPSHOT + + + com.example + demo + 1.0-SNAPSHOT + + + 17 + 17 + + + \ No newline at end of file diff --git a/statistical/demo/src/main/java/com/example/Main.java b/statistical/demo/src/main/java/com/example/Main.java new file mode 100644 index 0000000..528516d --- /dev/null +++ b/statistical/demo/src/main/java/com/example/Main.java @@ -0,0 +1,382 @@ +package com.example; +import java.io.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import org.knowm.xchart.SwingWrapper; +import org.knowm.xchart.XYChart; +import org.knowm.xchart.XYSeries; +import org.knowm.xchart.XYSeries.XYSeriesRenderStyle; + +public class Main { + // Initalizing variables + public static int POPULATIONSIZE = 0; + public static int TOURNAMENTSIZE = 0; + public static double MUTATIONRATE = 0; + // Threshold of number of mutable positions for easy level sudoku + public static int EASYTHRESHOLD = 60; + public static int HARDTHRESHOLD = 70; + // List to store the population of chromosomes + List population = new ArrayList<>(); + Random random = new Random(); + + public static void main(String[] args) { + // Base Sudoku matrix (input matrix) + int[][] baseSudoku = new int[9][9]; + // List to track positions in Sudoku that are mutable + List mutablePositions = new ArrayList<>(); + BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); + + try { + // Reading the Sudoku matrix from the console input + for (int i = 0; i < 9; i++) { + // Split the input by space + String[] tokens = reader.readLine().split(" "); + for (int j = 0; j < 9; j++) { + if (tokens[j].equals("-")) { + // Empty cells are marked as 0 + baseSudoku[i][j] = 0; + // Add mutable positions (i, j) to the list + mutablePositions.add(new int[]{i, j}); + } else { + // Set fixed value from the input + baseSudoku[i][j] = Integer.parseInt(tokens[j]); + } + } + } + } catch (IOException e) { + // If an error occurs during input reading, print the error and stop the program + System.err.println("Error reading input: " + e.getMessage()); + return; + } + + Main mainInstance = new Main(); // Create instance of Main class + + // Choosing variables for different sudoku difficulties + if (mutablePositions.size() < EASYTHRESHOLD) { // Easy sudoku + POPULATIONSIZE = 75; + TOURNAMENTSIZE = 4; + MUTATIONRATE = 0.04; + } else if (mutablePositions.size() < HARDTHRESHOLD) { // Hard sudoku + POPULATIONSIZE = 150; + TOURNAMENTSIZE = 5; + MUTATIONRATE = 0.055; + } + else { // Ultra-hard sudoku + POPULATIONSIZE = 2000; + TOURNAMENTSIZE = 10; + MUTATIONRATE = 0.2; + } + + // Generate initial population of chromosomes + mainInstance.generateInitialChromosomes(POPULATIONSIZE, baseSudoku, mutablePositions); + + Chromosome bestSolution = null; + List fitnessValues = new ArrayList<>(); + + int generation = 0; // Track the number of generations + while (true) { + // Evaluate the fitness of each chromosome in the population + mainInstance.evaluatePopulation(); + + // Track the best fitness value in the current generation + bestSolution = mainInstance.getBestChromosome(); + fitnessValues.add(bestSolution.getFitness()); + + List newPopulation = new ArrayList<>(); + for (int i = 0; i < mainInstance.population.size() / 2; i++) { + // Select parents using tournament selection + List parents = mainInstance.tournamentSelection(TOURNAMENTSIZE); + // Perform crossover to create two children from the selected parents + Chromosome child1 = mainInstance.crossoverBySubgrids(parents.get(0), parents.get(1)); + Chromosome child2 = mainInstance.crossoverBySubgrids(parents.get(1), parents.get(0)); + + // Apply mutation to both children + mainInstance.mutateChromosome(child1, MUTATIONRATE); + mainInstance.mutateChromosome(child2, MUTATIONRATE); + + // Add both children to the new population + newPopulation.add(child1); + newPopulation.add(child2); + } + + // Replace the old population with the new population + mainInstance.population = newPopulation; + + generation++; + + // Plot the fitness graph every 10 generations + if (generation % 10 == 0) { + mainInstance.plotFitness(fitnessValues); + } + + // If the best solution found has a fitness of 0, print it and end the program + if (bestSolution.getFitness() == 0) { + bestSolution.printChromosome(false); + return; + } + } + } + + // Generate initial population of chromosomes + public void generateInitialChromosomes(int numberOfChromosomes, int[][] baseSudoku, List mutablePositions) { + for (int i = 0; i < numberOfChromosomes; i++) { + // Create a copy of the base Sudoku + int[][] sudoku = copyMatrix(baseSudoku); + // Randomly fill mutable positions + for (int[] pos : mutablePositions) { + int row = pos[0]; + int col = pos[1]; + sudoku[row][col] = random.nextInt(9) + 1; + } + // Create a new chromosome with the generated Sudoku and mutable positions + Chromosome chromosome = new Chromosome(sudoku, new ArrayList<>(mutablePositions)); + chromosome.evaluateFitness(); // Evaluate its fitness + population.add(chromosome); // Add to the population + } + } + + // Create a deep copy of a matrix + private int[][] copyMatrix(int[][] original) { + int[][] copy = new int[original.length][original[0].length]; + for (int i = 0; i < original.length; i++) { + System.arraycopy(original[i], 0, copy[i], 0, original[i].length); + } + return copy; + } + + public List tournamentSelection(int tournamentSize) { + List selectedParents = new ArrayList<>(); + for (int i = 0; i < 2; i++) { + List tournament = new ArrayList<>(); + // Randomly select chromosomes for the tournament + for (int j = 0; j < tournamentSize; j++) { + Chromosome randomChromosome = population.get(random.nextInt(population.size())); + tournament.add(randomChromosome); + } + // Determine the best chromosome in the tournament based on fitness + Chromosome best = tournament.get(0); + for (Chromosome chromosome : tournament) { + if (chromosome.getFitness() < best.getFitness()) { + best = chromosome; + } + } + // Add the best chromosome to the list of selected parents + selectedParents.add(best); + } + return selectedParents; + } + + public Chromosome crossoverBySubgrids(Chromosome parent1, Chromosome parent2) { + int[][] childSudoku = new int[9][9]; + + // Copy the entire Sudoku grid from parent1 to the child + for (int row = 0; row < 9; row++) { + System.arraycopy(parent1.getSudoku()[row], 0, childSudoku[row], 0, 9); + } + + // Determine the number of subgrids to swap from parent2 to child (1-5) + int numSubgridsToSwap = random.nextInt(5) + 1; + List selectedSubgrids = new ArrayList<>(); + while (selectedSubgrids.size() < numSubgridsToSwap) { + int subgridIndex = random.nextInt(9); + if (!selectedSubgrids.contains(subgridIndex)) { + selectedSubgrids.add(subgridIndex); + } + } + + // Swap the selected subgrids from parent2 into the child + for (int subgrid : selectedSubgrids) { + int rowStart = (subgrid / 3) * 3; + int colStart = (subgrid % 3) * 3; + for (int row = rowStart; row < rowStart + 3; row++) { + for (int col = colStart; col < colStart + 3; col++) { + childSudoku[row][col] = parent2.getSudoku()[row][col]; + } + } + } + + // Create a new chromosome with the resulting child Sudoku and evaluate its fitness + Chromosome child = new Chromosome(childSudoku, parent1.getMutablePositions()); + child.evaluateFitness(); + return child; + } + + public void printPopulation(boolean printMutPos) { + System.out.println("Generated Population:"); + int count = 1; + // Print each chromosome's Sudoku and fitness value + for (Chromosome chromosome : population) { + System.out.println("Chromosome " + count + ":"); + chromosome.printChromosome(printMutPos); + System.out.println("Fitness: " + chromosome.getFitness()); + System.out.println(); + count++; + } + } + + public void mutateChromosome(Chromosome chromosome, double mutationRate) { + int[][] sudoku = chromosome.getSudoku(); + List mutablePositions = chromosome.getMutablePositions(); + + // Mutate each mutable position with a probability defined by mutationRate + for (int[] pos : mutablePositions) { + if (random.nextDouble() < mutationRate) { + int row = pos[0]; + int col = pos[1]; + int newValue = random.nextInt(9) + 1; // Assign a new value between 1 and 9 + sudoku[row][col] = newValue; + } + } + + // Update the chromosome's Sudoku and recalculate its fitness + chromosome.setSudoku(sudoku); + chromosome.evaluateFitness(); + } + + public void evaluatePopulation() { + // Evaluate the fitness of each chromosome in the population + for (Chromosome chromosome : population) { + chromosome.evaluateFitness(); + } + } + + public Chromosome getBestChromosome() { + // Find and return the chromosome with the best (lowest) fitness in the population + Chromosome best = population.get(0); + for (Chromosome chromosome : population) { + if (chromosome.getFitness() < best.getFitness()) { + best = chromosome; + } + } + return best; + } + + // Chromosome class representing an individual solution + public class Chromosome { + private int[][] sudoku; // Sudoku grid representing the chromosome + private List mutablePositions; // Positions that can be changed (mutable) + private int fitness; // Fitness value representing the number of conflicts + + // Constructor for initializing a Chromosome with a Sudoku grid and mutable positions + public Chromosome(int[][] sudoku, List mutablePositions) { + this.sudoku = sudoku; + this.mutablePositions = mutablePositions; + } + + public int[][] getSudoku() { + return sudoku; + } + + public void setSudoku(int[][] sudoku) { + this.sudoku = sudoku; + } + + public List getMutablePositions() { + return mutablePositions; + } + + public int getFitness() { + return fitness; + } + + // Evaluate the fitness of the Sudoku by counting the number of row, column, and subgrid violations + public void evaluateFitness() { + fitness = countRowViolations() + countColumnViolations() + countSubgridViolations(); + } + + private int countRowViolations() { + int violations = 0; + // Iterate through each row to count conflicts + for (int i = 0; i < 9; i++) { + boolean[] present = new boolean[10]; + for (int j = 0; j < 9; j++) { + int value = sudoku[i][j]; + if (value != 0) { + if (present[value]) { + violations++; // Increment violations if the value is already seen + } else { + present[value] = true; // Mark the value as seen + } + } + } + } + return violations; + } + private int countColumnViolations() { + int violations = 0; + // Loop through each column + for (int j = 0; j < 9; j++) { + boolean[] present = new boolean[10]; // Track numbers present in the column + for (int i = 0; i < 9; i++) { + int value = sudoku[i][j]; + if (value != 0) { + // If the number is already present, increment the violations count + if (present[value]) { + violations++; + } else { + // Mark the number as present + present[value] = true; + } + } + } + } + return violations; + } + + private int countSubgridViolations() { + int violations = 0; + // Loop through each 3x3 subgrid + for (int gridRow = 0; gridRow < 3; gridRow++) { + for (int gridCol = 0; gridCol < 3; gridCol++) { + boolean[] present = new boolean[10]; // Track numbers present in the subgrid + // Loop through cells in the 3x3 subgrid + for (int row = gridRow * 3; row < gridRow * 3 + 3; row++) { + for (int col = gridCol * 3; col < gridCol * 3 + 3; col++) { + int value = sudoku[row][col]; + if (value != 0) { + // If the number is already present, increment the violations count + if (present[value]) { + violations++; + } else { + // Mark the number as present + present[value] = true; + } + } + } + } + } + } + return violations; + } + + public void printChromosome(boolean printMutPos) { + // Print the Sudoku matrix + for (int[] row : sudoku) { + for (int j : row) { + System.out.print(j + " "); + } + System.out.println(); + } + // If requested, print mutable positions + if (printMutPos) { + System.out.println("Mutable Positions:"); + for (int[] pos : mutablePositions) { + System.out.print("(" + pos[0] + ", " + pos[1] + ") "); + } + System.out.println(); + } + } + } + + // Method to plot the fitness values over generations + public void plotFitness(List fitnessValues) { + XYChart chart = new XYChart(800, 600); + chart.setTitle("Fitness over Generations"); + chart.setXAxisTitle("Generation"); + chart.setYAxisTitle("Fitness"); + XYSeries series = chart.addSeries("Fitness", null, fitnessValues); + series.setXYSeriesRenderStyle(XYSeriesRenderStyle.Line); + new SwingWrapper<>(chart).displayChart(); + } +} diff --git a/statistical/demo/target/classes/Main$Chromosome.class b/statistical/demo/target/classes/Main$Chromosome.class new file mode 100644 index 0000000000000000000000000000000000000000..77b54fe48c136518a2f7c3b448876137bb33bdd5 GIT binary patch literal 3502 zcmbVPOH&)!75=W&>Xw9fyCIBW29L2v$UJO}H4|hL8%=Br111(>GB6Js(S`=88>?H` z&TA$U@=jK9rNWk3cr%M66+2~D$~EgOvdS{6{DiC$mp#sRy9EeLQk8Mp-S?h*?&ZlG@^+MZe__?t8ig{J|`Di z5@^K{1}RlMW3gyXJFewfj_uMk;RmjGR&j8`a=nc7Z%d#ZUlGu5TAppXbQ8Ha?XM(o z6rBPs1*c+rH=NtEmQysUk(h<=^lAdHNhjTR$~whL$=>smVU8v6y7XxCJ@S>s<+8Q3 z=MqB?PG~rpz#B;JL!Q6udS;2ZoC@*lLF$$>I9;}EFYlF2qm*eO->C#np--T_WUQH4 z$1WJ&JC?V?k?R?@M?88m*Bfm2Ddk?vUMA-Q7}Rh&fioBqX!WVtA73D{F25#2yd0o+ zR)!c(;G8@&&G#(YQM^gcCIjxfcgY`-zF(ETLv_gDyoL)2jN)qo4g1eTAZmGL+3=h) zNlR7}_m3=BwP)&Z31b?v3A~N3^J{w%c3haxis4R~cbGfRYEJIBlE78u1QgphAK8gr zqqB^LYXYJ9TnhvyC9zX7iQHlQ3B>Z&vTb;kG8KK~fV9rf=SDLEoykDp)aC()Oz$jH z$vR8i+&E#`=2WG$XqIQBWC>})DHz3Bqio4})u_m-5oq>9*3=Wf)3)FL?)uK2rb*LV zah9fyvQaY0ANRkKd^sCGU71mA+4S<&ii#wA=}DWrXH(^7>DWrg>M8FYGV|Ucb+5(_ zo}w(gDm!t;xV%$!jpl|?tQelTYl%n$$q=i)yiC`WQVh+{(PRn4H);y9KJOWYwMk>$ z=Sss(o_oP5@>zCnbGxiMmS=UuY9{NxVr$!ylAM#!!s`xcs`Hl#k?{DzIZbw(c;2a$ z3rtZSQcU))0VzI;cFJ_UtB&hwxXW{uE3D=*$MIaRY^(>T;70LX0ubF%e4m*lMPIk* z?QT@@aU4IuCmMbzCATTi<15-1re$w9Yvy23v_W}aHVUi`e&)BeRatcmzI4^Fmx`v_ zGvTl|u4i5@-WtokjWd+aA@1`v{y|I5)V7prh^$d8=2^WIWFlwVW;t6lT-PLh@jaR~ z{8Zq?O8^hcTf@%ORrW;)AB8j>%+juGVS0`ko3EBo5MVxGQ~l@ z<+e!bkEs702O&QvRT@Q|pGOckQq4o)J-lDtJW6kwg(~sYOGLqLc}qbwA|jgn2yKDa zE)vyeQ-1gZe8{zfi8LQfr1g+Q0yGN@VxY5{P%Rq$v)z0GH0_535m@wjlNnqhYm$oA zRO%r*_^)e$kM4yB&<{fEM2qOE3D;VM7LpfyHJ5)foRmZ^d_H`kvnjTXi%s!AD^uaL zqAPNGN>biAq$>mIh#uL3-mgc_ZXvcQ#C=3LQD!z3asS2NHbZ=VepKQK6f?w}A-Y-j zuOlvwqfzvrL!3a5IEh~I22P74(jtWn?U(3tMGX4MjxwPhDz-q)MyR_%EODgpG=^Z} zCZj9JVwpC1s<~ZISFl2xfJN(3sL!DY@f`IUR>dt9;4nfRu(F8Pe5(w5DrYXzx&TZC4yI zIiosM>f*1P5k4PnhWY%|SITc{lrko}mbgNua_leTyl}3eO-$kh(;F7oaZyb3_s$JW ziahdS7VpyjA=gd%u5r&T@xIU84MMqy4qrJMJJUI=ktLOC7)Oz#2-?^arG^ytzXgYt-AP*ej|m87bqqyk|{Z3#G7uW~!f&~b8mPx3U` z_hi&Bs;+H}^-)kGk&eiS+Mzy4YvFWMkLubsx;j)nI*^Y20mt>&WAp+K(Z3lbY5$<< zAf zKzofnje3&5h;~uH8L@;>zTXx%F;3gGurMQ5@t#=Y^jbDp(pYUNKKEwS| zj4_t%S<-xsw!3J?EsogPac{Sw-a{EKxse4r0__XbY4C)2!HxV+P>7cbXBx)&SFpwX z3*9exOd+`hJcF*`(o>v_kktw!gs_3z{`(HEFra~!j~M+s{_}hI5p6BBg>VNyru`@Q J8GeC|{{RCp!MXqd literal 0 HcmV?d00001 diff --git a/statistical/demo/target/classes/Main.class b/statistical/demo/target/classes/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..257a34b9cdd424fec7f73e44db1d4bfd1ffdc489 GIT binary patch literal 8590 zcmb7J3w%`NmH&U4J9Fo8fg~`%5P?)4=1C-Kv`GNNOQLzuBs>E67?MjeGMR}p6CO%i zqO@DLYInP8)om@yy2WMHt)PQ|;$vI8ec0OiXw`0gwX3$ft?q8Eph*AcyYm8Kf4_xa zX70V;`ObH~bN=Ul&i&>GA0IvnV1Y{dQ3RI>!-5+gh2pEjTf%kGaBQHibK})^UrNE# z9En9z3l&@ym8(s76((w-kyIpF*OEwtx3@)-DL+iOdgro z5)G#!ao!ZS39EGVBV~SL+_9KLIM5uxu%nLcoH#y@~7OGLB z;H6>xZIPI*FsY)_QRoT0DY%ov(FlWhPG-SE zC6(*PQrtkrwW9bU3!g?KJ#Sw#5{@Rh_d*>GI+`li1<;HICKg&)B+}zg4KL#o?(g@b z1&d8Av9J`&6iT#=Hl;O|vIp!0cRU_EkN4a#u?a zL#CF>VBEs6UU@}J*V5d|o<;Xn{PC%;Y^d}s`u?5r?=IQF77JUkO<~%A9kUbR6k{7n zMZ(b~gNgW1JQ*Ld>DDO~txQ|Tk2?D`B}gs=aIJ;wgpx|_E#c@06|BtBhzx($!sqaL zf{CGAY$sEBy^>y)ZNfdX^A8#RQCx501`E5yrxQ*acQCO$l8O-)g4Zuv_$z#g(UR5e z&P^niiq^tZ%s`il1NdtTU&c*bI29jB#KJ>1QD;X{Z?O}Lw|9?h97sg^>B9>u&e-c255{sw0JmHC8tx!( z42`7d-@LOlGEZ|*(^4lacUky*d|e?h9F3^NlNun_za7MenTEQv=mSkN>-ipNCisKQxJ=$bwu2S)LPg(oEkCS-FU z2hbV#Hw)jvcNKhLslnnrg{neA$ylCAFHN`EN3G)eQGCzBzvKH&7-^v5@kuwqnX z-Tp%hKN3p!_QhiZHzKmlT3FKD5G#n ztaOG8XTMNLKD9XPebQl)AlOK^XL-CKCO9?MhSwz{OORd?y~ z1Pe_QgWeq(h=o%l33_?fX%THcqZBOU3}Z>WpTZL)Bpo9|8|_4o#BgGOll>dRNjpnyy2_o(Ode^orTd)fxb2LW z2AX2YZd-LD*hh=4jqEkL<5AWfd7T-z$>|t070Qa4ZbuJJKGmDshqE4?bb6H5w@O&% zoc`FkFKm>XL~dMnD%`iZJv^)fWU86uwnTg@Kl|cQeh$aQamfs!`}=Yo7sCB+T5V?)+TIt@=NDPv4C!ASngQrh~{-78y}Gu7%$PN0U_v-){1E8VuPi% zX`82wMMw?@NaQjMUN)9ghK&^}3R?`Rs?B46pSM?JUnc78>2_Ch{uLjhhsUj@qLJ_m`Z-J567SctXQ>2{tujS!BHhOGn?kFr{ z89~RU6+97$+R52%aW*c)O$EC@rP}HAIb~uGGjR;@LZ-?zN`?J?M#YkFG}_HZRH&gf z##fsq(Qq;;1=pYV026JDN@S`yll+WrkF^_9U86ALFN+c>&enNk5nvAl_Mbj^`Qw#O z-t_c0-{$l;Um5i`U*Px+IiX=apTw&o733#RS@>zO+u}hGN93*@F5UxWRR^J}j==0a z2;al-^Rk$ir4M7`gB&hWQ}{Wa!hjzJCQ|hzHI;Xwj?-00P2;yum8r8F)rQGs#sTU# z#lB+ScQK`?Eu+5u2tvI_P}aL2(+^_SLCo!NH5fso*tZ8))}~Qe%8$B6x2wSu^vJ`d zA$QPIUwT0r7v71ptAj>;(BtZ?aX;$sbp?&iUL)w~JcOnqtl5iFXIRg81Q&Pi@~FKh zkL)t|xqB}rHyZn~B4nh|b{L&N8r=^bL4Z5$Z8T~QfhoQpSL{Ks__71oXdZw)34;f4 z^>s`h zva%vpB_jR*IhtR)O);YQrVBN#)2kkG1JxKvqaQxnih{CBA`bgOEtQs-l}TEYIhi-C?~y}Aik zsM~R++Kr8BANtfo96yW!^&}$dJBX?u@tov2T%%q=LcNZpdV|3f(BH=$HDQIC&P?;r zw#(EEHIs0kOC9BWW^e~3>Qm}$`l5@vXE9y;TydG2t>z%Wbt}|dURmlw+@NRpXxjto z9LjkmWmE9zFhsQBEkkn3|4rP(`E*DF{p+RlM8+{p zE%Pu_T|~5+)Ml$sGjeXuFHwz*jfWB2rW|x|{~5xRt0vAB65XL=EiAu7$J(VM=MXHP zFiI{Rn;?vjcqy@v(Cj;o3y-0SKo_2FCPaAHlA-roxvatGRnVr&k}{ zgQ?Zi>s>YcO>2h%Zto5}aLFhy@h1rM{t0fZB|y-dk= zq$X75wo|1RXut;OiiNx?(k5FdI)QOCm!O!&&GINM1BkD2J|U0Y+2TO++w7lOkiEB|gTQ#FPoLn;ZE_$jA{SX_kC=D!OLn&^0RPA_r?q+XLP- zy7!)ZsV3yks1v`$wO<_2EM$5Cx6j&wwNTDY(A}Ez z`0kv?cdNx3Kwcj7E#ZtJ4V%ftf!4t^H)t!zc;!T67R(dyJDFPSWa@b*5Y*YbZ|-pv zeSq;9I4xzccrxk0sVG4sBx890<`wcU4DK(%U(hANi8?^ zY@SL&9?1>|1y?{iqJ50x{mhOBSj_I{4?Fu=tPbE}Qa~FXW_e4KDh?va;u-oMJDzBlkayvOsp_jzI`S#}G_(_$V8%^1{nmRiOu54DwR z!U?btou^0r)VoM6=crc-rn-bzKCX8O%N>g+T*Mqh2s{fbBJw)9Ij38Ff%k42zGgq3Fa0^2H)Dar z21G>%D~K)}&AiZcV^o^G=g&G!|4O45GRoMi@QL(ZI}fvYkf*#)<3Dy4G3-xDVQ{#w zN*AeT=*=JV>RIyMPf7ScBh^30()c_J!wcx<;pS@mJjaI>sMbU;e7h#+?KNtp`V778 zM>|`Aa3LRxr%2u{9OWUsvqjZN-v_8+Q1YqK5CD?D&H#Q(4*0B&l0j*_T5-qMF}JW% z<}%B;s)3!GE}KC=tL2eu@xhx^{`l#|@MYrb6{7A}MDwe}!)t7_UT16d2KW3X*0J5X z9B-o!@9_2Gw>d6bfa#fHxP&owis4G~TQ_&?r=~jPltu0<=b1t6Ey3ZS>ftL)5m(-* zq-Yvke}j^C$DPBRe!>#yU~Upz9}8hQoyooru~b7veoo3jWedG3m1#~6AZ^tdfK1|r z1CVy+|Kod4zLO7pDHjKRkLmaWN&Q{S#(R2`LZ{Q2`clcILeFuwp%Z{_W*-TiGL|8( z%HOOqHrzu|QKvzgD@ScPi`w~4p&>h+7mh_8eD&GMxa`~mcWv9=ldo0h3-UB>4m?I4 zPlBk%pU{90a1nE)2_I@3%emodjMFyC))!=4J)Z8D0;06F6W}_L>D2bkbiBr2dz@-a z-ZHes3yHBGXz)wXpKkTU8kCSQTUUNhR zdTS1! z_jg^Iw9TqnmG0P-O&4uX?VkAL`1G81)m>LzcGdr&oA|_~-~uF<8kTXH?OWNAX*$mGhH;D z#q{L-vQ_W}RIjq&u2ck~v$HvRlq$YCU$mxN&-QKC@n{+gc2#`4m>#n|KP!;P+l!9r zSIU+^a#l>ou%IErIQMA4+94$Vw6)jcCuT6Dyq%F!tu8sY+VW42>WR7&$! zd0J8+!MX*rIAfM=IjOm{Ct)3SgJcl)zRGFAe z;shPX4^*Qe)xDn%9(KT3twNG9uD>V*Q_snS&+0e=oe5iOX0c-WR@EcPwLTqbbTjpW zTXFnb?uRqBTQmbD$mQ2`^vh)CqH;wE4%{(oV;JQ%u=?2m+T!KV;C1` zE}1LVsOuC=|F-Qfapd`?<5LnwDp##daKpIQb{4ZqOyXS)Q!Hq3kM@SvaSM4S9H5pV z!t-kbbkE2T@9CJ4`XyV$RdnL`Dyvl0N9WFU9hAOzrEmTSzJ~WTd|lw!-V3bb8<-P_ z+rCvceYd<{Ke?(sdj#`X&`{t(yAfWj>ag$u*>$Y@P7kYOaCGS(fyz z$fI(Hu_TXTB^%g;nW-{M>VuZ(s_SV`DW<$zDHkYUd0i8-<@HIV ztnxM2^*z6Au8v#&lDps~aUb8*@Ias|$R)sOJ8SNWl@2Qv*7UkrASDkZ+HVQ`ytW=y z?=av^(^)85Ue}n*?zx&hShgC=o{iIN1&6rL*7%3LIa@2HYKT#@Sj@9-**X;;#_?U! zD>~!&K1oZ7-cHfoDWK;Z$10B&P0zE)(ho_-{+>(Xc5jG=j|5I1Amy+$HT+nh*XK$fiqcA{Zw*XHNp^>t(~HO?I0))YBe%9EZGw ztDGx*H};%;gcCi#htbpf2q$~aJwoemXpf?e&j#ruR3wCkVBzYX_tnfRqQH#;aTl={R!$Q0sm`jfVnCp}PvG zHk+Pb?cfQsIeF;jUNl!XUk#`MYtZu;=lDB6$H#@aN9fs~T00su!&?}xPkydUL^H}3Qj+VoenaWY#EjSmjB`fp!UhuSLTn+@JI-12k;GK0(mGH#U+j+{Pp8?T;^GIOlOdDg*%&(3_$7q4c-?e+*n80|NxY48$ce@H!c|Oa`)KV2BJ1lYuK_;1U@a zAOmmyM+RiJ`x%g|{7($<&qBz6m?DXB66S>(Sc;BpVO9!ZP-#<_GO;bZ(ayKJg|ku< zMy%gZ`!brLZJ@bDF|-|3B;<^;P=%p#hdQ^p{g?HaFk%cNC!eoJMZ3DW{YxnqzBg*r zavjI1mYd}2ZF2Pvxf&x^6KEBajd3q05#cgsmiD~+n^tZY1o_Igt z?pB!2j(YCxsHcRHfV%|daD}5NZ}ViJBZb;|8*k7SW0M-dRgP5jQAJWwTA-*iNCt}f zl7H!+<7lWVjmqkvvSN{E(7%BGjLrhrDAb^L36Et-lHE@wcXtM3Pcw=nc&H`T-ap=Z zXE5Jx&&V@#}T!qANP=JwxdevE0!prLGT|LN2QuF=$R z`!Vh?a_eW96`0sU$GOkQ2mXM?aW3~p`+AkWC$NKHT;dd|AqgX&n zSQy~@ide*3qJRmpj9X#_cSVr|m++A9PlSt~iF*Or7fBei+i9Dh@>_9_xi{i9(z!&T zrq~FiWL4Uaqa4`e1-%1po3~dbU+l8{WO%?fJ$PN^Y%w$iL!jvp*A6JbUXA}@(7Mgf vS0tFr&z;W$BB)@EZ`$!~Li$ed{2qQlTLWzZ53$bYkMJ>m!b<-%*z@pTG@-&R literal 0 HcmV?d00001 diff --git a/statistical/demo/target/classes/com/example/Main.class b/statistical/demo/target/classes/com/example/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..d7163d2c30a743a5c12d29f45c8a23714dfbc1f6 GIT binary patch literal 8854 zcmb7J33y!9b^fnrc{8JDYxCHQg^i3Cv|2$JnMlUAybH7#OW2lema+6KjXjzXGb1l7 zB_VDSa4>}?1UnQkq!CG|6Koi7se?&q3#ATQC@G`_NRzfn3rU*>6F~XTeQy@q!ue`{ zns?{k`_4W0od5ji+&j;GeDpYg%T>}qfkJU_e6Zfy9v&QuTJ`PWNX&qny_>^Z!}ZZ{ ztiQf<<7TTjr7(VF=gOU_2Qgw3_GhZEqqR>x&O6l;*vSCJehZ*@O>%={w&KGo}XeGMC z8>7^nMT6Vp&;V5UM@ZqqG^M0khnJb)RPE^AeqFfqn%XPu zNT#eo6Z42U6o>{vdwojJlh7PMBNm8F7SiUGV@|1B9l#tcl1YncwcI3odG12Smzr3H z<#a9;>l3#qOsK3nd(S=)!KxyFE75MC?R2HJSxj`GQ^AuQibfa$7dZ=_X1Fno>BChN zTqlCNOmyRF!qB>5I2@&Cg84G+*lMm?SBN#}F|d{qm4kwyz{EOv-4*WZ3t$7THE@kW ziJqgiXpN<;ek)<(I$X~k4}}v+i+yLTlW}sZIB27ZUi49>l}P0KVkLp#c$2=^gaHHn z8EA^DI+t$mwT2{2O+>`LfqpC1ZY7i9eyfy>vc*Ic475pu;VstUc&s;^S`$ePu$4@O zV=3-^R{q{II-Tv80OGj8z);@edAgZMfU=AsQ8y}R8cQmHpfFv`y4A!sY$y7YksFBw zhIy-Z!PjqmYx({OH+dI4R{6W9@7hr1UGVH4`L|bI`;3Xt;x>iJ{Z`CMgi|zVBozrq zbIii^CsnpGR&3>SY$X6x*lFU=QN}2=wuYm_6tFVOa5DS_6JNybbR+Gz$V#SiauqHh zP|pnAd`b&o7w$ChC57^HOf#`twk!@>7D>hEBLUA}n7AAF&~&1e)wxNipfx`(95B)Q z3STzy72Hb~q~gPgSa{GPHmoQ!fu`xQ?2Ea*i?Q!Bu?Kr;Wv(oqIZeESc9DL+iNC@F zl-`?&CzJ85R$|ePuHlXSiAW!9+f#W?8=Q0SPnl2QArt%XFr$5NI7Q#&TYuWQ7hYn! z_v_T^R_80HKjvv=W96W_$Qm>@J@^H+0MuG1+eoapDK%f=uQx^QDS zX>|?v#kUMQ8Z(!yj3)_5#+9Tu&C6uWEMcC`*yMc`;k;CQizP3p&HQ5=j9%CSl z70Ftx?e4!b@%Q)#?xicmXK(Qs&W z`kM=J5-%9|5xF79^O;c-FXANsa6=hh@p&mjzrt6~4O*!<7(~}OYT|;qxbtU54_}Lqeim9_jT!0ztzfAl$ z-en~imf}d~l*?3Z<)Mu!r=5g$Iz5!021BQycH)lV=Cl}Zg*pN=ij>e{89MHc zcWnzZ7Z+#tni-%zNt?1;V|^C&GMul}kiKM~B?x2gAnG(ddW{Sd=9qv*i7GW!nJ!A= z!zrH%lAo44$+xc}H?ye}N=;&&q0T!iyEyekDGxQ1SV5?ADHI6DLe0B04Ox@aw~pmp zZ+tjLCse5lQ%zGB5^oYhOX9=2ZfB@05zEdn)l4;u9!lmsaXo zHtiA}Gr7{FlOd?%7`Ms7aydsW*Qd$$EP z`_*E#)R5C--6u|(v9`yay~-l~5?!esQOi`z6f0A=UG>+0@(N?U+#KMM_DVxtL3;ee zRZZ2V+R5)?y|dR>Xsi5xE_yCA7>cKlDQD@@wT(x%HHq-hkd+9i4t15_WR=3~G1ewm zSghZo^%`BwxT$)LFJXGV+HI<JjWf3_o`{nLownPr8W>GwzN~XBMb}Kay?<2UcQ(;40 zuP`Hb^ohi_vZkrG(Pp1FmW6wneRl{!Y*e@}AC%5)Ti^;&}&AUcBreraaD}0$jk)iCh*G=%zp) z#hDaVLO~UJ1}JV?R_Ik!Rk6Rk`VcOxK86`RhcN3&T*PJ-n>A0OHYd20BEicZH}xq( z5R=&!p{6YYvr*4)etZfS+d8|;sLD95_;#_s*#8U~3fi0{+K*vQ&oMOi9KdCVF#ix* zI$VwJ5p1YSV@c_XG_Gj!xEj49XbE|O-iFeZX{_3V3u}VzhM?EgS?l>;pvM(-clNl0 z-p(UfU4S(sD7A<68;7yJbEj7Yy~X~0qsMo;RnRT1M@BHQ$$bFfkUI_QC^iFW#2!Be z#oeZw+_gu*W5xlLKa61Ul{BK>O3& zCfZdIR;mf;QswAYHCV0YV2x@*k6MEDD$Jtt&v2dkBJYmwL9e=>71%d8eiQ@h1U9Q5 z@;c{v#MH}3sMlExyoHoT{9_WI>TP@*j|t+{Pw+Rmgcc}KFJeCtUx4ZA`}hvN%kY}T z9X`%DcXQ`g5?YTjCgx%V4zkb7otAKSPjd88YL({R-PHU|9KvCEsQ;_n_c&g!7U5+a z<$Qzs@5eFr`P5u|PD}Q4FB|ba_64}3rL@vv6mnmcIL?-d?^DNWu3&5T6zfA<{Eu)Cnx=(X{4~j|J;7-%rC#=sn!^&=FsN7alkI0gSGee2Gj0A*lP>4%tQ zKusZ|@^TvQaQa0duLFAFhVp%*yM^d%=r+)3z)dvwEi~$_1nXyLz|WG{ zZX?KUMLTb|!uUL4`vsQRH}U`N8Wx-EJvcFQyN^g{NwZZ zVf=chOHHXczHjtbwcq7zS6@ z5GFxD3Uj>gQ9%#A|5C`E(PAH(`V+{r7pd-?wX zjA$!vAOg7OtQ8-^|IlJQ>fk>7FQpa`dtY{}IFWe$9sArw(Hu=Q9VWa@*tR|W?&{5BR}l2VRrr~O9Rq^z-*0R zU&&3Ujj@8;xT?g~sZ2p&r~UJ4(s-Y_-Bl+a#eP9qCT0Ip-00Jx-RRDEnJ%uDejW3T z%%DN9PM{wa(5%JTuTmF?UzpQ_?tP;#NZaviPu8y+(im;@2EE>>cc9V7=MbO%psz8& zMS}ju!VyfW3kDj3g=D4obz^qt&O#L|4Env-?;HKa&VULAf<9@#oCU-qntbYN(yAcG zJ0Y)xj17uwF^TPO)2;gnkMFQ3+s`a`kh$RrEM!Jl%xuuXJa7$NwVB_ylGpDhqwit( z?__E% zy6Bb*H08Ld!PCmG$zUOlr~rZFp(f`msaCzzVL9`MwDw?uVs0X6_VHJ-@of1C+Do*Q z0P|dhCaywij78pTW$ zo;k$flZr$vZj&JtH~AX2@!t8&1+hKO#%M zNUnd0-2O5PoL9&JKgJbI_3i9mLq}HdEt@shW?i>dov)@)>q3?^Q)%h~N~qHLz-G-d z6pS+5HNW#BLkM3g5?=J%TU9N@T_FVzNUSxv1(@WoTtLjv1_V>A#8z5ePvo~xb?TtNW9L&J7~qv(Z&92 zh@4(xrk~pq6WEkDkTt=8-Y&h&>g*yKvVamd>eT6`+zmRhN)oMil4v8QI7xIK@nk2_ zR@O+Bd@qnqqV}6lIan+gGoA;-MwrXap|&}jXh{C5Wt)?E+&<>b%)+I81SLEn*kEZB z6Y!gc!LM^Lu+LEMQlIyj^xmbmztwvc@&%!7C&@|lm85#5W4!eW8-SIFywQcOy3cgd5OXZVk9gsoBGfB+E z`}EW)RuI2u<^7@7w1R-Ca+Ja1D)(YZkDJVA6W*LfhD876WTe>dU`UHYji zt^Q#uFX}HkrmA~NTook+YY(Z~_S!O4pH>(1F(<7W`S^5NHOoU0x$`^f4yZ+GwPMXN z)zMRXNUcn(t~EI;U&!#6qH?_2hM?L`?%KhM{6^HNoA}%Q&1g}#=)KrMwkV6RMY`IS zllUC9My;i$b$q`^t>d0^MVHJv!M(WEdg@)EHmGa(oB)^VCAswJ&rSMsK=FXdbFz!c cQK>Ebi>jC!LWs9}t?Gt_A(h~`o3eKO5gqSgO8@`> literal 0 HcmV?d00001 diff --git a/statistical/demo/target/demo-1.0-SNAPSHOT.jar b/statistical/demo/target/demo-1.0-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..536580e02fa348a2347098f000e6ec268877ae42 GIT binary patch literal 8164 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 literal 0 HcmV?d00001 diff --git a/statistical/demo/target/maven-archiver/pom.properties b/statistical/demo/target/maven-archiver/pom.properties new file mode 100644 index 0000000..c822858 --- /dev/null +++ b/statistical/demo/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=demo +groupId=com.example +version=1.0-SNAPSHOT diff --git a/statistical/demo/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/statistical/demo/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..0a08534 --- /dev/null +++ b/statistical/demo/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,2 @@ +Main$Chromosome.class +Main.class diff --git a/statistical/demo/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/statistical/demo/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..b65d5a6 --- /dev/null +++ b/statistical/demo/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1 @@ +/home/emil/Coding/Assignments/ITAI/Sudoku_solver/statistical/demo/src/main/java/com/example/Main.java diff --git a/statistical/demo/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/statistical/demo/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/statistical/demo/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/statistical/demo/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29