Free polyominoes enumeration: Difference between revisions

Content added Content deleted
m (→‎{{header|Java}}: add parallel)
m (→‎{{header|Java}}: small changes)
Line 707: Line 707:
<lang java>import java.awt.Point;
<lang java>import java.awt.Point;
import java.util.*;
import java.util.*;
import static java.util.Arrays.asList;
import java.util.function.Function;
import java.util.function.Function;
import static java.util.Comparator.comparing;
import static java.util.Comparator.comparing;
Line 712: Line 713:


public class FreePolyominoesEnum {
public class FreePolyominoesEnum {

static final List<Function<Point, Point>> transforms = new ArrayList<>();
static final List<Function<Point, Point>> transforms = new ArrayList<>();


Line 733: Line 733:
static List<Point> translateToOrigin(List<Point> poly) {
static List<Point> translateToOrigin(List<Point> poly) {
final Point min = findMinima(poly);
final Point min = findMinima(poly);
return poly.stream().map(p -> new Point(p.x - min.x, p.y - min.y))
poly.replaceAll(p -> new Point(p.x - min.x, p.y - min.y));
.collect(toList());
return poly;
}
}


Line 757: Line 757:


static List<Point> neighborhoods(Point p) {
static List<Point> neighborhoods(Point p) {
return Arrays.asList(new Point[]{new Point(p.x - 1, p.y),
return asList(new Point(p.x - 1, p.y), new Point(p.x + 1, p.y),
new Point(p.x + 1, p.y), new Point(p.x, p.y - 1),
new Point(p.x, p.y - 1), new Point(p.x, p.y + 1));
new Point(p.x, p.y + 1)});
}
}


static List<Point> concat(List<Point> lst, Point p) {
static List<Point> concat(List<Point> lst, Point pt) {
List<Point> r = lst.stream().map(pt -> new Point(pt)).collect(toList());
List<Point> r = new ArrayList<>();
r.add(new Point(p));
r.addAll(lst);
r.add(pt);
return r;
return r;
}
}
Line 790: Line 790:
List<List<Point>> r = new ArrayList<>();
List<List<Point>> r = new ArrayList<>();
if (n == 1)
if (n == 1)
r.add(Arrays.asList(new Point[]{new Point(0, 0)}));
r.add(asList(new Point(0, 0)));
return r;
return r;
}
}