From ba91038011715addfee8072f1b971050a16ab888 Mon Sep 17 00:00:00 2001 From: pm240836 Date: Mon, 20 Apr 2026 10:56:54 +0000 Subject: [PATCH] =?UTF-8?q?Cr=C3=A9ation=20des=20fonctions=20de=20placemen?= =?UTF-8?q?t=20des=20pieces=20(normaliser,=20rotations,=20miroir=20)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- puzzle.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/puzzle.c b/puzzle.c index 17ac476..2a79bd6 100644 --- a/puzzle.c +++ b/puzzle.c @@ -37,3 +37,54 @@ Dimensions calculer_dimensions(uint64_t piece) { dim.hauteur = max_row - min_row + 1; return dim; } + +//Normaliser (ramener la pièce en haut à gauche) +uint64_t normaliser(uint64_t piece) { + if (piece == 0) return 0; + int min_r = 8, min_c = 8; + + for (int r = 0; r < 8; r++) { + for (int c = 0; c < 8; c++) { + if (piece & BIT(r, c)) { + if (r < min_r) min_r = r; + if (c < min_c) min_c = c; + } + } + } + + uint64_t res = 0; + for (int r = 0; r < 8; r++) { + for (int c = 0; c < 8; c++) { + if (piece & BIT(r, c)) { + res |= BIT(r - min_r, c - min_c); + } + } + } + return res; +} + +//Rotation 90° +uint64_t rotation_90(uint64_t piece) { + uint64_t res = 0; + for (int r = 0; r < 8; r++) { + for (int c = 0; c < 8; c++) { + if (piece & BIT(r, c)) { + res |= BIT(c, 7 - r); + } + } + } + return normaliser(res); +} + +//Miroir +uint64_t miroir_horizontal(uint64_t piece) { + uint64_t res = 0; + for (int r = 0; r < 8; r++) { + for (int c = 0; c < 8; c++) { + if (piece & BIT(r, c)) { + res |= BIT(r, 7 - c); + } + } + } + return normaliser(res); +} -- GitLab