23.01.2012 / 18:30 | |
XakepPRO Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| Первый тур олимпиады был позавчера. Задачи второго тура здесь:
Прикрепленные файлы: DSC02911.jpg (160.32 кб.) Скачано 103 раза DSC02912.jpg (184.15 кб.) Скачано 108 раз DSC02913.jpg (158.38 кб.) Скачано 107 раз DSC02914.jpg (124.13 кб.) Скачано 105 раз DSC02915.jpg (148.26 кб.) Скачано 145 раз |
23.01.2012 / 18:38 | |
XakepPRO Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| Если кому-либо интересна задача о Поврежденной XML строке ( продолжение), могу описать решение. В общем-то в голове появлялась задумка об этом, но почему-то мой мозг отвергал её. Основная идея первого способа решения состоит в том, чтобы сделать обычный перебор исходной строки, постепенно заменяя в ней символы. Длина строки равна 1000, максимальное кол-во разных символов на одной позиции строки равно 26+3=29. (латинские буквы + < + > + /). И того кол-во замен равно... 29 тысяч. За две секунды управиться можно. После каждой замены нужно проверить строку на корректность. (кол-во открытых и закрытых <>, парные теги). Второй способ состоит в том, чтобы пошагово считывать элементы тегов. Т.е, - Открытие тега <- Содержание тега html- Закрытие тега >И смотреть возможные и невозможные символы. Однако последний вариант довольно сложен в написании, так как появляется много условий и т.п. Но он возможен. |
24.01.2012 / 07:48 | |
JUST_IF Пользователь Сейчас: Offline
Регистрация: 30.04.2011
| XakepPRO, ты все таки решил ее Хм, 29 тыс. за 2 секунды? |
24.01.2012 / 18:27 | |
LPzhelud Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| XakepPRO, попробую реализовать брутфорсный метод. Чисто из любопытства: мне кажется, что ты не уложишься во время.
Я бы делал так:
1. Первым делом, надо посчитать количество открывающих и закрывающих скобок. Если они равны - замечательно, переходим к 2, иначе 1.1. Регуляркой (в Java - \<.*?\> ) ищем всё, что подходит под теги, добавляя в список каждый токен, убирая при этом крайние символы. Ошибка в том, что осталось, или в том токене, где содержится < или > 1.2. Ещё на предыдущем этапе можно было создать объекты с параметрами открытия/закрытия и имени тега (для лёгкой ориентации по строке) 1.3. Строим соответствия (это можно было сделать и на 1.1): каждому открывающему тегу, должен соответствовать закрывающий. 1.4. Находим теги без соответствия - ву аля! Соответствующие им (их два) будут в повреждённом токене 1.5. Исправляем ошибочный токен (немного компликативный шаг, может напоминать брутфорс, но всё же не с 29к вариантов)
2. Регуляркой (в Java - \<.*?\> ) ищем всё, что подходит под теги, добавляя в список каждый токен, убирая при этом крайние символы. 2.2. Ещё на предыдущем этапе можно было создать объекты с параметрами открытия/закрытия и имени тега (для лёгкой ориентации по строке) 2.3. Строим соответствия (это можно было сделать и на 1.1): каждому открывающему тегу, должен соответствовать закрывающий. 2.4. Находим теги без соответствия - ву аля! (их будет два) 2.5. Возможны два варианта: это один тег, но с повреждённой "/", это один тег, но с повреждённой несущей частью (<a></b>) 2.6. Исправляем.
Мой план таков)
__________________
Эль Презеденте |
24.01.2012 / 18:48 | |
XakepPRO Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| Реализуешь - протестим. Тесты самые разнообразные.
|
4.02.2012 / 21:10 | |
Melodic Пользователь Сейчас: Offline
Регистрация: 16.09.2011
| Нужен метод для определения столкновения двух прямоугольников. Казалось бы лёгкая задача, но эти прямоугольники могут быть повёрнуты на определённый угол. Как это реализовать?
Изменено Melodic (4.02 / 21:11) (всего 1 раз) |
4.02.2012 / 21:15 | |
XakepPRO Модератор форума Сейчас: Offline
Регистрация: 20.06.2012
| Melodic, Я так понимаю, есть 4 точки (точки верхних левых и нижних правых углов прямоугольников)?
Изменено XakepPRO (4.02 / 21:16) (всего 1 раз) |
4.02.2012 / 21:16 | |
Melodic Пользователь Сейчас: Offline
Регистрация: 16.09.2011
| XakepPRO, есть только x,y и ширина высота + угол на который повёрнут |
4.02.2012 / 21:42 | |
LPzhelud Пользователь Сейчас: Offline
Имя: Коля Откуда: Москва Регистрация: 02.06.2010
| Melodic, мне кажется, что для риалтайма будет медленной эта операция. Но я бы попробовал векторами. То есть определять, есть ли пересечение векторов
__________________
Эль Презеденте |
4.02.2012 / 21:56 | |
Melodic Пользователь Сейчас: Offline
Регистрация: 16.09.2011
| LPzhelud, да ну)) определить пересечение 8 линий съест много цп компьютера?))
|