Initial commit

This commit is contained in:
2026-06-12 20:49:22 +02:00
commit c392ad05e6
6 changed files with 513 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc build active file",
"command": "/usr/bin/gcc",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "Task generated by Debugger."
}
],
"version": "2.0.0"
}
BIN
View File
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,110 @@
#include <stdio.h>
#define W 0
#define Y 1
#define O 2
#define R 3
#define B 4
#define G 5
typedef struct Cube {
int front[3][3];
int back[3][3];
int top[3][3];
int bottom[3][3];
int right[3][3];
int left[3][3];
} Cube;
void initialize(Cube *cube) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
cube->front[i][j] = W;
cube->back[i][j] = Y;
cube->top[i][j] = O;
cube->bottom[i][j] = R;
cube->right[i][j] = B;
cube->left[i][j] = G;
}
}
}
void print(Cube *cube) {
char colors[] = {'W', 'Y', 'O', 'R', 'B', 'G'};
printf(" %c, %c, %c, \n", colors[cube->back[0][0]], colors[cube->back[0][1]], colors[cube->back[0][2]]);
printf(" %c, %c, %c, \n", colors[cube->back[1][0]], colors[cube->back[1][1]], colors[cube->back[1][2]]);
printf(" %c, %c, %c, \n", colors[cube->back[2][0]], colors[cube->back[2][1]], colors[cube->back[2][2]]);
printf("\n");
printf(" %c, %c, %c, \n", colors[cube->top[0][0]], colors[cube->top[0][1]], colors[cube->top[0][2]]);
printf(" %c, %c, %c, \n", colors[cube->top[1][0]], colors[cube->top[1][1]], colors[cube->top[1][2]]);
printf(" %c, %c, %c, \n", colors[cube->top[2][0]], colors[cube->top[2][1]], colors[cube->top[2][2]]);
printf("\n");
printf("%c, %c, %c, ", colors[cube->left[0][0]], colors[cube->left[0][1]], colors[cube->left[0][2]]);
printf("%c, %c, %c, ", colors[cube->front[0][0]], colors[cube->front[0][1]], colors[cube->front[0][2]]);
printf("%c, %c, %c, ", colors[cube->right[0][0]], colors[cube->right[0][1]], colors[cube->right[0][2]]);
printf("\n");
printf("%c, %c, %c, ", colors[cube->left[1][0]], colors[cube->left[1][1]], colors[cube->left[1][2]]);
printf("%c, %c, %c, ", colors[cube->front[1][0]], colors[cube->front[1][1]], colors[cube->front[1][2]]);
printf("%c, %c, %c, ", colors[cube->right[1][0]], colors[cube->right[1][1]], colors[cube->right[1][2]]);
printf("\n");
printf("%c, %c, %c, ", colors[cube->left[2][0]], colors[cube->left[2][1]], colors[cube->left[2][2]]);
printf("%c, %c, %c, ", colors[cube->front[2][0]], colors[cube->front[2][1]], colors[cube->front[2][2]]);
printf("%c, %c, %c, ", colors[cube->right[2][0]], colors[cube->right[2][1]], colors[cube->right[2][2]]);
printf("\n\n");
printf(" %c, %c, %c, \n", colors[cube->bottom[0][0]], colors[cube->bottom[0][1]], colors[cube->bottom[0][2]]);
printf(" %c, %c, %c, \n", colors[cube->bottom[1][0]], colors[cube->bottom[1][1]], colors[cube->bottom[1][2]]);
printf(" %c, %c, %c, \n", colors[cube->bottom[2][0]], colors[cube->bottom[2][1]], colors[cube->bottom[2][2]]);
printf("----------------------------\n");
}
void rotate_face(int mat[3][3]) {
int temp[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
temp[j][3-1-i] = mat[i][j];
}
}
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
mat[i][j] = temp[i][j];
}
}
}
void rotate_edge_corner (Cube *cube, char side[10]) {
// TODO
// Note: unify rotate_edge_corner with rotate_face
}
void main (){
Cube cube;
initialize(&cube);
cube.back[0][1]=3;
cube.back[2][2]=4;
print(&cube);
rotate_90(cube.back);
print(&cube);
rotate_90(cube.back);
print(&cube);
}
+261
View File
@@ -0,0 +1,261 @@
#include <stdio.h>
#define UP 0
#define DOWN 1
#define LEFT 2
#define RIGHT 3
#define FRONT 4
#define BACK 5
typedef struct Cube {
int x, y, z;
char sticker[6];
} Cube;
void initialize(Cube* array, int pos[3][3][3]) {
for (int i=0; i<27; i++) {
// Calcolo le coordinate in base agli indici e le assegno ai cubetti
int x=i%3;
int y=(i/9);
int z=(i/3)%3;
array[i].x=x;
array[i].y=y;
array[i].z=z;
// Inizializzo tutti gli sticker e associo i colori ai cubetti
array[i].sticker[DOWN] = 'W';
array[i].sticker[UP] = 'Y';
array[i].sticker[LEFT] = 'B';
array[i].sticker[RIGHT] = 'G';
array[i].sticker[BACK] = 'O';
array[i].sticker[FRONT] = 'R';
// Mi salvo che cubetto ho per ogni coordinata
pos[x][y][z]=i;
}
}
void print(Cube* array, int pos[3][3][3]) {
printf(" %c %c %c\n %c %c %c\n %c %c %c", array[pos[0][2][2]].sticker[BACK], array[pos[1][2][2]].sticker[BACK], array[pos[2][2][2]].sticker[BACK], array[pos[0][1][2]].sticker[BACK], array[pos[1][1][2]].sticker[BACK], array[pos[2][1][2]].sticker[BACK], array[pos[0][0][2]].sticker[BACK], array[pos[1][0][2]].sticker[BACK], array[pos[2][0][2]].sticker[BACK]);
printf("\n\n %c %c %c\n %c %c %c\n %c %c %c", array[pos[0][0][2]].sticker[UP], array[pos[1][0][2]].sticker[UP], array[pos[2][0][2]].sticker[UP], array[pos[0][0][1]].sticker[UP], array[pos[1][0][1]].sticker[UP], array[pos[2][0][1]].sticker[UP], array[pos[0][0][0]].sticker[UP], array[pos[1][0][0]].sticker[UP], array[pos[2][0][0]].sticker[UP]);
printf("\n\n%c %c %c %c %c %c %c %c %c", array[pos[0][0][2]].sticker[LEFT], array[pos[0][0][1]].sticker[LEFT], array[pos[0][0][0]].sticker[LEFT], array[pos[0][0][0]].sticker[FRONT], array[pos[1][0][0]].sticker[FRONT], array[pos[2][0][0]].sticker[FRONT], array[pos[2][0][0]].sticker[RIGHT], array[pos[2][0][1]].sticker[RIGHT], array[pos[2][0][2]].sticker[RIGHT]);
printf("\n%c %c %c %c %c %c %c %c %c", array[pos[0][1][2]].sticker[LEFT], array[pos[0][1][1]].sticker[LEFT], array[pos[0][1][0]].sticker[LEFT], array[pos[0][1][0]].sticker[FRONT], array[pos[1][1][0]].sticker[FRONT], array[pos[2][1][0]].sticker[FRONT], array[pos[2][1][0]].sticker[RIGHT], array[pos[2][1][1]].sticker[RIGHT], array[pos[2][1][2]].sticker[RIGHT]);
printf("\n%c %c %c %c %c %c %c %c %c", array[pos[0][2][2]].sticker[LEFT], array[pos[0][2][1]].sticker[LEFT], array[pos[0][2][0]].sticker[LEFT], array[pos[0][2][0]].sticker[FRONT], array[pos[1][2][0]].sticker[FRONT], array[pos[2][2][0]].sticker[FRONT], array[pos[2][2][0]].sticker[RIGHT], array[pos[2][2][1]].sticker[RIGHT], array[pos[2][2][2]].sticker[RIGHT]);
printf("\n\n %c %c %c\n %c %c %c\n %c %c %c\n\n\n\n", array[pos[0][2][0]].sticker[DOWN], array[pos[1][2][0]].sticker[DOWN], array[pos[2][2][0]].sticker[DOWN], array[pos[0][2][1]].sticker[DOWN], array[pos[1][2][1]].sticker[DOWN], array[pos[2][2][1]].sticker[DOWN], array[pos[0][2][2]].sticker[DOWN], array[pos[1][2][2]].sticker[DOWN], array[pos[2][2][2]].sticker[DOWN]);
}
void rotate(Cube* array, int pos[3][3][3], char rotazione) {
int involved_cubes[9];
int index=0;
int tmp_x, tmp_y, tmp_z;
// z=0
if (rotazione == 'F') {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
involved_cubes[index]=pos[i][j][0];
index++;
}
}
for (index=0; index<9; index++) {
int i=involved_cubes[index];
tmp_x = array[i].x;
tmp_y = array[i].y;
array[i].x=2-tmp_y;
array[i].y=tmp_x;
pos[array[i].x][array[i].y][0]=i;
char tmp = array[i].sticker[UP];
array[i].sticker[UP] = array[i].sticker[LEFT];
array[i].sticker[LEFT] = array[i].sticker[DOWN];
array[i].sticker[DOWN] = array[i].sticker[RIGHT];
array[i].sticker[RIGHT] = tmp;
}
}
// z=2
if (rotazione == 'B') {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
involved_cubes[index]=pos[i][j][2];
index++;
}
}
for (index=0; index<9; index++) {
int i=involved_cubes[index];
tmp_x = array[i].x;
tmp_y = array[i].y;
array[i].x=tmp_y;
array[i].y=2-tmp_x;
pos[array[i].x][array[i].y][2]=i;
char tmp = array[i].sticker[DOWN];
array[i].sticker[DOWN] = array[i].sticker[LEFT];
array[i].sticker[LEFT] = array[i].sticker[UP];
array[i].sticker[UP] = array[i].sticker[RIGHT];
array[i].sticker[RIGHT] = tmp;
}
}
// y=0
if (rotazione == 'U') {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
involved_cubes[index]=pos[i][0][j];
index++;
}
}
for (index=0; index<9; index++) {
int i=involved_cubes[index];
tmp_x = array[i].x;
tmp_z = array[i].z;
array[i].x=tmp_z;
array[i].z=2-tmp_x;
pos[array[i].x][0][array[i].z]=i;
char tmp = array[i].sticker[FRONT];
array[i].sticker[FRONT] = array[i].sticker[RIGHT];
array[i].sticker[RIGHT] = array[i].sticker[BACK];
array[i].sticker[BACK] = array[i].sticker[LEFT];
array[i].sticker[LEFT] = tmp;
}
}
// y=2
if (rotazione == 'D') {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
involved_cubes[index]=pos[i][2][j];
index++;
}
}
for (index=0; index<9; index++) {
int i=involved_cubes[index];
tmp_x = array[i].x;
tmp_z = array[i].z;
array[i].x=2-tmp_z;
array[i].z=tmp_x;
pos[array[i].x][2][array[i].z]=i;
char tmp = array[i].sticker[FRONT];
array[i].sticker[FRONT] = array[i].sticker[LEFT];
array[i].sticker[LEFT] = array[i].sticker[BACK];
array[i].sticker[BACK] = array[i].sticker[RIGHT];
array[i].sticker[RIGHT] = tmp;
}
}
// x=0
if (rotazione == 'L') {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
involved_cubes[index]=pos[0][i][j];
index++;
}
}
for (index=0; index<9; index++) {
int i=involved_cubes[index];
tmp_y = array[i].y;
tmp_z = array[i].z;
array[i].y=2-tmp_z;
array[i].z=tmp_y;
pos[0][array[i].y][array[i].z]=i;
char tmp = array[i].sticker[UP];
array[i].sticker[UP] = array[i].sticker[BACK];
array[i].sticker[BACK] = array[i].sticker[DOWN];
array[i].sticker[DOWN] = array[i].sticker[FRONT];
array[i].sticker[FRONT] = tmp;
}
}
// x=2
if (rotazione == 'R') {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
involved_cubes[index]=pos[2][i][j];
index++;
}
}
for (index=0; index<9; index++) {
int i=involved_cubes[index];
tmp_y = array[i].y;
tmp_z = array[i].z;
array[i].y=tmp_z;
array[i].z=2-tmp_y;
pos[2][array[i].y][array[i].z]=i;
char tmp = array[i].sticker[UP];
array[i].sticker[UP] = array[i].sticker[FRONT];
array[i].sticker[FRONT] = array[i].sticker[DOWN];
array[i].sticker[DOWN] = array[i].sticker[BACK];
array[i].sticker[BACK] = tmp;
}
}
}
int main() {
Cube array[27];
int pos[3][3][3];
initialize(array, pos);
rotate(array, pos, 'F');
print(array, pos);
rotate(array, pos, 'U');
print(array, pos);
}
+114
View File
@@ -0,0 +1,114 @@
#include <stdio.h>
#define W 0
#define Y 1
#define O 2
#define R 3
#define B 4
#define G 5
typedef struct Cube {
int front[3][3];
int back[3][3];
int top[3][3];
int bottom[3][3];
int right[3][3];
int left[3][3];
} Cube;
void initialize(Cube *cube) {
for (int i=0; i<3; i++) {
for (int j=0; j<3; j++) {
cube->front[i][j] = W;
cube->back[i][j] = Y;
cube->top[i][j] = O;
cube->bottom[i][j] = R;
cube->right[i][j] = B;
cube->left[i][j] = G;
}
}
}
void print(Cube *cube) {
char colors[] = {'W', 'Y', 'O', 'R', 'B', 'G'};
printf(" %c, %c, %c, \n", colors[cube->back[0][0]], colors[cube->back[0][1]], colors[cube->back[0][2]]);
printf(" %c, %c, %c, \n", colors[cube->back[1][0]], colors[cube->back[1][1]], colors[cube->back[1][2]]);
printf(" %c, %c, %c, \n", colors[cube->back[2][0]], colors[cube->back[2][1]], colors[cube->back[2][2]]);
printf("\n");
printf(" %c, %c, %c, \n", colors[cube->top[0][0]], colors[cube->top[0][1]], colors[cube->top[0][2]]);
printf(" %c, %c, %c, \n", colors[cube->top[1][0]], colors[cube->top[1][1]], colors[cube->top[1][2]]);
printf(" %c, %c, %c, \n", colors[cube->top[2][0]], colors[cube->top[2][1]], colors[cube->top[2][2]]);
printf("\n");
printf("%c, %c, %c, ", colors[cube->left[0][0]], colors[cube->left[0][1]], colors[cube->left[0][2]]);
printf("%c, %c, %c, ", colors[cube->front[0][0]], colors[cube->front[0][1]], colors[cube->front[0][2]]);
printf("%c, %c, %c, ", colors[cube->right[0][0]], colors[cube->right[0][1]], colors[cube->right[0][2]]);
printf("\n");
printf("%c, %c, %c, ", colors[cube->left[1][0]], colors[cube->left[1][1]], colors[cube->left[1][2]]);
printf("%c, %c, %c, ", colors[cube->front[1][0]], colors[cube->front[1][1]], colors[cube->front[1][2]]);
printf("%c, %c, %c, ", colors[cube->right[1][0]], colors[cube->right[1][1]], colors[cube->right[1][2]]);
printf("\n");
printf("%c, %c, %c, ", colors[cube->left[2][0]], colors[cube->left[2][1]], colors[cube->left[2][2]]);
printf("%c, %c, %c, ", colors[cube->front[2][0]], colors[cube->front[2][1]], colors[cube->front[2][2]]);
printf("%c, %c, %c, ", colors[cube->right[2][0]], colors[cube->right[2][1]], colors[cube->right[2][2]]);
printf("\n\n");
printf(" %c, %c, %c, \n", colors[cube->bottom[0][0]], colors[cube->bottom[0][1]], colors[cube->bottom[0][2]]);
printf(" %c, %c, %c, \n", colors[cube->bottom[1][0]], colors[cube->bottom[1][1]], colors[cube->bottom[1][2]]);
printf(" %c, %c, %c, \n", colors[cube->bottom[2][0]], colors[cube->bottom[2][1]], colors[cube->bottom[2][2]]);
printf("----------------------------\n");
}
void rotate_90(int mat[3][3]) {
// Rotate the single face
int temp[3][3];
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
temp[j][3-1-i] = mat[i][j];
}
}
for(int i=0;i<3;i++) {
for(int j=0;j<3;j++) {
mat[i][j] = temp[i][j];
}
}
// Rotate the other 4 faces
}
void main (){
Cube cube;
initialize(&cube);
cube.back[0][1]=3;
cube.back[2][2]=4;
print(&cube);
//rotate_90(cube.back);
print(&cube);
// rotate_90(cube.back);
print(&cube);
}