On vous done 2 images: une image de base, et un motif . Chaque image est representee sous la forme d'un tableau de chaine de caractere , où chaque element represente une ligne de pixels de l'image, et chaque caractere represent un pixel. Il n'est pas necessaire de comprendre en detail cet encodage pour resoudre ce probleme, mais pour information, des explications sont fournies plus bas. Vous devez retourner la position x,y de ce motif dans l'image, ou [-1,-1] si le motif n'est pa present dans l'image. Si le motif apparait plusieurs fois dans l'iamage, retournez la position du plus haut (le y le plus petit), et en cas d'égalité, le plus a gauche ( le x le plus petit). La position du motif est determiner par les coordonnee x,y de son coin en haut à gauche. x represent la colonne, y represente la ligne, et les coordonees [0,0] representent le coin en haut à gauche. Implementer la methode Solve(int imageWidth, int imageHeight, string[] image, int patternWidth, int patternHeight, string[] pattern) ou les parametres sont: imageWidth est la largeur de l'image, imageHeight est la hauteur de l'image, image est un tableau de strings ou chaque caractere represente un pixel, patternWidth est la largeur du motif, patternHeight est la hauteur du motif, pattern est le motif, un tableau de strings ou chaque caracteres represente un pixel. La fonction doit retourner: si le motif est present dans l'iamge: la position x, y , sous la forme d'un tableau de 2 entiers, representant le coin en haut a gauche du 1er motif, en partant du haut vers le bas et de gauche à droite. Si le motif n'est pas present dans l'iamge: [-1, -1]
public class Solution
{
public static int[] Solve(int imageWidth, int imageHeight, string[] image, int patternWidth, int patternHeight, string[] pattern)
{
// Parcourt de chaque position possible pour placer le coin supérieur gauche du motif
for (int y = 0; y <= imageHeight - patternHeight; y++)
{
for (int x = 0; x <= imageWidth - patternWidth; x++)
{
// Vérifie si le motif correspond à cette position (x, y)
if (IsPatternAtPosition(image, pattern, x, y, patternWidth, patternHeight))
{
return new int[] { x, y }; // Retourne la première position correspondante
}
}
}
// Aucun motif trouvé, retourne [-1, -1]
return new int[] { -1, -1 };
}
private static bool IsPatternAtPosition(string[] image, string[] pattern, int startX, int startY, int patternWidth, int patternHeight)
{
// Vérifie chaque ligne et chaque colonne du motif
for (int i = 0; i < patternHeight; i++)
{
for (int j = 0; j < patternWidth; j++)
{
// Si le caractère de l'image ne correspond pas au caractère du motif
if (image[startY + i][startX + j] != pattern[i][j])
{
return false;
}
}
}
return true; // Tous les caractères correspondent
}
}
Aucun commentaire:
Enregistrer un commentaire