Hola! Me gustaria saber si el ejercicio de Worlde de esta forma estaria bien resuelto.
/*
Ejercicio 3
Implementar una función wordle que resuelva un tablero del juego Wordle
(también conocido como palabra del día). La función recibe:
● Una palabra secreta de COLS caracteres (no es necesario validarlo)
● Una matriz de caracteres de tamaño FILS x COLS donde cada fila es un
intento del usuario para resolver la palabra secreta
● La cantidad de intentos del usuario (un entero menor o igual a FILS)
La función debe dejar en otra matriz una marca V, A o G para cada letra de
cada intento del usuario donde:
● V: VERDE significa que la letra está en la palabra y en la posición
CORRECTA.
● A: AMARILLO significa que la letra está presente en la palabra pero en la
posición INCORRECTA.
● G: GRIS significa que la letra NO está presente en la palabra.
hasta que se marque el primer intento correcto (todas las letras verdes) o se
hayan analizado todos los intentos.
La función debe retornar un entero con el número del primer intento correcto
(todas las letras verdes) o -1 si ningún intento es correcto.
Notar que tanto la palabra oculta como las palabras de los intentos pueden
contener letras repetidas. En ese caso, las pistas son independientes para cada letra
y tienen prioridad: verde tiene mayor prioridad al amarillo
*/
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <ctype.h>
#define COLS 5
#define FILS 6
char belongs(char letter, int idx, char secret[COLS])
{
// ans es 'G', asumo que no esta
char ans = 'G';
for (int i = 0; i < COLS; i++) {
// Me fijo que sean la misma letra y la misma posicion
if (letter == secret[i] && idx == i)
ans = 'V'; // VERDE (== pos)
// Si son iguales pero distinta posicion (y no se habia
// marcado como 'V' anteriormente en el ciclo)
else if (letter == secret[i] && idx != i && ans != 'V')
ans = 'A'; // AMARILLO (!= pos)
}
return ans;
}
// Asumo que siempre trabajo con mayusculas, sino hago todo toupper
int wordle(const char secret[COLS], char m[FILS][COLS], size_t tries)
{
if (tries > FILS) return -1;
char mTries[FILS][COLS];
int allGreen;
for (int i = 0; i < FILS && tries; i++) {
allGreen = 1;
for (int j = 0; j < COLS && tries; j++) {
// pongo la letra que corresponde en cada posicion.
mTries[i][j] = belongs(m[i][j], j, secret);
// Si alguna no es 'V' entonces ya no puede ser un
// intento correcto
if (mTries[i][j] != 'V')
allGreen = 0;
// Me sirve para ver que la funcion mTries es como la
// del parcial (ignorar)
// printf("%c", mTries[i][j]);
}
// puts("");
// allGreen es equivalente a pal correcta -> devuelve la pos+1
// pues por testeo el primer intento es 1.
if (allGreen)
return i+1;
tries--;
}
// No se encontro la palabra secreta
return -1;
}
int main()
{
char secret[COLS] = "ROSAS";
char m[FILS][COLS] =
{"FAROL", "SACOS", "RATOS", "ROSAS", "COSAS", "TECLA"};
assert(wordle(secret, m, 7) == -1);
assert(wordle(secret, m, 3) == -1);
assert(wordle(secret, m, 6) == 4);
puts("OK!");
return 0;
}
Hola! Me gustaria saber si el ejercicio de Worlde de esta forma estaria bien resuelto.