Învelișuri convexe cu întregi
Construiește un înveliș convex antiorar din cel mult 1000 puncte întregi, pornind de la minimul lexicografic.
def convex_hull(points):
if type(points) is not list or len(points) > 1000:
raise ValueError("hull.input")
if any(type(p) not in (tuple, list) or len(p) != 2 or
any(type(v) is not int for v in p) for p in points):
raise ValueError("hull.point")
ordered = sorted(set(map(tuple, points)))
if len(ordered) <= 1:
return ordered
def turn(a,b,c):
return (b[0]-a[0])*(c[1]-a[1])-(b[1]-a[1])*(c[0]-a[0])
def chain(sequence):
out = []
for p in sequence:
while len(out) >= 2 and turn(out[-2],out[-1],p) <= 0:
out.pop()
out.append(p)
return out
return chain(ordered)[:-1]+chain(reversed(ordered))[:-1]- Proiect
- Testează intrare goală, duplicate și puncte coliniare, păstrând doar extremitățile și respingând coordonate fracționare.
- 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 convex_hull(points):
if type(points) is not list or len(points) > 1000:
raise ValueError("hull.input")
if any(type(p) not in (tuple, list) or len(p) != 2 or
any(type(v) is not int for v in p) for p in points):
raise ValueError("hull.point")
ordered = sorted(set(map(tuple, points)))
if len(ordered) <= 1:
return ordered
def turn(a,b,c):
return (b[0]-a[0])*(c[1]-a[1])-(b[1]-a[1])*(c[0]-a[0])
def chain(sequence):
out = []
for p in sequence:
while len(out) >= 2 and turn(out[-2],out[-1],p) <= 0:
out.pop()
out.append(p)
return out
return chain(ordered)[:-1]+chain(reversed(ordered))[:-1]Leagă modificările geometrice de aplicația care le folosește
Codul geometric devine mai ușor de verificat când rezultatul cerut este formulat în termenii aplicației. Hullspring este un spațiu de lucru Windows pentru programare cu IA, în care poți analiza această cerință cu proiectul deschis. Cere modelului conectat să inspecteze calculul relevant și codul consumator înainte de a sugera editări, astfel încât propunerea să răspundă unui comportament real, nu doar să rearanjeze o formulă.
De exemplu, un instrument de selecție poate folosi un contur exterior în jurul unui set de puncte. Cere o analiză a influenței punctelor duplicate și coliniare asupra conturului și explică dacă punctele intermediare de pe laturi trebuie incluse în rezultat. Include apelantul care randează și cazuri de test reprezentative. Astfel îi oferi asistentului o sarcină concretă, fără a presupune că Hullspring include vreun instrument de selecție.
Verifică ordinea rezultatului, validarea intrărilor și cazul gol în corecția propusă, precum și forma tipică. Rulează proiectul cu puncte pe o linie, coordonate repetate și un poligon mic. Compară secvența returnată cu așteptările codului consumator; setul geometric corect poate produce totuși o afișare greșită când diferă convențiile de ordonare sau închidere.
Hullspring acceptă conexiuni la modele prin endpointuri compatibile OpenAI sau Anthropic. Poți selecta un model IA cu cenzura eliminată acolo unde este disponibil, dar serviciul său determină restricțiile, capacitatea contextului și instrumentele. Folosește conversația pentru a clarifica alegerile de implementare și bazează verificarea pe cazurile de test ale proiectului.
Pregătirea unei cereri de întreținere a codului geometric
- Punctele coliniare de pe laturi ar trebui păstrate în contur?
Precizează cerința codului consumator. Unele utilizări necesită doar vârfurile extreme, altele păstrează punctele intermediare. Cere modelului să inspecteze convenția actuală și să expliciteze orice schimbare de politică atât în propunere, cât și în teste.
- De ce să includ codul de randare în analiza unui calcul?
Poate aștepta o anumită ordine de parcurgere sau repetarea vârfului de închidere. Calculul poate returna punctele dorite, dar poate încălca acea interfață. Inspectarea consumatorului ajută la evitarea unei regresii vizibile provocate de o corecție locală.
- Ce cazuri de test expun rapid ipotezele?
Folosește un set gol, un singur punct, duplicate, o linie dreaptă și un poligon mic cu un punct interior. Scrie convenția de rezultat așteptată pentru fiecare. Rulează-le în proiect, fără a te baza numai pe o formă desenată.
- Poate o corecție să extindă incidental tipurile de coordonate acceptate?
Tratează asta ca pe o modificare separată a contractului. Reprezentările numerice diferite pot afecta comparațiile și validarea. Întreabă de ce este necesară extinderea și verifică apelanții înainte de a o accepta ca parte a unei corecții geometrice altfel bine delimitate.
Hullspring · Actualizat 2026-10-25