Loading...
gvanastasov avatar gvanastasov 52 Точки

[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

Надявам се да съм помогнал и да ви е интересно. Би трябвало да работи със каквато и фигура да се построй от правоъгълници в равнината, но не съм го тествал. Ако някой намери начин да се намали още решението да споделя. :)

Тагове:
-1
Programming Basics 10/02/2016 15:51:31
KaloyanGanchev avatar KaloyanGanchev 17 Точки

Евала за решението - оригинално и работещо.

А аз написах толкова много логически съюзи... Браво!

1
pebodi avatar pebodi 29 Точки

Да попитам по-напредналите колеги.

А с досега предадения материал, може ли да се определи най-добро решение?

Най-добро като бързодействие и минимален обем памет за програмата. :)

Някой тук беше писал, че не винаги най-краткият програмен код е най-добър.

В тази връзка, би могло да се допълни отчета в judge  да включва освен брой точки и време за изпълнение

и заемана памет, както и да се приложи сортировка върху данните, при което моят въпрос 

ще получи и някакво решение. :)

-1
10/02/2016 16:49:42
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.