Найти в Дзене
В Дзене применяются
рекомендательные технологии
Практика Python

Решаем олимпиадную задачу по информатике нестандартным способом

Решим задачу олимпиады по информатике для 9-11 классов с помощью регулярных выражений.

Условия задачи:

Капитан Флинт зарыл клад на Острове сокровищ. Он оставил описание, как найти клад. Описание состоит из строки вида: "17N5E4W2S3E", где: "N", "S", "E", "W", – задает направление движения, а число – количество шагов, которое необходимо пройти в этом направлении.
Программа должна вывести маршрут, ведущий в точку с этими же координатами, записанными в таком же виде, как и во входных данных, но она должна использовать минимальное количество символов.
Для данного примера ответ: 15N4E

Логика решения заключается в следующем: Нужно вычислить, сколько всего шагов шел только на север и сколько шагов он шел только на юг. Выяснить в результате он закопал клад северней начальной точки или нет.

Если да, то шаги на юг, отнимаем от шагов на север, иначе наоборот.

Такие же расчеты мы должны провести относительно движения на запад или восток.

Для решения мы будем использовать регулярные выражения:

Регуля́рные выраже́ния (англ. regular expressions) — формальный язык поиска и осуществления манипуляций с подстроками в тексте, основанный на использовании метасимволов (символов-джокеров, англ. wildcard characters). Для поиска используется строка-образец (англ. pattern, по-русски её часто называют «шаблоном», «маской»), состоящая из символов и метасимволов и задающая правило поиска. Для манипуляций с текстом дополнительно задаётся строка замены, которая также может содержать в себе специальные символы.

Просто говоря нам нужно спарсить с заданной строки нужные нам последовательности символов. Подгружаем модуль re. Будем использовать его метод findall() - который, с помощью регулярного выражения находит нужную последовательность символов в строке.

Регулярные выражения
Регулярные выражения

\d - означает, что мы ищем цифру

\d+ - значит, что мы будем искать одну или более цифр

N - значит, что далее должна стоять буква N

1-й шаг: Парсим направление и значение

таким образом выражение \d+N - указывает, что нужно искать последовательность цифр и следующую за ним букву N.

Также поступаем и с остальными направлениями. Учитывая, что findall() возвращает список, то захватываем полученные значения в списки:

1-й шаг парсинга - код
1-й шаг парсинга - код

Если мы выведем полученные списки на экран, то увидим:

1-й шаг парсинга - вывод
1-й шаг парсинга - вывод

2-й шаг: Парсим только значения

На втором шаге из полученных списков спарсим только значения. Разница заключается в том, что findall() принимает строку, поэтому предварительно приводим списки к строке (если Вы прочитали все наши статьи по основам работы Python, Вы понимаете о чем речь). Результат будем захватывать в другие списки:

2-й шаг парсинга - код
2-й шаг парсинга - код

На данном этапе получим списки со значениями:

2-й шаг парсинга - код
2-й шаг парсинга - код

3-й шаг: Складываем значения направлений в переменные N,S,E,W. Для этого в цикле перебираем списки поэлементно, приводим элементы к числу и по одному прибавляем друг к другу:

3-й шаг - код
3-й шаг - код

После этого мы имеем четыре переменных, хранящими значения направлений:

3-й шаг - вывод
3-й шаг - вывод

4-й шаг: Собираем строку

Собираем строку, которую мы выведем на экран с помощью логики, которую мы описали в начале статьи:

4-й шаг: Собираем строку и выводим на экран - код
4-й шаг: Собираем строку и выводим на экран - код

итак:

 4-й шаг: Собираем строку и выводим на экран - вывод
4-й шаг: Собираем строку и выводим на экран - вывод

Фига себе, не только работает, но и с ответом совпадает!!! (шутка)

Для закрепления материала предлагаю вам:

1. Организовать ввод строки пользователя с консоли

2. Провести рефакторинг кода до 23 строк (сейчас 30)

Рефа́кторинг (англ. refactoring), или перепроектирование кода, переработка кода, равносильное преобразование алгоритмов — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. В основе рефакторинга лежит последовательность небольших эквивалентных (то есть сохраняющих поведение) преобразований. Поскольку каждое преобразование маленькое, программисту легче проследить за его правильностью, и в то же время вся последовательность может привести к существенной перестройке программы и улучшению её согласованности и чёткости.
-10
Что-то пошло не так, и нам не удалось загрузить комментарии. Попробуйте ещё раз
Рекомендуем почитать
Как прошёл ЕГЭ по информатике 2025?
Второй год подряд происходит полный бардак с балансом сложности экзаменов у выпускников, планирующих поступать в технические вузы. Популярнейшая пара информатика + профильная математика второй год подряд удивляет, причём не в хорошем смысле слова. В прошлом году я уже делал обзор на экзамен и на пересдачу. Желающие проследить параллель между двумя годами могут ознакомиться с материалами ниже. Разбираемся с тем, что давали выпускникам на экзаменах в 2025 году. Профильная математика в этом году больно ударила по высокобалльникам...
Итоги ЕГЭ-2025 по математике и немного выводов от меня
В прошлом году я уже предупреждала: первую часть профильной математики оставят легкой, а вот вторую будут усложнять. Что мы и увидели в 2025 году. Да, 1 часть по-прежнему решается уверенно, а вот задания второй части начали «подкручивать» — и это, поверьте, только начало. 📌 Что это значит? Если ты хочешь не просто сдать, а набрать 70+ баллов, начинать готовиться в 11 классе — уже поздно. По верхам «проскакать» не получится. Минимум — начинать в 10-м. А еще лучше — уже в 9-м классе понять: буду сдавать профиль, значит, готовлюсь заранее...
Учебники по абсурду: Топ неадекватных школьных задачек
В наше время не перестают удивлять выдержки, задачки и примеры из свежих учебников, попадающие в социальные сети. В них часто можно найти настоящие "шедевры" ошибок, опечаток и несоответствий в заданиях, что нередко вызывает улыбку. Однако, за этой забавой скрывается более серьезная проблема, ведь именно такие книги формируют знания наших детей. Главное - не забывайте о учебе и воспитании детей. 1. Карандаш, озорники и зубы.. Комбо Больше интересных загадок, классных фокусов, поделок и видео в нашем Telegram канале: 📒 Дневник Родителей...
Следующая статья
Документы, вакансии и контакты