От Интернет, батка!
Задача #4 от конкурса на Telerik и PC Magazine Bulgaria, сезон 2012/2013
Не много отдавна, в една никак неотдалечена галактика, двама даджаи обмисляли как да оптимизират навигацията в сайта на Академията на Телерик. Вокан и Орож, уморени от дългото мислене върху тази задача, решили да разнообразят малко нещата, като си направят едно “даджайско състезание”. Те решили да изберат два произволни URL адреса (сочещи само към страници, свързани с Академията на Телерик – от официалния сайт, YouTube канала, студентската система и сайта на конкурса по програмиране) и да се състезават кой по-бързо ще успее да “стигне” от единия адрес до другия, единствено ползвайки хиперлинкове за “придвижване”. В едно от състезанията, Орож решил да си помогне, като генерира sitemap на сайта, в който били двата хиперлинка. Операцията била бавна, но когато завършила , Орож се ориентирал по-бързо от обикновеното. Когато показал тази хитрина на Вокан, той казал “Ахахахааа, откъде го взе това”, а Орож отговорил “От Интернет, батка!”.
Въпреки интересната случка, Вокан и Орож все още не били доволни – този sitemap бил приблизителен ориентир. Те искали бърз отговор, съдържащ всички хиперлинкове от пътя, по който трябва да се мине, за да се стигне от една страница до друга страница – ако такъв път изобщо съществувал. Готови ли сте да помогнете на Вокан и Орож, като откривате страниците, свързващи 2 други страници в мрежата от страници, свързани с Академията?
Съдържание:
- Описание на “Даджайско състезание”
- Алгоритмична задача
- Приложна задача
- Критерии за оценяване
- Допълнителни изисквания
- Характеристики на тестващата машина
- Краен срок
Описание на “Даджайско състезание”
Както е описано по-горе, даджайското състезание представлява задача за намиране на път между 2 уеб страници, който се състои от хиперлинкове (хипервръзки/препратки…) – като допълнително, пътят трябва да има възможно най-малка дължина (защото може да има повече от един път). Дължина на пътя ще наричаме броя хиперлинкове, които един даджай трябва да кликне, за да стигне от началната до крайната страница включително.
По-формално, за всеки две страници A и B ще казваме, че A е свързана към B, ако някъде в страница A има поне един хиперлинк, препращащ към страница B. Съответно път от страница X до страница Y ще наричаме такава поредица от N страници, в която страница[1] = X, страница[N] = Y и за която всяка страница[i] е свързана със страница[j], където i е в интервала [1, N-1], a за j винаги е изпълнено j = i+1. Дължината на този път е точно равен на N-1 (ако имаме 2 страници в пътя – само начална и крайна – тогава дължината на пътя ни е точно 1)
За хиперлинковете, които могат да се ползват за придвижване, важат следните правила:
- Хиперлинковете са валидни anchor тагове в изходния HTML код на страницата, с валидни href атрибути, състоящи се от URL на страница (по-долу ще видите и характеристики за страниците).
- Примери (ползвайте Inspect Element на браузъра си): Сайт на Академията Релативен линк към страницата за регламента на конкурса
- Хиперлинковете НЕ Е възможно да бъдат генерирани от изпълнението на код при клиента (напр. JavaScript който добавя линкове)
- НЕ СЕ СЧИТАТ за хиперлинкове URL адреси в чист текст. Например този текст: http://academy.telerik.com НЕ Е хиперлинк
Всички страници от пътя, включително началната и крайната, задължително трябва да бъдат от следните:
- Страници в academy.telerik.com
- Публично достъпни страници (т.е. видими без нужда от логване в системата) от telerikacademy.com
- Страници в konkurs.devbg.org
- От YouTube канала на Академията:
- Всички страници на плейлисти
- Всички страници на видеа
Уточнение за YouTube канала:
НЕ Е разрешено ползването на други страници от YouTube – например главната страница на канала (забележка: този линк има няколко разновидности), списъкът с всички плейлисти, списъкът с всички видеа и т.н. – НЕ могат да бъдат страници в пътя.
Също така, НЕ всички хиперлинкове от страниците на видеата и страниците на плейлистите могат да бъдат ползвани. Ето и допълнителните изисквания за хиперлинковете от позволените страниците в YouTube канала:
- За страници на видеа:
- могат да бъдат ползвани само и единствено хиперлинкове, намиращи се в елементи с атрибут id=”eow-description” (#eow-description), тоест в описанието на видеото
- За страници на плейлисти
- могат да бъдат ползвани само и единствено хиперлинкове, намиращи се в елементи с атрибут class=”primary-pane” (.primary-pane), тоест хиперлинкове към видеа от съответния плейлист
Уточнение за Студентската система на Академията на Телерик (http://telerikacademy.com)
Разрешено е ползването на почти всички страници и хиперлинкове, при условие че те са видими без профил в системата – т.е. това което е видимо, когато потребителят не се е логнал.
НЕ Е разрешено, обаче, ползването на хиперлинкове, които се намират в някои елементи на главната страница:
- Не е разрешено ползването на хиперлинкове от елемент с атрибут id=”fb0021a1c” (Facebook plugin)
- Не е разрешено ползването на хиперлинкове от елемент с атрибут id=”RecentVideoHeader” (“Последни видео материали”)
- Не е разрешено ползването на хиперлинкове от елемент с атрибут id=”ForumPostsHeader” (“Последни форум постове”)
- Не е разрешено ползването на хиперлинкове от елемент с атрибут id=”BlogPostsHeader” (“Най-нови блог постове”)
- Не е разрешено ползването на хиперлинкове от елемент с атрибут id=”IndexCalendarHeader” (“Календар”)
Уточнение за сайта на Конкурса по програмиране (този сайт)
Всички страници от сайта на конкурса могат да бъдат ползвани, като единствено НЕ Е разрешено ползването на хиперлинкове, намиращи се в коментари към някоя от темите. Тоест, не е разрешено ползването на хиперлинкове намиращи се в елемент с атрибут id, започващ с “comment-“.
Алгоритмична задача
Алгоритмичната задача за този кръг отново ще бъде разделена на две части – една за създаване на алгоритъм и една за генериране на тест.
Задача за алгоритъм за намиране на най-кратък път по хиперлинкове между две страници
Напишете алгоритъм, който по дадени URL адреси на начална и крайна страница, намира най-краткия път между тези две страници по описаните правила и отпечатва хиперлинковете, които е използвал за да измине този път.
Всички тестове ще се провеждат, като се взема предвид състоянието на абсолютно всички страници, които потенциално могат да участват в някой път (спрямо условието на задачата) от дата 6 април 2013 г. Това означава, че ако в отговорът на някой алгоритъм се генерира път, в който участват страници или хиперлинкове, появили се след 23:59:59 на 6 април 2013 г., този отговор ще бъде счетен за невалиден и алгоритъмът ще получи 0 точки за съответния тест!
Забележка 1: ако 2 поредни страници са свързани с повече от един хиперлинк, за тях трябва да бъде изведен точно един от свързващите ги хиперлинкове.
Забележка 2: два хиперлинка може да изглеждат различно, но да сочат към един и същи ресурс – например https://konkurs.devbg.org/rules/#contest-description и https://konkurs.devbg.org/rules/.
Задача за генериране на тест – начален и краен URL адрес, между които да бъде намерен път
Напишете входни данни, в описания по-долу формат за входни данни, които описват стартов и краен URL, между които да бъде намерен път. Както е описано по-долу, задължително е такъв път да съществува. Входните данни трябва да бъдат валидни и в описания по-долу формат, в противен случай тестът няма да бъде вземан предвид.
Входните данни трябва да бъдат записани в стандартен текстов файл (.txt) с ASCII кодировка, който може да бъде преглеждан в Windows среда чрез текстов редактор Notepad. За примери може да видите тестовите файлове публикувани за предишни кръгове на задачата (публичното хранилище на състезанието е на този адрес: http://downloads.academy.telerik.com/svn/pc-magazine/Public/)
Предаването на теста ще става чрез поставянето му в папката algorithm, наред с изпълнимия файл за алгоритмичната задача. Файлът трябва да бъде именован както е името на потребителя, който го е изпратил (например ако потребителят е george.s.georgiev, то файлът трябва да носи името george.s.georgiev.txt).
При тестването, входните данни от теста ще бъдат подадени на всеки един алгоритъм, включително и на алгоритъма на автора.
Входни данни
Входните данни се въвеждат от стандартния вход (конзолата).
Входните данни се състоят от точно два реда, на всеки от които има по един низ от символи.
На първият ред стои низ с URL на страницата, от която трябва да започва пътят (т.е. първата страница).
На втория ред стои низ с URL на страницата, в която трябва да свършва пътят (т.е. последната страница).
Във всички тестове задължително ще съществува път между двете страници.
Във входните данни НЕ може да се съдържа символът # (диез)
Входните данни ще бъдат винаги валидни и в описания формат.
Изходни данни
Изходните данни се извеждат на стандартния изход (конзолата).
Изходните данни се състоят от редове, като на всеки ред е изписан по точно един URL. Този URL е стойността на href атрибута на съответния <a> елемент, който свързва две поредни страници в пътя. href атрибутът не трябва да бъде променян спрямо първоначалния му вид в съответната страница.
Например ако от страница A към страница B имаме хиперлинк, чиито код е <a href=”http://example.com/B#some-element-id”>link</a>, тогава на съответния ред от изходните данни трябва да стои низът http://example.com/B#some-element-id.
Алгоритъмът трябва да изпечата точно толкова редове с низове, колкото хиперлинка е ползвал в най-краткия път между зададените начална и крайна страница.
Допълнителни ограничения
- Всички тестове ще се провеждат, като се взема предвид състоянието на абсолютно всички страници, които потенциално могат да участват в някой път (спрямо условието на задачата) от дата 6 април 2013 г. Това означава, че ако в отговорът на някой алгоритъм се генерира път, в който участват страници или хиперлинкове, появили се след 23:59:59 на 6 април 2013 г., този отговор ще бъде счетен за невалиден и алгоритъмът ще получи 0 точки за съответния тест!
- Във входните данни НЕ може да се съдържа символът # (диез)
- В изходните данни, ако алгоритъмът е избрал хиперлинк с #, то както е по условие, този диез трябва да бъде изпечатан. Тестващата система ще съобразява, че URL с диез сочи към същата страница, към която и URL без диеза и низът след него
- От 00:00:00 до 23:59:59 часа на 6 април 2013 г. няма да бъдат правени промени (или добавяне/премахване) на хиперлинкове в която и да било страница, която според условието е възможно да участва в който и да е път.
- За всички тестове ще съществува път между началната и крайната страница
- Интернет връзката на тестващата машина няма да бъде спирана, но не можем да гарантираме за скоростта и надеждността ? (нито пък за всички сървъри, на които се намират потенциални участващи в различните пътища страници). Ползването на Интернет връзка (и съответно обновени ресурси, които са в разрез с първата точка от тези ограничения) е риск, който състезателите могат да преценят дали да поемат
- Ако някой от ползваните от алгоритъма URL адреси не съществува на съответните страници, алгоритъмът ще получи 0 (нула) точки за съответния тест
- Ако последователността от изведените от алгоритъма URL адреси не води до зададената крайна/последна страница, алгоритъмът ще получи 0 (нула) точки за съответния тест
- Програмата трябва да завършва своята работа за най-много 5 секунди. След изтичане на времето програмата ще бъде спряна автоматично.
Примери
С тези примери ще онагледим правилно форматиран вход и изход. Примерите имат за цел само да покажат правилния формат, а не да дават оптимално решение на задачата.
Примерен вход |
---|
https://konkurs.devbg.org
http://academy.telerik.com/school-academy/meetings/details/2012/11/22/databases
|
Примерен изход |
---|
https://konkurs.devbg.org/submit/
http://telerikacademy.com/Courses/Courses/Details/13
http:?/?/?academy.telerik.com/?
school-academy/meetings
meetings/details/2012/11/22/databases
|
Пояснение: Първо отиваме в страницата за “качване” където има линк към студентската система, оттам намираме линк към academy.telerik.com (в секцията “Полезни линкове”), откъдето пък в секция Училищна Академия избираме Уроци и оттам – линка за срещата за бази данни, която ни е целта.
Примерен вход |
---|
http://www.youtube.com/watch?v=AoewJHW9Oqc
http://academy.telerik.com/
|
Примерен изход |
---|
http://academy.telerik.com/
|
Пояснение: Намираме се в страница с видео, в чието описание има директен линк към страницата на Академията, отпечатваме го и приключваме работа.
Приложна задача – визуализация на възможните за достигане страници от стартова страница
Напишете програма, която по дадена начална страница от гореописания вид генерира визуализация на всички страници, които могат да бъдат достигнати чрез движение по хиперлинкове от нея. Програмата трябва да приема входни данни за начална страница, да обхожда достижими от нея страници, да визуализира тези страници и връзките ? с началната – било то чрез обект представящ всяка страница и връзки между страниците (както е показано тук, но с по-детайлни “върхове”), или чрез дърво подобно на файловата система, или чрез контроли които позволяват семантично приближение (semantic zoom) за наблюдение на общата картинка или на детайли от нея, или чрез 3D свят в който страниците са свързани летящи обекти и т.н. – вариантите са много. Важното е ясно и удобно да се виждат местата, до които е възможно да се стигне и как те са обвързани с началната страница. Програмата трябва да има възможност за настройка на дълбочината на визуализацията (т.е. колко далеч от началната страница да се стига) и да има опция за работа в Интернет и извън нея (върху предварително изтеглени данни).
Обобщено, приложението трябва да поддържа:
- Въвеждане на начална страница
- Настройване на търсенето и генерирането
- Генериране на визуализация
- с възможност за навигация между визуализираните страници
- Online и Offline режим на работа
Начинът на имплементация и технологиите, които могат да бъдат ползвани не са строго определени, с цел участниците да имат свобода и да проявят творчество и оригиналност. Възможно е добавяне на нови функционалности в приложението.
Приложението може да бъде уеб, десктоп, както и WinRT-базирано. Единственото ограничение е да бъде изпълнимо под Windows 7 или Windows 8 и да бъде предоставен лесен начин за стартирането му в папката application.
Критерии за оценяване
Оценяване на алгоритмичната част
При оценяването ще бъдат генерирани тестове от журито, с различни начални и крайни страници, по описаните правила. Освен това, ще бъдат ползвани коректните тестове пратени от участниците. Тежестта ще бъде 50 на 50, тоест тестовете на журито ще носят общо толкова точки, колкото общо тестовете предадени от участниците.
- Данните от всеки тест на журито, както и данните от всеки тест на участниците, ще бъдат подадени на всеки един предаден алгоритъм.
- За всеки тест ще се намира най-добрия резултат на алгоритъм и той ще получи максималните точки за този тест, а останалите ще получат съответния процент от тези точки за този тест (т.е. скалирането се извършва за всеки тест).
- Например, ако за задачата има 10 теста от които 5 са на състезатели и 5 на журито, то всеки ще носи по 1 точка.
- Ако на първото поле най-добре представилият се алгоритъмът G е намерил път с дължина 10
- алгоритъмът M е намерил път с дължина 15,
- а алгоритъмът L е намерил път с дължина 30, то
- в крайна сметка точките за този тест (закръглени до 2 цифра след десетичната запетая) са:
- G: 1 точка
- M: 0.67 точки = 1/(M/G) = 1/(15/10)
- L: 0.33 точки = 1/(L/G) = 1/(30/10)
- По същия начин се оценяват всички тестове, точките се сумират и след това се закръглят до цяло число
- Ако след сумирането няма резултат 10 точки, се извършва скалиране на всички резултати (преди закръглянето), така че най-добре представилия се да получи 10 точки, а останалите – съответната част от тези точки, и след това се извършва закръгляне
- Максимални точки в крайното класиране за алгоритмичната част: 10
Оценяване на приложната част
Оценяването на приложната задача ще се извърши по-следните критерии:
- Коректност (доколко са имплементирани посочените функционалности) – 2 точки
- Справяне с грешки (справяне с некоректно поведение и непредвидени ситуации) – 2 точки
- Ползваемост (доколко е удобна и интуитивна е работата с приложението) – 2 точки
- UI дизайн (доколко е приятно визуалното оформление на приложението) – 2 точки
- Оригинални функции и решения, които да впечатлят журито – 2 точки
- Максимални точки в крайното класиране за приложната част: 10
Допълнителни изисквания
Задачите позволяват използването на различни езици за програмиране и технологии (например C#, PHP, C, C++, Delphi, Python, WPF, Windows Forms, Java, Swing, Flash, JavaScript, HTML5). Всички предадени решения ще бъдат тествани в Windows 7 среда съгласно общите условия на конкурса.
За алгоритмичната част се изисква да бъде предаден пълен сорс код + изпълним файл за Windows (.exe). Ако програмирате на език, който по природа не създава изпълними .exe файлове (например PHP, Python, Java или JavaScript), използвайте подходящ компилатор (потърсете в Интернет).
За приложната част се изисква да бъде предаден пълен сорс код + изпълним файл. Състезателите имат право да изберат начина, по който тяхното приложение ще бъде стартирано, така че това да е удобно в Windows среда (приложението може също да бъде web-базирано и да се отваря през браузър). Тъй като оценяването на приложната част ще бъде извършвано и от гледната точка на потребител (а потребителите искат да стартират едно приложение възможно най-бързо и лесно), сериозни затруднения при намирането и стартирането на приложението могат да намалят присъдените от журито точки.
Характеристики на системата, върху която ще бъде проведено тестването
- Intel® Xeon® CPU E31225 @ 3.10 GHz
- 16 GB RAM
- 128 MB Video Memory (dedicated) Intel® HD Graphics video card
- Стандартна резолюция на тестващате машина: 1680×1050
- Журито може да прецени да смени резолюцията при тестване на някои приложения
- 232 GB HDD
- Microsoft Windows 7 64-bit OS
- за предалите приложна част на WinRT, тестването на приложната част ще бъде извършено на система с минимални характеристики OS Windows 8 64-bit, 6 GB RAM, Intel i7-720QM, 1GB ATI Mobility Radeon HD 4250.
Краен срок
Краен срок за предаване на решения: 7 април 2013 г, 23:59:59 часа.
Решенията се предават в студентската система на Академията на Телерик, на адрес http://telerikacademy.com/Courses/Courses/Details/13 според инструкциите, описани в раздела “Качи решение” на официалния сайт на състезанието.
pemmpty
March 6, 2013
Това ли ще се “критериите за оценяване” – виждат ми се същите както при 3-та задача,а в условието на настоящатата задача ми се струват други изискванията 🙂
admin
March 7, 2013
Да, първото изречение не беше на място и го коригирахме, но действително критериите са същите като за 3-та задача – отново има тестове от вас, участниците, отново и ние ще генерираме тестове и отново ще ползваме скалиране за всеки тест. Тоест, същата история, само че с различно съдържание на тестовете. Приложната част също ще бъде оценявана по същите критерии – те са достатъчно абстрактни, за да не е нужно да се съчиняват наново за всяка задача : ) . Сигнализирайте ако забележите и нещо друго нередно (в стила на първото изречение) : )
gregkolev
March 7, 2013
Даджаите Наков и Жоро :D, добра врътка… иначе
“Забележка 2: два хиперлинка може да изглеждат различно, но да сочат към един и същи ресурс – например” не е довършено
admin
March 7, 2013
Разшифрова го, а 😀 . Сега ще оправим и “например”-а, мерси : )
laz0
March 7, 2013
От това да разбирам ли, че двата линка трябва да ги приемаме като еднакви. Тоест във входа е написано, че трябва да се стигне до “http://konkurs.devbg.org/rules/#contest-description”, ние намираме линк до “http://konkurs.devbg.org/rules/”, хвърляме го на изхода и всичко е идеално? Или не е идеално?
А за оценяването на алгоритъма, ако един намери път с дължина 2, другия с дължина 4 и третия с дължина 7, съответно кой какви точки ще получи? Този с 2 взима 10т., този с 4 взима 10/(4/2) = 5т., 7 – 10/(7/2) = 2.86т. Правилно ли го смятам, че от примера с 30,15,10 ми е малко объркано.
admin
March 7, 2013
Началният и крайният URL няма да съдържат #, сега ще го добавим в ограниченията. Иначе формулата ти е вярна, ще преформулираме критериите за оценяване за да е по-ясно.
pemmpty
March 7, 2013
“Програмата трябва да има възможност за настройка на дълбочината на визуализацията (т.е. колко далеч от началната страница да се стига).”
Ако приемем, че страниците достигнати директно от дадената ни страница са с отдалеченост 1, то има ли някаква задължителна стойност на отдалеченост, до която минимум трябва да работи приложението ни (ако е налична такава) – 5, 10, 20 или трябва да има настройка да може се достигна до най-отдалечената страница, независимо, че в някои случаи това може да е 1, в други 20+;
admin
March 7, 2013
Би трябвало да работи до пълна дълбочина, защото тя не е твърде голяма за дадените сайтове. Приемете го като stress test за визуализацията и обработката. Настройката за дълбочина вече е за да видим как визуализира при различен брой елементи (защото иначе можете и да го hardcode-нете) : )
Слави Георгиев
March 8, 2013
Здравейте! Имам няколко въпроса, на които бих искал да доуточня дали съм разбрал правилно условието. Първо, нали не трябва да извеждаме дължината на пътя? Второ, дали някой адрес е с котва или не всъщност няма значение за страницата, но трябва да го изведем така, както е в href атрибута. И последно, съдейки по пояснението на първия пример, според мен между адресите http://telerikacademy.com/Courses/Courses/Details/13 и http:?/?/?academy.telerik.com/?
school-academy/meetings
meetings/details/2012/11/22/databases са изпуснати адресите http://academy.telerik.com/ и http://academy.telerik.com/school-academy/meetings в примерния изход, а и адреса http:?/?/?academy.telerik.com/?
school-academy/meetings
meetings/details/2012/11/22/databases трябва да се коригира в http://academy.telerik.com/school-academy/meetings/details/2012/11/22/databases. Правилно ли се ориентирам?
admin
March 12, 2013
Здравей, дължината на пътя не трябва да се извежда, както сам си забелязал. За адресите също – за теб важна е само частта, която сочи към страницата, а за проверяващата система е важно да изкараш хиперлинка, точно както е в href атрибута (т.е. системата ще проверява има ли такъв хиперлинк). За последния ти въпрос – не съм сигурен, но мисля че не четеш примера добре. Всички URL-и които си написал ги има (само че някои не са абсолютни, а релативни) – всеки ред е отделен URL, т.е. имаме общо 5 хиперлинка за всяка една стъпка от описанието. Пиши пак ако не сме те разбрали правилно : )
Слави Георгиев
March 13, 2013
Сега напълно разбрах примера. Видях, че в кода на страниците адресите са относителни. Изясниха ми се нещата 🙂 Благодаря!
Невена
March 12, 2013
Има ли вероятност един линк да сочи към страница, която препраща към друга страница, която дори би могла да е търсената страница?
admin
March 13, 2013
Има, да, напълно е възможно.
Невена
March 14, 2013
Тогава ако имаме начало А и търсим Б, и в един момент стигнем до линк К, който ни препраща към Б, в този случай какъв трябва да е последния ред от изхода – К или Б? Според условието трябва да е К, нали?
admin
March 15, 2013
K трябва да е, да 🙂
pemmpty
March 13, 2013
Здравейте, за приложението важи ли, че визуализираната информация трябва да е до 6 април.
Какво се случва с линкове като тези, които са на WordPress и други подобни, напълно ли се игнорират или се показват, че ги има без да се изследва на къде водят.
И малко доуточнение, при задаване на начална страница – да кажем (http://konkurs.devbg.org/task-4-season-2012-2013/), и имаме пълна дълбочина : ние ще обходим всички страниците на pcmagbg.net, ще има препратки към telerikacademy / academy.telerik (и те ще бъдат обходени и визуализирани), същото и с youtube.
Реално при пълна дълбочина общата картина, независимо от къде сме тръгнали е една и съща (ако не говорим за някво специално означение, коя ни е началната старница) – те връзките си ги има. Оттук вече ще режем до определен брой “отдалеченост” с настройката за дълбочина.
Така ли трябва да обхождаме всчики сайтове, или само конкретния в който се намира страница, от която се почва.
admin
March 13, 2013
В приложението няма ограничение за датата на визуализация (ако искаш може и в реално време да го генерираш, но не е препоръчително, защото е доста бавно), както и за другите неща, които си споменал. Тоест, може да бъде направено както смятате че ще е най-полезно. Както си отбелязал, картинката често ще е една и съща – затова може да помислите за обозначения на начална страница, за менюта за зареждане на външни страници (например виждам, че има линк към навън, но не виждам как изглежда страницата към която сочи, защото ще е твърде бавно да обхождате целия Интернет – но пък имам бутон върху линка който казва “зареди” и програмата смята известно време и го показва – има какво да се измисли 😉 ). Ако искате можете да пробвате да извеждата семантична информация за това как една страница се отнася към всички останали и т.н. – бъдете креативни : )
Antony Jekov
March 13, 2013
Здравейте,
Имам един въпрос за изходните данни. Грешно ли е ако ги изкараме в пълен вид, като визирам горепосочения пример:
http://konkurs.devbg.org/submit/
http://telerikacademy.com/Courses/Courses/Details/13
http:?/?/?academy.telerik.com/?
http:?/?/?academy.telerik.com/?school-academy/meetings
http:?/?/?academy.telerik.com/?school-academy/meetings/details/2012/11/22/databases
admin
March 13, 2013
Не е правилно, тъй като по условие трябва да печатате само и единствено съдържанието на href атрибути (изключение са началният и крайният URL)
Antony Jekov
March 15, 2013
Здравейте,
Още 2 въпроса 🙂
1. Линка за регистрация на тази страница – http://academy.telerik.com/algoacademy/training-8-9-March-2012 със адрес “/algoacademy/registration” е счупен и не води на никъде. Трябва ли да прескачаме подобни линкове или да ги докладваме?
2. Заради препратките се получават повече страници от колкота са – http://academy.telerik.com/academy == http://academy.telerik.com/academy/about
Трябва ли да имам решение и за двата варианта, или само за втория, тъй като първия не е на практика достъпен(винаги бива пренасочен към втория).
admin
March 15, 2013
Здравей, относно първия ти въпрос – щом линка не води на никъде той няма как да е решение на задачата. Иначе в приложната част можеш да го отбележеш. За втория въпрос – в тестовете ще ползваме само “крайните” страници, т.е. резултатите на препратките, а ти трябва да извеждаш единствено съдържанието на href атрибутите. Тоест ако трябва да достигнеш до http://academy.telerik.com/academy/about а имаш последен href=”http://academy.telerik.com/academy”, тогава последното нещо, което извеждаш е стойността на href-а, т.е. http://academy.telerik.com/academy
Милен
March 19, 2013
Здравейте,
имам един въпрос относно характеристиките на машината на която ще бъде тествана алгоритмичната част от задачата. Към мрежата в която ще бъде вързана тя ще има ли конфигурирано proxy и ако да то ще можем ли му знаем името и порта?
admin
March 25, 2013
Здравей, имаш достъп до мрежа, която разрешава само портове 80 и 443. Нямаш достъп до прокси и ще трябва да се ограничиш само до тези 2 порта.
Antony Jekov
March 31, 2013
Здравейте,
Още малко въпроси 🙂
Разбирам, че съдържанието на anchor таговете трябва да бъде извеждано както е, но не мога да разбера някои от следните неща, свързани с входните данни:
1. Трябва ли да заменяме ” ” разстоянията със %20 за адреси, които съдържат разстояния?
2. До колко повторения е нормално да има за един адрес – пример:
http://academy.telerik.com/student-courses/archive/web-design-html-5-css-3-javascript/video (0 повторения, video присъства 1 път)
и
http://academy.telerik.com/student-courses/archive/web-design-html-5-css-3-javascript/video/video/video/video/video/video/video/video/video/video (9 повторения, video присъства 10 пъти), а и двете са една и съща страница на практика.
Безопасно ли е да се предположи, че не може да има повече от 1 повторение, тъй като в сайта на telerikacademy.com има страници, които по начало са с едно повторение – преимер:
http://telerikacademy.com/Courses/Courses/Details/30 (Courses се повтаря 1 път)
или би било по-добре да се допуска само там и не за другите сайтове, тъй като ако позволя на academy.telerik.com да има повторения става мазало?
3. Как да се отнасяме към адресите използващи кирилица? Трябва ли да ги запазваме със реалното им име или със това, което браузера конвертира – пример:
http://konkurs.devbg.org/%D0%BD%D0%B0%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D1%85%D0%BC%D0%B5-%D1%88%D0%B0%D0%BC%D0%BF%D0%B8%D0%BE%D0%BD%D0%B8%D1%82%D0%B5-%D0%BE%D1%82-%D0%BF%D1%8A%D1%80%D0%B2%D0%B8-%D0%BA%D1%80%D1%8A%D0%B3-%D0%B7/mihail-gochev/
е всъщност
http://konkurs.devbg.org/наградихме-шампионите-от-първи-кръг-з/mihail-gochev/
При евентуално разминаване по този въпрос би било невъзможно да се отговори на подадени входящи данни. Аз може да съм задазил адреса на страницата на кирилица, а да ме питат за първата версия?
4. Може ли крайната дестинация да бъде файл, като .pdf, .pptx и т.н.
5. Валиден ли е адреса съдържащ http://academy.telerik.com/./news, защото подобни адреси ми излизат като съществуващ и ме препращат към същото, но без /./
6. Валидни ли са адреси, съдържащи “?” във тях, които не са от youtube? Примери:
http://academy.telerik.com/?utm_source=site&utm_medium=banner&utm_content=468×60&utm_campaign=community – на практика това е главната страница на академията…(има хиляди такива страници…)
http://academy.telerik.com/news/?tagName=seminarsNews – тази страница зарежда новини, но не е същата като http://academy.telerik.com/news/, демек има смисъл от съществуването й може би?
Ако изключа чрез филтера си страниците с “?” в адреса, който не са от YouTube, получавам определен брой страници общо от 3те посочени сайта. Без филтера обаче са неизвестен брой, тъй като ги спрях след 20 000ната, тъй като вече имаше страници от типа …/video/video/video/video както и хиляди от типа ?utm от всички разновидности и размери на банерите…
7. Против правилата ли би било да ни дадете някаква ориентировъчна приблизителна бройка на страниците?
Извинявам се за дългия пост, но най-много ме притесняват входните данни и това кои страници да ползвам и кой не.
Благодаря за отделеното време!
admin
April 5, 2013
Здравей, извинявай за късния отговор.
За първия ти въпрос – не би трябвало да съществува href равен на нещо, съдържащо интервал – поне в нашите страници.
За голяма част от другите ти въпроси – нужно е да вземаш предвид само и единствено страници, до които можеш да стигнеш чрез хиперлинковете в други страници от изброените. Тоест безопасно е да се твърди, че ако съхраниш абсолютно всички хиперлинкове от всички избрани наши сайтове, то входните данни които ще получиш задължително ще са от съхраненото.
Относно кирилицата – би следвало да можеш да реагираш и на кирилица и на конвертираната репрезентация. За изходните данни ще приемаме и двете представяния за верни.
Крайната дестинация няма да бъде файл.
Ако сме пропуснали нещо в отговора, питай пак, но вземи впредвид това за невъзможността на входните данни да са нещо различно от страници, до които се стига с хиперлинкове от други страници.
Krasimir Nikolov
April 4, 2013
Предполагам, че тук има грешка. В хедърите няма линкове а в техния родител. Например id=”RecentVideo”
Не е разрешено ползването на хиперлинкове от елемент с атрибут id=”RecentVideoHeader” (“Последни видео материали”)
Не е разрешено ползването на хиперлинкове от елемент с атрибут id=”ForumPostsHeader” (“Последни форум постове”)
Не е разрешено ползването на хиперлинкове от елемент с атрибут id=”BlogPostsHeader” (“Най-нови блог постове”)
Не е разрешено ползването на хиперлинкове от елемент с атрибут id=”IndexCalendarHeader” (“Календар”)
admin
April 6, 2013
Да, прав си. Утре също няма да бъде променян нито един от изброените сайтове, така че ако има нужда можете да crawl-вате и да си пълните “базите” и утре 🙂
Krasimir Nikolov
April 6, 2013
Само да не ни блокира Youtube, че вече ми хвърля предупреждения. 🙂
Antony Jekov
April 6, 2013
За да не ми хвърля предупреждения от YouTube, които да ми объркат паяка си пускам някой много дълъг клип, да речем 10 часа музика някаква и то постоянно дърпа по малко и така вече не ми мрънка, че правя много заявки. Не съм на 100% сигурен, че това е което помага, само знам, че преди ме предупреждаваше, а сега си трае 🙂
Успех!
pemmpty
April 10, 2013
Здравейте, изпратихме aplication, но днес се усещам, че е без файл за авторите(facepalm). Не че очаквам, някакви солидни точки(работата е недовършена), въпреки желанието ни в началото в последствие се наложи да скипнем тази задача :(, но все пак изпратеното да не седи така от unknown author. Не знам дали се вижда, чрез система, но авторите сме същите, каквито и до сега сме предавали и предните задачи.
В приложението, в секцията “за нас” има линкове към профилите ни в Академията. Ако не участваме в класирането, грешката си е наша – може би и за добро 🙂
admin
April 10, 2013
Да, теб сме те добавили, ама сме пропуснали да добавим колегата ти. Сега ще го коригираме – иначе резултатите вече излязоха : )
pemmpty
April 10, 2013
Да, тъкмо ги разглеждам. Благодаря : )
Очаквам с интерес и обновлението на генералното класиране 🙂
Поздравления за Antony, доста се е потрудил. Дано в следващия кръг повече отбори да имаме възможност се включим пълноценно 🙂