Aritmetică postfixată limitată
Evaluează între unu și 100 de tokenuri postfixate cu întregi limitați și operatorii +, -, * și //.
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]- Proiect
- Verifică împărțirea negativă rotunjită în jos și respinge împărțirea la zero, stiva incompletă sau module intermediare peste 10**18.
- Verifică înainte de aplicare
- Compară comportamentul real cu rezultatul așteptat. Dacă o verificare eșuează, cercetează cauza înainte de alte modificări.
- Modele
- Configurează un endpoint compatibil OpenAI sau Anthropic cu URL-ul de bază și cheia API, dacă este necesară. Testează conexiunea. Serverul local trebuie să ruleze; instrumentele externe pot transmite date separat.
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ște ce poate face o expresie înainte de a-i modifica analizorul
Tratarea expresiilor necesită limite clare chiar și când limbajul este mic. StackSundial este un spațiu de programare cu IA pentru Windows în care poți discuta aceste limite alături de fișierele sursă. Deschide proiectul și cere modelului conectat să inspecteze tokenurile acceptate, regulile de evaluare și tratarea erorilor din apelant înainte de a propune o modificare a implementării.
O sarcină posibilă este revizuirea unui evaluator postfixat folosit de un ecran intern de calcul. Precizează operatorii permiși, limitele numerice și răspunsul la expresii incorect formate. Cere asistentului să identifice unde sunt impuse aceste cerințe și să propună modificări punctuale acolo unde lipsesc. Astfel, conversația privește mentenanța software-ului, nu doar generarea unui alt evaluator.
Revizuiește căile de respingere cu aceeași atenție ca aritmetica reușită. Rulează verificările proiectului pentru operanzi lipsă, rezultate în plus, împărțire la zero și valori dincolo de limitele permise. Inspectează ordinea operanzilor în operațiile necomutative și confirmă că apelantul primește eroarea dorită. Nu accepta o buclă de evaluare mai scurtă dacă slăbește contractul din jurul ei.
StackSundial acceptă conexiuni la endpointuri compatibile cu OpenAI sau Anthropic. Acolo unde este disponibil, alege un model IA abliterat, ținând cont că restricțiile, limitele de context și instrumentele depind de serviciul selectat. Codul propus rămâne un punct de pornire pentru inspecție și propria verificare, nu o dovadă că interpretorul este gata.
Înainte de a accepta o modificare a evaluatorului
- Ce reguli trebuie incluse în descrierea sarcinii?
Precizează tokenurile permise, tipurile operanzilor, limitele numerice și comportamentul la erori. Include apelantul care prezintă eșecurile utilizatorilor. Fără aceste reguli, o propunere poate calcula corect exemple obișnuite, acceptând totuși expresii pe care aplicația trebuia să le respingă.
- De ce să testez explicit scăderea și împărțirea?
Rezultatele lor depind de ordinea operanzilor, spre deosebire de adunare în cazurile obișnuite. Folosește cazuri cu rezultate vizibil diferite când operanzii sunt inversați. Verifică atât convenția împărțirii cerută de proiect, cât și răspunsul la un divizor zero.
- Ar trebui expresiile incorect formate să returneze zero?
Doar dacă aceasta este o cerință explicită a aplicației. O valoare numerică de rezervă plauzibilă poate ascunde intrarea greșită. Cere asistentului să păstreze o cale clară de respingere și inspectează cum distinge apelantul un rezultat zero valid de o eroare.
- Poate doar limita tokenurilor să limiteze evaluarea?
Revizuiește toate limitele cerute de proiect, inclusiv valorile intermediare și structura acceptată a intrării. Numărul tokenurilor răspunde doar unei părți a contractului. Testează căile relevante de respingere după orice modificare a buclei de evaluare.
StackSundial · Actualizat 2026-10-25