🚩 Lo que Aprendí Corrigiendo a ChatGPT: (a + b)^2 = year y la Importancia de Pensamiento Crítico

Hoy quiero compartir una anécdota muy valiosa para cualquier persona que practique programación en general y programación competitiva sobre todo. Mientras resolvía el problema “A. Square Year” de Codeforces, no solo repasé técnicas de cuadráticos y búsqueda de pares, sino que también confirmé algo fundamental: leer y analizar el enunciado real es la clave para evitar errores, incluso cuando la solución parece “trivial” o cuando después de resolver el problema la IA (ChatGPT) sugiere otro enfoque ignorando el correcto que le das.
🔍 El Problema
Me enfrenté a un problema donde, dado un año en formato de 4 dígitos (con posibles ceros a la izquierda), debía encontrar dos números no negativos a y b tales que:
Y si no existían tales números, debía responder -1.
El enunciado NO imponía ninguna restricción sobre cuántos dígitos debía tener cada número, ni pedía que la partición fuera de una forma especial.
Solo requería que el par fuera válido.
🤖 Lo que me sugirió ChatGPT (después de resolver el problema)
Al principio, ChatGPT me sugirió buscar otra forma de resolver el problema, ya que su evaluación era que mi solución no cubría correctamente todos los casos. Incluso después de que le mostré la respuesta correcta junto al enunciado, insistió un par de veces en que no era suficiente. Tras este intercambio, comprendí dos cosas clave:
-
La IA probablemente no generalizó correctamente lo aprendido de problemas previos de Codeforces, ya que esta pregunta es bastante reciente (tendrá unos dos meses de antigüedad), lo que dificultó que encontrara la solución más directa y eficiente.
-
Gran parte del motivo real puede haber sido que la IA no tenía el contexto suficiente desde el inicio. Si hubiera empezado una conversación nueva dando solo el problema y que lo resuelva, hubiera salido algo distinto, pero aun con mi prompt añadiendo explícitamente algo como: “Esta es mi solución para el siguiente problema: SOLUCIÓN + Enunciado del problema: Enunciado de la pregunta 2114A Square Year”, no lo hizo lo más óptimo posible. ChatGPT suele desenvolverse sin complicaciones en preguntas clásicas y muy conocidas, especialmente aquellas con las que ha sido entrenado más extensamente, pero puede mostrarse menos certero frente a problemas nuevos o enunciados poco difundidos.
😅 Enfoque de la IA
- Primer enfoque de la IA (Equivocado):
void solve() {
string s;
cin >> s;
int year = stoi(s);
// Prueba las dos formas posibles de partir el string
for (int i = 1; i <= 3; i++) { // i: número de dígitos para 'a'
int a = stoi(s.substr(0, i));
int b = stoi(s.substr(i));
int sum = a + b;
if (sum * sum == year) {
cout << a << " " << b << '\n';
return;
}
}
cout << -1 << '\n';
}
- Segundo enfoque de la IA (Soluciona, pero algo rebuscado):
void solve() {
string s;
cin >> s;
int year = stoi(s);
int root = sqrt(year);
if (root * root != year) {
cout << -1 << '\n';
return;
}
// Solo hace falta UN par (a, b) con a + b = root, 0 ≤ a, b ≤ 9999
for (int a = 0; a <= root; ++a) {
int b = root - a;
if (b >= 0 && b <= 9999) {
cout << a << " " << b << '\n';
return;
}
}
}
💡 Mi Enfoque
Yo por mi parte decidí simplemente:
- Comprobar si el año es un cuadrado perfecto.
- Si lo es, imprimir un par válido como (√year, 0), ya que siempre cumple la condición.
- Si no es cuadrado perfecto, responder -1.
Comprobé con el juez y todos los casos de prueba fueron aceptados.
El enunciado solo requería un par válido (no uno especial).
✨ Ejemplo de código aceptado
Código en C++:
#include <bits/stdc++.h>
using namespace std;
void solve() {
int year;
cin >> year;
int r = sqrt(year);
if (r * r != year) {
cout << -1 << '\n';
return;
}
cout << r << " " << 0 << '\n';
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0);
int t; cin >> t;
while (t--) solve();
}
Código en Python:
import math
def solve():
year = int(input())
r = int(math.isqrt(year)) # isqrt devuelve raíz entera y evita decimales
if r * r != year:
print(-1)
return
print(f"{r} 0")
t = int(input())
for _ in range(t):
solve()
📚 Lo que aprendí
-
Confía en tu pensamiento crítico: Construir tu propia lógica con base en lo que entiendes (y no en lo que “parece correcto”) y probarla directamente en el juez puede ahorrarte horas buscando una solución más compleja de lo necesario — incluso más que la que propondría la IA.
-
Incluso la IA puede cometer errores, así que revisa siempre por ti mismo. Por muy buena que sea la herramienta, ninguna IA reemplaza la intuición, la comprensión y la validación humana. Si algo no encaja, cuestiona y verifica.
-
Nunca hay que asumir restricciones no escritas. Es fácil caer en la trampa de asumir condiciones por costumbre —eso le pasó a la IA en este caso nuevo—, especialmente cuando ya resolviste problemas parecidos antes. Pero cada enunciado es único, y proyectar lo que crees que debería decir puede llevarte directo al error. Volver al statement real, sin prejuicios, es clave.
🚀 Reflexión final
Este episodio me confirmó que, incluso la mejor IA, no puede ser perfecta todo el tiempo, ni siquiera ante problemas que parecen simples a primera vista. Practicar lógica de programación sigue siendo fundamental, porque la inteligencia artificial aún está lejos de reemplazar la intuición y el análisis que desarrollamos como programadores. Aún hay mucho por aprender, tanto para nosotros como para la IA, especialmente en su capacidad de generalizar frente a problemas nuevos o poco frecuentes.
Por eso, es clave leer cuidadosamente el enunciado, confiar en nuestro razonamiento y validar nuestras soluciones directamente en el juez. Al final, la combinación de pensamiento crítico y práctica constante sigue siendo insustituible en la programación competitiva y también en la programación en general.