Quase todos os idiomas possuem uma função integrada que pode dividir uma string em uma determinada posição. No entanto, assim que você tiver tags html na string, a função interna não funcionará corretamente.
Sua tarefa é escrever um programa ou função que divida uma string no enésimo caractere, mas não conta os caracteres das tags html e produzirá um html válido. O programa deve manter a formatação. Os espaços fora das tags html podem ser contados ou não, conforme desejado, mas devem ser preservados. No entanto, você pode trocar vários espaços consecutivos em um único espaço.
Entrada:
- a corda
- a posição para dividir em (com base em 0)
Eles podem ser tomados como argumentos de programa ou função ou podem ser lidos a partir da entrada padrão.
Saída: a cadeia de caracteres dividida que pode ser retornada ou gravada na saída padrão.
A entrada será um html válido, não conterá nenhuma entidade (como
). As tags que são abertas após o limite de caracteres devem ser omitidas da saída (consulte o último exemplo).
Exemplo:
Entrada
:, <i>test</i>
3
Saída:<i>tes</i>
Entrada
:, <strong><i>more</i> <span style="color: red">complicated</span></strong>
7
Saída:<strong><i>more</i> <span style="color: red">co</span></strong>
Entrada
:, no html
2
Saída:no
Entrada
:, <b>no</b> <i>html root</i>
5
Saída:<b>no</b> <i>ht</i>
Entrada
:, <b>no img</b><img src="test.png" />more text
6
Saída:<b>no img</b>
Você pode usar qualquer idioma e a biblioteca padrão do idioma especificado. Este é o código de golfe, o programa mais curto vence. Diverta-se!
<
e, em>
vez de<>
, então não (<
ou>
não estará presente também).<i>ab</i><b>cd</b> 1
?<i>a</i>
?<i>a</i><b></b>
(que faz sentido se você considerar queb
também poderia serdiv
ouimg
.)Respostas:
Esta resposta não é mais válida com a regra mais recente.
Javascript ( ES6 )
9491Ungolfed:
fonte
Rebol - 252 caracteres
Ungolfed com comentários:
Exemplos no console Rebol:
fonte
Ruby ... Muito unrubylike com loops
fonte
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}
Agora me sinto sujo. Mas precisa começar a remover todos esses caracteres ...Aviso Legal:
fonte