זו מחלקת עזר להיתמצאות בלוח
public class Memory {
public Memory(int lang) {
this.lang = lang;
}
public static int lang;
public int[] positionArray = new int[2];
public int[] toArrayPosition(int position) {
positionArray[0] = position / lang;
positionArray[1] = position % lang;
return positionArray;
}
public int toIntPosition(int[] positionArr) {
int positionInt = (positionArr[0] * lang) + positionArr[1];
return positionInt;
}
public int rowP(int positionInt) {
int[] positionArray = toArrayPosition(positionInt);
positionArray[0]++;
positionInt = toIntPosition(positionArray);
return positionInt;
}
public int rowM(int positionInt) {
int[] positionArray = toArrayPosition(positionInt);
positionArray[0]--;
positionInt = toIntPosition(positionArray);
return positionInt;
}
public int colP(int positionInt) {
int[] positionArray = toArrayPosition(positionInt);
positionArray[1]++;
positionInt = toIntPosition(positionArray);
return positionInt;
}
public int colM(int positionInt) {
int[] positionArray = toArrayPosition(positionInt);
positionArray[1]--;
positionInt = toIntPosition(positionArray);
return positionInt;
}
public int slantLeftUp(int positionInt) {
int[] positionArray = toArrayPosition(positionInt);
positionArray[0]--;
positionArray[1]--;
positionInt = toIntPosition(positionArray);
return positionInt;
}
public int slantRightUp(int positionInt) {
int[] positionArray = toArrayPosition(positionInt);
positionArray[0]--;
positionArray[1]++;
positionInt = toIntPosition(positionArray);
return positionInt;
}
public int slantRightDown(int positionInt) {
int[] positionArray = toArrayPosition(positionInt);
positionArray[0]++;
positionArray[1]++;
positionInt = toIntPosition(positionArray);
return positionInt;
}
public int slantLeftown(int positionInt) {
int[] positionArray = toArrayPosition(positionInt);
positionArray[0]++;
positionArray[1]--;
positionInt = toIntPosition(positionArray);
return positionInt;
}
}
זה בונה את הלוח
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class Board {
Map<Integer, Integer> map = new HashMap();
int position, value;
int LANG = 200;
Memory memory = new Memory(LANG);
public void generator(int num) {
int start = LANG / 2;
int midale = (LANG * start) + start;
position = midale;
map.put(position, 1);
position = memory.colP(position);
map.put(position, getValue());
position = memory.rowM(position);
map.put(position, getValue());
loppGanerator(num);
}
public void loppGanerator(int num) {
while (value < num) {
goLeft();
goDown();
goRight();
goUp();
}
}
public int getValue() {
value= getAroundValue();
System.out.println("value " + value);
return value;
//פה אני מחליף מהתרגיל הראשון לשני
// value++;
// return value;
}
public void goLeft() {
int down = memory.rowP(position);
while (map.get(down) != null) {
position = memory.colM(position);
map.put(position, getValue());
down = memory.rowP(position);
}
}
public void goDown() {
int right = memory.colP(position);
while (map.get(right) != null) {
position = memory.rowP(position);
map.put(position, getValue());
right = memory.colP(position);
}
}
public void goRight() {
int up = memory.rowM(position);
while (map.get(up) != null) {
position = memory.colP(position);
map.put(position, getValue());
up = memory.rowM(position);
}
}
public void goUp() {
int left = memory.colM(position);
while (map.get(left) != null) {
position = memory.rowM(position);
map.put(position, getValue());
left = memory.colM(position);
}
}
public int getAroundValue() {
int sum = 0;
if (map.get(memory.colP(position)) != null) sum += map.get(memory.colP(position));
if (map.get(memory.colM(position)) != null) sum += map.get(memory.colM(position));
if (map.get(memory.rowM(position)) != null) sum += map.get(memory.rowM(position));
if (map.get(memory.rowP(position)) != null) sum += map.get(memory.rowP(position));
if (map.get(memory.slantLeftown(position)) != null) sum += map.get(memory.slantLeftown(position));
if (map.get(memory.slantLeftUp(position)) != null) sum += map.get(memory.slantLeftUp(position));
if (map.get(memory.slantRightDown(position)) != null) sum += map.get(memory.slantRightDown(position));
if (map.get(memory.slantRightUp(position)) != null) sum += map.get(memory.slantRightUp(position));
return sum;
}
}
וזה מפעיל את האופרציה הזו
public class MainBoard {
public static void main(String[] args) {
Board board = new Board();
board.generator(361527);//זה הקלט של הפאזל שלי
}
}
כשאני מסתכל בפלט של ההדפסות אני רואה את הערך שגדול מהקלט שלי (יכלתי לעשות פונקציה מדויקת שמחזירה מייד אבל זה בסדר)
הקוד טיפה מבולבל ולא ערוך לגמרי
אבל הוא בונה את הלוח וזה אומר שהוא פותר את הבעיה השניה ולא הראשונה

