Ograniczona arytmetyka postfiksowa
Oblicz od jednego do 100 tokenów postfiksowych z ograniczonymi liczbami całkowitymi i operatorami +, -, * oraz //.
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]- Projekt
- Sprawdź ujemne dzielenie z zaokrągleniem w dół i odrzuć dzielenie przez zero, niepełny stos lub moduł wyniku pośredniego ponad 10**18.
- Sprawdź przed zastosowaniem
- Porównaj rzeczywiste zachowanie z oczekiwanym wynikiem. Jeśli sprawdzenie się nie powiedzie, wyjaśnij przyczynę przed kolejnymi zmianami.
- Modele
- Dodaj endpoint zgodny z OpenAI lub Anthropic, podając bazowy URL i klucz API, jeśli jest wymagany. Sprawdź połączenie. Lokalny serwer modelu musi działać; zdalne narzędzia mogą przesyłać dane oddzielnie.
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]Określ możliwości wyrażenia przed zmianą jego parsera
Obsługa wyrażeń wymaga jasnych granic, nawet gdy język jest mały. StackSundial to środowisko programowania z AI dla Windows do omawiania tych granic obok plików źródłowych. Otwórz projekt i poproś podłączony model o sprawdzenie akceptowanych tokenów, reguł obliczania i obsługi błędów w kodzie wywołującym przed zaproponowaniem zmiany implementacji.
Możliwym zadaniem jest przegląd ewaluatora postfiksowego używanego na wewnętrznym ekranie obliczeń. Określ dozwolone operatory, granice liczbowe i reakcję na nieprawidłowe wyrażenia. Poproś asystenta o wskazanie miejsc egzekwowania tych wymagań i zaproponowanie konkretnych zmian tam, gdzie ich brakuje. Dzięki temu rozmowa dotyczy utrzymania Twojego oprogramowania, a nie tylko generowania kolejnego ewaluatora.
Przejrzyj ścieżki odrzucenia równie uważnie jak udane obliczenia. Uruchom kontrole projektu dla brakujących operandów, nadmiarowych wyników, dzielenia przez zero i wartości poza dopuszczalnymi granicami. Sprawdź kolejność operandów w operacjach nieprzemiennych i potwierdź, że kod wywołujący otrzymuje zamierzony błąd. Nie akceptuj krótszej pętli obliczeniowej, jeśli osłabia otaczający ją kontrakt.
StackSundial obsługuje połączenia z punktami końcowymi zgodnymi z OpenAI lub punktami Anthropic. Tam, gdzie jest dostępny, wybierz model AI po ablacji ze świadomością, że ograniczenia, limity kontekstu i narzędzia zależą od wybranej usługi. Proponowany kod pozostaje punktem wyjścia do analizy i własnej weryfikacji, a nie dowodem gotowości interpretera.
Przed akceptacją poprawki ewaluatora
- Jakie reguły uwzględnić w opisie zadania?
Określ dozwolone tokeny, typy operandów, granice liczbowe i zachowanie przy błędach. Dołącz kod wywołujący prezentujący błędy użytkownikom. Bez tych reguł propozycja może poprawnie obliczać zwykłe przykłady, a jednocześnie akceptować wyrażenia, które aplikacja miała odrzucać.
- Dlaczego jawnie testować odejmowanie i dzielenie?
W przeciwieństwie do dodawania w zwykłych przypadkach ich wyniki zależą od kolejności operandów. Użyj przypadków z wyraźnie różnymi wynikami po odwróceniu operandów. Sprawdź konwencję dzielenia wymaganą przez projekt oraz reakcję na zerowy dzielnik.
- Czy nieprawidłowe wyrażenia powinny zwracać zero?
Tylko jeśli jest to jawne wymaganie aplikacji. Wiarygodnie wyglądająca liczba zastępcza może ukryć błędne wejście. Poproś asystenta o zachowanie jasnej ścieżki odrzucenia i sprawdź, jak kod wywołujący odróżnia poprawny zerowy wynik od błędu.
- Czy sam limit tokenów może ograniczyć obliczanie?
Przejrzyj wszystkie limity wymagane przez projekt, w tym wartości pośrednie i akceptowaną strukturę wejścia. Liczba tokenów dotyczy tylko części tego kontraktu. Po każdej zmianie pętli obliczeniowej przetestuj odpowiednie ścieżki odrzucenia.
StackSundial · Zaktualizowano 2026-10-25