University stuff.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SudokuBeholder.java 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import java.util.List;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;
  4. import java.io.OutputStream;
  5. class SudokuBeholder implements Iterable<SudokuBeholder.Losning> {
  6. public static class Losning implements Iterable<Losning.Verdi> {
  7. public static class Verdi {
  8. int tall;
  9. boolean original;
  10. Verdi(int tall, boolean original) {
  11. this.tall = tall;
  12. this.original = original;
  13. }
  14. }
  15. List<Verdi> verdier = new ArrayList<>();
  16. public void leggTil(int n, boolean original) {
  17. verdier.add(new Verdi(n, original));
  18. }
  19. public Iterator iterator() {
  20. return verdier.iterator();
  21. }
  22. }
  23. private List<Losning> losninger = new ArrayList<>();
  24. private int antallLosninger = 0;
  25. private Brett brett;
  26. private final String colOriginal = (char)27 + "[31;1m";
  27. private final String colReset = (char)27 + "[0m";
  28. SudokuBeholder(Brett brett) {
  29. this.brett = brett;
  30. }
  31. public void leggTil(Losning losning) {
  32. if (antallLosninger < 2500) {
  33. losninger.add(losning);
  34. }
  35. antallLosninger += 1;
  36. }
  37. public int hentAntallLosninger() {
  38. return antallLosninger;
  39. }
  40. public Losning hent(int i) {
  41. return losninger.get(i);
  42. }
  43. public Iterator iterator() {
  44. return losninger.iterator();
  45. }
  46. public void print(OutputStream out, Losning losning) throws Exception {
  47. int x = 0;
  48. int y = 1;
  49. int modX = brett.storrelse / brett.antallBokserX;
  50. int modY = brett.storrelse / brett.antallBokserY;
  51. int idx = 0;
  52. for (Losning.Verdi verdi: losning) {
  53. if (x % modX == 0 && x != 0) {
  54. out.write("|".getBytes());
  55. }
  56. String str;
  57. if (verdi.original && out == System.out) {
  58. str = colOriginal+brett.toChar(verdi.tall)+colReset;
  59. } else {
  60. str = ""+brett.toChar(verdi.tall);
  61. }
  62. out.write(str.getBytes());
  63. x += 1;
  64. if (x >= brett.storrelse) {
  65. x = 0;
  66. if (y % modY == 0 && y < brett.storrelse) {
  67. out.write("\n".getBytes());
  68. for (int i = 0; i < brett.storrelse; ++i) {
  69. if (i % modX == 0 && i != 0) {
  70. out.write("+".getBytes());
  71. }
  72. out.write("-".getBytes());
  73. }
  74. }
  75. out.write("\n".getBytes());
  76. y += 1;
  77. }
  78. idx += 1;
  79. }
  80. }
  81. }