Dělení monickým polynomem
Vydělte celočíselné polynomy s nejvýše 21 koeficienty monickým dělitelem.
def divide_monic(dividend, divisor):
for row in (dividend, divisor):
if type(row) not in (list, tuple) or len(row) > 21:
raise ValueError("at most 21 coefficients")
if any(type(x) is not int for x in row): raise ValueError("integers")
def trim(row):
row = list(row)
while row and row[0] == 0: row.pop(0)
return row
a, b = trim(dividend), trim(divisor)
if not b or b[0] != 1: raise ValueError("monic divisor")
quotient = [0] * max(0, len(a) - len(b) + 1)
while a and len(a) >= len(b):
degree, factor = len(a) - len(b), a[0]
quotient[len(quotient)-1-degree] = factor
a = trim([x-factor*y for x,y in zip(a,b)] + a[len(b):])
return trim(quotient), aPřed použitím zkontrolujte
Porovnejte skutečné chování s očekávaným výsledkem. Pokud kontrola selže, před dalšími změnami zjistěte příčinu.
Modely
Nastavte endpoint kompatibilní s OpenAI nebo Anthropic pomocí základní URL a případného API klíče. Otestujte připojení. Lokální server modelu musí běžet; vzdálené nástroje mohou data odesílat samostatně.
Projekt
Ověřte nulové polynomy a konstantní dělitel, odmítněte neceločíselné koeficienty či nemonický dělitel a zkontrolujte identitu podílu a zbytku.
def divide_monic(dividend, divisor):
for row in (dividend, divisor):
if type(row) not in (list, tuple) or len(row) > 21:
raise ValueError("at most 21 coefficients")
if any(type(x) is not int for x in row): raise ValueError("integers")
def trim(row):
row = list(row)
while row and row[0] == 0: row.pop(0)
return row
a, b = trim(dividend), trim(divisor)
if not b or b[0] != 1: raise ValueError("monic divisor")
quotient = [0] * max(0, len(a) - len(b) + 1)
while a and len(a) >= len(b):
degree, factor = len(a) - len(b), a[0]
quotient[len(quotient)-1-degree] = factor
a = trim([x-factor*y for x,y in zip(a,b)] + a[len(b):])
return trim(quotient), aPři úpravách kódu zachovejte přehled o matematických předpokladech
MonicVale je programovací prostředí pro Windows, v němž můžete probírat matematické pomocné funkce v kontextu aplikace, která je používá. Začněte složkou projektu a určete předpoklady, o něž se pomocná funkce opírá. Než požádáte o refaktoring, nechte asistenta tyto předpoklady v kódu zkontrolovat. Užitečný návrh vysvětluje, které chování se nemění a které vstupy zůstávají mimo podporovaný kontrakt.
Úloha zaměřená na polynomial.py může zkoumat dělení, při němž musí být dělitel monický. Dodejte příklady pořadí koeficientů, úvodních nul a očekávaného podílu a zbytku. Zeptejte se, jak současná implementace tyto výsledky reprezentuje, a pak podle této reprezentace posuďte navrhovaná zjednodušení. Rozhovor tak zůstane ukotvený v chování softwaru a obecné matematické vysvětlení nenahradí kontrolu implementace.
Po úpravě spusťte kontroly projektu a porovnejte výstupy s nezávisle vypočtenými příklady. Zkontrolujte také odmítání vstupů, zejména pokud volající může dodat dělitel, který funkce nepodporuje. MonicVale se připojuje k podporovaným koncovým bodům kompatibilním s OpenAI nebo koncovým bodům Anthropic; podle potřeby používá přihlašovací údaje. Modely bez omezení jsou možností pouze tehdy, pokud je zvolený koncový bod poskytuje; omezení, kapacita kontextu a nástroje nadále závisejí na dané službě. Při rozhodování, zda je změna připravena, využijte prostředí k uchování předpokladů společně s pozorovanými výsledky.
Předpoklady matematické pomocné funkce
Proč před požadavkem na úpravu určit pořadí koeficientů?
Stejný seznam může podle různých konvencí popisovat různé polynomy. Uveďte, jak projekt řadí koeficienty a reprezentuje nulu, a před přijetím refaktoringu navrženého modelem porovnejte volající kód i vracené hodnoty s touto konvencí.
Má pomocná funkce potichu přizpůsobovat nepodporované dělitele?
Pouze pokud záměrně měníte její kontrakt a prověříte důsledky. Funkce omezená na monické dělitele má nepodporovaný vstup hlásit konzistentně; její zobecnění může vyžadovat jiné aritmetické předpoklady a další testy v celém volajícím kódu.
Co mám ověřit u zbytku?
Zkontrolujte reprezentaci očekávanou volajícím kódem a matematický vztah pro podporované příklady. Zahrňte případy beze zbytku i s nenulovým zbytkem, aby návrh neprošel jen díky zvládnutí snadného dělení.
Je kratší matematická funkce důvěryhodnější?
Ne nutně. Prověřte, zda kratší verze zachovává validaci, výstupní konvence a chování v krajních případech. Ptejte se na důvod každého zjednodušení a otestujte kontrakt; stručnost nedokazuje, že matematický předpoklad stále platí.
MonicVale · Aktualizováno 2026-10-25