Stáhněte aplikaci
Vyberte složku a před úpravou nechte asistenta přečíst příslušné soubory. Určete cíl i hranice úkolu.
Sestroj konvexní obal proti směru hodinových ručiček z nejvýše 1000 celočíselných bodů od lexikografického minima. Ověř prázdný vstup, duplicity a kolineární body, ponech jen krajní konce a odmítni zlomkové souřadnice.
Vyberte složku a před úpravou nechte asistenta přečíst příslušné soubory. Určete cíl i hranice úkolu.
Zvolte kompatibilní endpoint. Dostupné nástroje a kvalita odpovědí závisí na nastaveném modelu a serveru.
Kontrolujte změny a výstupy příkazů. Před přijetím výsledku spusťte kontroly projektu; vytvořený kód není automaticky otestovaný.
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.
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]Před použitím zkontrolujte. Kontrolujte změny a výstupy příkazů. Před přijetím výsledku spusťte kontroly projektu; vytvořený kód není automaticky otestovaný.