[Complex Conditional Statements] - Задача 12* - Универсално решение
Колеги,ето моето решение накратко - създавам си масив, който съдържа (x1,y1,x2,y2) координати за всеки един правоъгълник, който изгражда фигурата (може да се направят най-различни фигури, просто трябва да се въведат блокчетата в масива). След, което ползвам един forloop за да итерирам всяко блокче и да проверя, къде се намира точката спрямо него, позовавайки се на изброените възможни сценарий:
- ако точка е намерена INSIDE (1), няма нужда от понататъшно търсене -> излизане от forloop-а -> return INSIDE
- ако точка е намерена OUTSIDE (2), проверка дали преди не е била BORDER (3) за някой от другите блокчета (за да не презапишем BORDER стойност, т.е. ако за някое от блокчетата станем BORDER, резултатът няма как да бъде OUTSIDE)
- ако точката не е нито INSIDE, нито OUTSIDE, то тя остава да е BORDER (4). Тук има един тънък момент - ако точката преди е била BORDER за някой/и от блокчетата -> сме открили, че тя лежи на общ ръб, т.е. има два равиянта да е върху крайщата на ръба (VERT) или по самата му дължина (EDGE). Ако е първият случай - return BORDER (5), ako e вторият - return INSIDE (6)
Source code: http://pastebin.com/xXiCXugy
Надявам се да съм помогнал и да ви е интересно. Би трябвало да работи със каквато и фигура да се построй от правоъгълници в равнината, но не съм го тествал. Ако някой намери начин да се намали още решението да споделя. :)
Да попитам по-напредналите колеги.
А с досега предадения материал, може ли да се определи най-добро решение?
Най-добро като бързодействие и минимален обем памет за програмата. :)
Някой тук беше писал, че не винаги най-краткият програмен код е най-добър.
В тази връзка, би могло да се допълни отчета в judge да включва освен брой точки и време за изпълнение
и заемана памет, както и да се приложи сортировка върху данните, при което моят въпрос
ще получи и някакво решение. :)