Ссылка на оригинальную статью.
Ссылка на решение задачи на сайте Try Haxe!
Условие:
В заданной строке заменить подряд идущие пробелы на один пробел.
Тесты
Ввод | Вывод | Комментарий |
as fg t | as fg t | Пройден |
rty g uio | rty g uio | Пройден |
Решение:
Будем записывать подходящие элементы в новую строку. Сразу добавим первый символ, он нам подходит вне зависимости от того, пробел он, или нет. Далее просмотрим каждый символ строки, если он нам подходит, запишем в новую строку. Нулевой элемент уже добавлен, поэтому цикл начинается с единицы, что позволяет проверять предыдущий символ без выхода за границы.
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
package qwerty; import neko.Lib; /** * ... * @author Zavada Sergey */ class Main { static function main() { var a : String = Std.string(Sys.stdin().readLine()); var b : String = a.charAt(0); var output = Sys.stdout(); for (i in 1...a.length) { if (a.charAt(i) != ' ' || a.charAt(i) == ' ' && a.charAt(i - 1) != ' ') { b += a.charAt(i); } } output.writeString(Std.string(b) + "\n"); } } |
Сергей Завада недавно публиковал (посмотреть все)
- e-olymp 974. Флойд-1 - 13.06.2017
- e-olymp 1872. Снеговики - 13.06.2017
- A155 - 13.05.2017
Добавьте ссылку на try.haxe
Ссылка на try.haxe добавлена.
Я зачитываю работу, как упражнение.
Но решение мне очень не нравится. Строки в языке Haxe неизменяемые, а значит операция += будет приводить к созданию новой строки. И это будет происходить для каждого символа. Получаем квадратичный расход памяти и времени.