1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import java.util.List;
- import java.util.ArrayList;
- import java.util.Iterator;
- import java.io.OutputStream;
-
- class SudokuBeholder implements Iterable<SudokuBeholder.Losning> {
- public static class Losning implements Iterable<Losning.Verdi> {
- public static class Verdi {
- int tall;
- boolean original;
-
- Verdi(int tall, boolean original) {
- this.tall = tall;
- this.original = original;
- }
- }
-
- List<Verdi> verdier = new ArrayList<>();
-
- public void leggTil(int n, boolean original) {
- verdier.add(new Verdi(n, original));
- }
-
- public Iterator iterator() {
- return verdier.iterator();
- }
- }
-
- private List<Losning> losninger = new ArrayList<>();
- private int antallLosninger = 0;
- private Brett brett;
-
- private final String colOriginal = (char)27 + "[31;1m";
- private final String colReset = (char)27 + "[0m";
-
- SudokuBeholder(Brett brett) {
- this.brett = brett;
- }
-
- public void leggTil(Losning losning) {
- if (antallLosninger < 2500) {
- losninger.add(losning);
- }
- antallLosninger += 1;
- }
-
- public int hentAntallLosninger() {
- return antallLosninger;
- }
-
- public Losning hent(int i) {
- return losninger.get(i);
- }
-
- public Iterator iterator() {
- return losninger.iterator();
- }
-
- public void print(OutputStream out, Losning losning) throws Exception {
- int x = 0;
- int y = 1;
- int modX = brett.storrelse / brett.antallBokserX;
- int modY = brett.storrelse / brett.antallBokserY;
-
- int idx = 0;
- for (Losning.Verdi verdi: losning) {
- if (x % modX == 0 && x != 0) {
- out.write("|".getBytes());
- }
-
- String str;
- if (verdi.original && out == System.out) {
- str = colOriginal+brett.toChar(verdi.tall)+colReset;
- } else {
- str = ""+brett.toChar(verdi.tall);
- }
- out.write(str.getBytes());
-
- x += 1;
- if (x >= brett.storrelse) {
- x = 0;
-
- if (y % modY == 0 && y < brett.storrelse) {
- out.write("\n".getBytes());
- for (int i = 0; i < brett.storrelse; ++i) {
- if (i % modX == 0 && i != 0) {
- out.write("+".getBytes());
- }
- out.write("-".getBytes());
- }
- }
- out.write("\n".getBytes());
- y += 1;
- }
- idx += 1;
- }
- }
- }
|