Tarefa: converter uma página HTML em uma montanha!
Quando as páginas HTML são recuadas, elas podem se parecer com:
<div>
<div>
<div>
</div>
<div>
<div>
</div>
</div>
</div>
</div>
Mas, para ser sincero, uma montanha é mais representativa dessa estrutura.
Para reescrevê-lo como:
/\
/\/ \
/ \
/ \
As barras mais externas à esquerda e à direita correspondem à div externa - cada par de tags HTML deve ser representado como /
para a tag inicial e \
para a tag final - dentro de todas as tags são "superiores", com a mesma estrutura.
Entrada:
- Não haverá
<!DOCTYPE>
- Não haverá tags de fechamento automático, por exemplo,
<img />
ou<br />
- Pode haver atributos ou conteúdo dentro das tags
- Pode haver espaços ou guias - seu programa deve ignorá-las
- Não haverá espaços entre
<
ou</
e o nome da tag - Toda entrada será HTML válido
Saída - uma montanha representando as tags como acima.
Mais casos de teste:
Entrada:
<div id="123"> HI </div><a><span></span></a>
Saída:
/\
/\/ \
Entrada:
<body id="<"></body>
Saída:
/\
</ div>
? ou podemos supor que a barra é sempre adjacente aodiv
<
ou</
(até o nome da tag) - no entanto, ainda pode haver espaços para atributos, por exemplo:<div id="aDiv">
>
como<a >b</a >
.)Respostas:
HTML + CSS + JavaScript, 39 + 141 + 20 = 200 bytes
Saídas visualmente para a página da web. Para permitir que isso funcione com elementos especiais como
<body>
, todas as letras na entrada são substituídas.HTML + CSS + JavaScript, 10 + 103 + 20 = 133 bytes
Solução que funciona se não houver conteúdo nas tags.
fonte
Javascript + JQuery,
275246 bytesEconomizou 29 bytes graças a Rick Hitchcock
Uma solução bastante ingênua para o problema. Analisa o HTML com o JQuery
$(string)
e depois constrói recursivamente uma montanha lateral com o formato:Em seguida, gira a sequência resultante no sentido anti-horário e alerta o resultado.
Mostrar snippet de código
fonte
j=(a,b,c,i)=>{s=(c=' '.repeat(b))+'/\n';for(i
...for(c=0;c<s.length;c++)
parafor(c=0;s[c];c++)
for(i=0;i<a.children.length;i++)
parafor(i=0;a.children[i];i++)
HTML + JavaScript (ES6), 8 + 192 = 200 bytes
JS
HTML
Mostrar snippet de código
Menos golfe
fonte
id=E
elemento HTML, pois você está contando com ele para que o código funcione?05AB1E ,
382623 bytesExperimente online!
Eu ainda estou jogando isso. Ele pressupõe que em HTML você sempre usará 4 espaços para indentação e não funciona em HTML "não bonito". Não sabe ao certo como lidar com a parte "conteúdo"; se isso for inválido, edite a pergunta para mostrar um exemplo com um nó que possui conteúdo.
fonte
Carvão , 28 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
A
h
variável é usada para acompanhar se estamos entre aspas.Passe a corda na ordem inversa.
Ligue o caractere atual.
Se for um
"
, alterne o sinalizador de cotação.Se é um
<
e não estamos entre aspas, então ...Se o próximo caractere (anterior no loop porque estamos fazendo um loop reverso) for a
/
, então ...Mover para cima e desenhar uma
\
esquerda, senão ...Desenhe ae
/
mova para baixo e para a esquerda.Lembre-se do caractere para a próxima iteração do loop.
fonte