javagony2/turing/Tape.java

67 lines
1 KiB
Java
Raw Normal View History

2021-06-03 17:42:43 +00:00
public class Tape {
private class CharWrapper {
char c;
}
2021-06-03 19:26:22 +00:00
private class StringWrapper {
String s;
}
2021-06-03 17:42:43 +00:00
@FunctionalInterface
private interface Cell {
char value(Number i);
}
private Cell cells;
2021-06-03 19:26:22 +00:00
private Number min;
private Number max;
2021-06-03 17:42:43 +00:00
public Tape() {
cells = (i) -> ' ';
2021-06-03 19:26:22 +00:00
min = Number.zero();
max = Number.zero();
2021-06-03 17:42:43 +00:00
}
public char get(Number i) {
return cells.value(i);
}
public void set(Number i, char c) {
final Cell _cells = cells;
2021-06-03 19:26:22 +00:00
min = Number.min(min, i);
max = Number.max(max, i);
2021-06-03 17:42:43 +00:00
cells = (j) -> {
CharWrapper w = new CharWrapper();
w.c = _cells.value(j);
j.executeIfEquals(i, () -> {
w.c = c;
});
return w.c;
};
}
2021-06-03 19:26:22 +00:00
private String cellString(Number min, Number max) {
StringWrapper w = new StringWrapper();
w.s = "";
w.s = String.valueOf(get(min));
min.executeIfNotEquals(max, () -> {
w.s += cellString(min.succ(), max);
});
return w.s;
}
public String toString() {
return min + " | " + cellString(min, max) + " | " + max;
}
2021-06-03 17:42:43 +00:00
}