cool beans
This commit is contained in:
@@ -220,13 +220,13 @@ uint64 factorial(int n) {
|
||||
return result;
|
||||
}
|
||||
|
||||
SomaSolutionList solve(VoxelSpaceReprList reprsInput, int dims[3]) {
|
||||
Arena *arena = arenaAlloc(Megabytes(64));
|
||||
SomaSolutionList solveSoma(Arena *solutionsArena, VoxelSpaceReprList reprsInput, int dims[3]) {
|
||||
Arena *generalArena = arenaAlloc(Megabytes(64));
|
||||
Arena *permsArena = arenaAlloc(Megabytes(128));
|
||||
|
||||
OffsetList offsets = PushList(arena, OffsetList, reprsInput.length + 1);
|
||||
OffsetList offsets = PushList(generalArena, OffsetList, reprsInput.length + 1);
|
||||
|
||||
VoxelSpaceReprList polycubes = PushList(arena, VoxelSpaceReprList, 0);
|
||||
VoxelSpaceReprList polycubes = PushList(generalArena, VoxelSpaceReprList, 0);
|
||||
|
||||
VoxelSpace emptyVoxelSpace = {
|
||||
0,
|
||||
@@ -245,7 +245,7 @@ SomaSolutionList solve(VoxelSpaceReprList reprsInput, int dims[3]) {
|
||||
cullEmptySpace(&voxelSpace);
|
||||
VoxelSpaceReprList positions = getAllPositionsInPrism(permsArena, &voxelSpace, dims);
|
||||
possibleCombos += positions.length;
|
||||
VoxelSpaceReprList_underlying *insertion = PushArray(arena, uint64, positions.capacity);
|
||||
VoxelSpaceReprList_underlying *insertion = PushArray(generalArena, uint64, positions.capacity);
|
||||
polycubes.capacity += positions.capacity;
|
||||
polycubes.length += positions.length;
|
||||
memcpy(insertion, positions.data, positions.capacity * ListElementSize(VoxelSpaceReprList));
|
||||
@@ -258,7 +258,7 @@ SomaSolutionList solve(VoxelSpaceReprList reprsInput, int dims[3]) {
|
||||
cullEmptySpace(&space);
|
||||
VoxelSpaceReprList perms = getAllPermutationsInPrism(permsArena, &space, dims);
|
||||
possibleCombos *= perms.length;
|
||||
VoxelSpaceReprList_underlying *insertion = PushArray(arena, VoxelSpaceReprList_underlying, perms.capacity);
|
||||
VoxelSpaceReprList_underlying *insertion = PushArray(generalArena, VoxelSpaceReprList_underlying, perms.capacity);
|
||||
polycubes.capacity += perms.capacity;
|
||||
polycubes.length += perms.length;
|
||||
memcpy(insertion, perms.data, perms.capacity * ListElementSize(VoxelSpaceReprList));
|
||||
@@ -277,14 +277,19 @@ SomaSolutionList solve(VoxelSpaceReprList reprsInput, int dims[3]) {
|
||||
|
||||
backtrackSolve(permsArena, &solver, 0, 0);
|
||||
|
||||
return filterUnique(permsArena, solver.solutions, dims);
|
||||
SomaSolutionList uniqueSolns = filterUnique(solutionsArena, solver.solutions, dims);
|
||||
|
||||
arenaFree(permsArena);
|
||||
arenaFree(generalArena);
|
||||
|
||||
return uniqueSolns;
|
||||
}
|
||||
|
||||
void interactiveCmdLineSolveSoma() {
|
||||
//get_dims_input(dims);
|
||||
//std::cout << '\n';
|
||||
//std::vector<uint64> reprs = get_reprs_input(dims[0]*dims[1]*dims[2]);
|
||||
print("Great. Calculating solutions...\n");
|
||||
SomaSolutionList solutions = solve(AsList(VoxelSpaceReprList, STD_SOMA), (int[]){ 3, 3, 3 });
|
||||
print("%zu solutions found.\n", solutions.length);
|
||||
//print("Great. Calculating solutions...\n");
|
||||
//SomaSolutionList solutions = solveSoma(AsList(VoxelSpaceReprList, STD_SOMA), (int[]){ 3, 3, 3 });
|
||||
//print("%zu solutions found.\n", solutions.length);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user