Почти в каждом языке есть встроенная функция, которая может разбивать строку в заданной позиции. Однако, как только в строке есть html-теги, встроенная функция не будет работать должным образом.
Ваша задача - написать программу или функцию, которая разбивает строку на n-й символ, но не считает символы тегов html и выведет действительный html. Программа должна сохранять форматирование. Пробелы за пределами HTML-тегов могут быть подсчитаны или не подсчитаны, как вы хотите, но должны быть сохранены. Однако вы можете заменить несколько последовательных пробелов в один пробел.
Входные данные:
- Струна
- позиция для разделения (на основе 0)
Они могут быть приняты в качестве аргументов программы или функции или могут быть прочитаны из стандартного ввода.
Вывод: Разделенная строка, которая может быть возвращена или записана в стандартный вывод.
Ввод будет действительным html, он не будет содержать никаких объектов (таких как
). Теги, которые открываются после ограничения количества символов, должны быть опущены в выводе (см. Последний пример).
Пример:
Входной сигнал: <i>test</i>
3
Выход:<i>tes</i>
Вход: <strong><i>more</i> <span style="color: red">complicated</span></strong>
7
Выход:<strong><i>more</i> <span style="color: red">co</span></strong>
Вход: no html
2
Выход:no
Вход: <b>no</b> <i>html root</i>
5
Выход:<b>no</b> <i>ht</i>
Вход: <b>no img</b><img src="test.png" />more text
6
Выход:<b>no img</b>
Вы можете использовать любой язык и стандартную библиотеку данного языка. Это код гольфа, самая короткая программа выигрывает. Повеселись!
<
и>
вместо<>
, так что нет (<
или>
не будет присутствовать либо).<i>ab</i><b>cd</b> 1
?<i>a</i>
?<i>a</i><b></b>
(что имеет смысл, если вы считаете, что этоb
также может бытьdiv
илиimg
.)Ответы:
Этот ответ больше не действует с последним правилом.
Javascript ( ES6 )
9491Ungolfed:
источник
Реболь - 252 символа
Разоблаченный с комментариями:
Примеры в консоли Rebol:
источник
Рубин ... Очень непохож на петли
источник
(IE) JS - 135
function f(t,n){b=document.body;b.innerHTML=t;r=b.createTextRange();r.moveStart("character",n);r.select();r.execCommand('cut');return b.innerHTML}
Теперь я чувствую себя грязным. Но нужно начать удалять все эти символы ...Отказ от ответственности:
источник