Aritmética posfija acotada
Evalúa entre uno y 100 tokens posfijos con enteros acotados y los operadores +, -, * y //.
def postfix_value(tokens):
tokens = tuple(tokens)
if not 1 <= len(tokens) <= 100:
raise ValueError("tokens.limit")
stack = []
for token in tokens:
if type(token) is int and abs(token) <= 1000000000:
stack.append(token)
continue
if type(token) is not str or token not in ("+", "-", "*", "//") or len(stack) < 2:
raise ValueError("token.invalid")
right, left = stack.pop(), stack.pop()
if token == "//" and right == 0:
raise ValueError("division.zero")
value = (left + right if token == "+" else left - right if token == "-" else left * right if token == "*" else left // right)
if abs(value) > 10**18:
raise ValueError("result.range")
stack.append(value)
if len(stack) != 1:
raise ValueError("stack.remainder")
return stack[0]- Proyecto
- Comprueba la división negativa hacia menos infinito y rechaza división por cero, una pila incompleta o magnitudes intermedias superiores a 10**18.
- Revisa antes de aplicar
- Compara el comportamiento real con el resultado esperado. Si una prueba falla, investiga la causa antes de hacer más cambios.
- Modelos
- Configura un endpoint compatible con OpenAI o Anthropic usando la URL base y, si hace falta, una clave API. Prueba la conexión. Un servidor local debe estar en ejecución; las herramientas remotas pueden enviar datos por separado.
def postfix_value(tokens):
tokens = tuple(tokens)
if not 1 <= len(tokens) <= 100:
raise ValueError("tokens.limit")
stack = []
for token in tokens:
if type(token) is int and abs(token) <= 1000000000:
stack.append(token)
continue
if type(token) is not str or token not in ("+", "-", "*", "//") or len(stack) < 2:
raise ValueError("token.invalid")
right, left = stack.pop(), stack.pop()
if token == "//" and right == 0:
raise ValueError("division.zero")
value = (left + right if token == "+" else left - right if token == "-" else left * right if token == "*" else left // right)
if abs(value) > 10**18:
raise ValueError("result.range")
stack.append(value)
if len(stack) != 1:
raise ValueError("stack.remainder")
return stack[0]Define qué puede hacer una expresión antes de cambiar su analizador
El tratamiento de expresiones necesita límites claros incluso cuando el lenguaje es pequeño. StackSundial es un espacio de programación con IA para Windows donde analizar esos límites junto a los archivos de código. Abre tu proyecto y pide al modelo conectado que inspeccione los tokens admitidos, las reglas de evaluación y el tratamiento de errores del código llamante antes de proponer cambios de implementación.
Una tarea posible es revisar un evaluador posfijo utilizado en una pantalla interna de cálculo. Especifica los operadores permitidos, los límites numéricos y la respuesta a expresiones mal formadas. Pide al asistente que identifique dónde se aplican esos requisitos y proponga cambios concretos donde falten. Así la conversación se centra en mantener tu software en lugar de limitarse a generar otro evaluador.
Revisa las rutas de rechazo con la misma atención que la aritmética correcta. Ejecuta comprobaciones del proyecto para operandos ausentes, resultados sobrantes, división por cero y valores fuera de los límites permitidos. Inspecciona el orden de los operandos en operaciones no conmutativas y confirma que el consumidor recibe el error previsto. Evita aceptar un bucle de evaluación más corto si debilita el contrato que lo rodea.
StackSundial admite conexiones a endpoints compatibles con OpenAI o de Anthropic. Cuando esté disponible, elige un modelo de IA ablacionado teniendo presente que las restricciones, los límites de contexto y las herramientas dependen del servicio seleccionado. Su código propuesto sigue siendo un punto de partida para la inspección y tu propia verificación, no una prueba de que el intérprete esté listo.
Antes de aceptar un cambio del evaluador
- ¿Qué reglas debo incluir en la descripción de la tarea?
Indica los tokens permitidos, los tipos de operandos, los límites numéricos y el comportamiento de errores. Incluye el código llamante que presenta los fallos a los usuarios. Sin esas reglas, una propuesta puede calcular bien ejemplos ordinarios y aceptar expresiones que la aplicación debía rechazar.
- ¿Por qué probar explícitamente la resta y la división?
Sus resultados dependen del orden de los operandos, a diferencia de la suma en casos ordinarios. Usa casos con resultados claramente diferentes al invertirlos. Comprueba la convención de división exigida por tu proyecto y su respuesta a un divisor cero.
- ¿Deben devolver cero las expresiones mal formadas?
Solo si es un requisito explícito de la aplicación. Un valor numérico alternativo plausible puede ocultar entradas incorrectas. Pide al asistente que conserve una ruta clara de rechazo e inspecciona cómo distingue el consumidor un cero válido de un error.
- ¿Basta un límite de tokens para acotar la evaluación?
Revisa todos los límites que requiere el proyecto, incluidos los valores intermedios y la estructura de entrada admitida. El recuento de tokens solo cubre una parte del contrato. Prueba las rutas de rechazo pertinentes después de cualquier cambio en el bucle de evaluación.
StackSundial · Actualizado 2026-10-25