Tarea: ¡ convierte una página HTML en una montaña!
Cuando las páginas HTML están sangradas, pueden verse así:
<div>
<div>
<div>
</div>
<div>
<div>
</div>
</div>
</div>
</div>
Pero para ser sincero, una montaña es más representativa de esta estructura.
Entonces podemos reescribirlo como:
/\
/\/ \
/ \
/ \
Las barras más externas a la izquierda y a la derecha corresponden al div externo: cada par de etiquetas HTML debe representarse como /
para la etiqueta inicial y \
para la etiqueta final; dentro de todas las etiquetas son "más altas", con la misma estructura.
Entrada:
- No habrá
<!DOCTYPE>
- No habrá etiquetas de cierre automático, por ejemplo,
<img />
o<br />
- Puede haber atributos o contenido dentro de las etiquetas
- Puede haber espacios o pestañas; su programa debe ignorarlos
- No habrá espacios entre
<
o</
y el nombre de la etiqueta - Toda entrada será HTML válido
Salida : una montaña que representa las etiquetas como arriba.
Más casos de prueba:
Entrada:
<div id="123"> HI </div><a><span></span></a>
Salida:
/\
/\/ \
Entrada:
<body id="<"></body>
Salida:
/\
</ div>
? o podemos suponer que la barra siempre es adyacente aldiv
<
o</
(hasta el nombre de la etiqueta), sin embargo, todavía puede haber espacios para los atributos, por ejemplo<div id="aDiv">
>
tal como<a >b</a >
.)Respuestas:
HTML + CSS + JavaScript, 39 + 141 + 20 = 200 bytes
Salidas visuales a la página web. Para permitir que esto funcione con elementos especiales como
<body>
, se reemplazan todas las letras en la entrada.HTML + CSS + JavaScript, 10 + 103 + 20 = 133 bytes
Solución que funciona si no hay contenido dentro de las etiquetas.
fuente
Javascript + JQuery,
275246 bytesGuardado 29 bytes gracias a Rick Hitchcock
Una bonita solución ingenua al problema. Analiza el HTML con JQuery's
$(string)
, luego construye recursivamente una montaña lateral con el formato:Luego gira la cadena resultante en sentido antihorario y alerta el resultado.
Mostrar fragmento de código
fuente
j=(a,b,c,i)=>{s=(c=' '.repeat(b))+'/\n';for(i
...for(c=0;c<s.length;c++)
afor(c=0;s[c];c++)
for(i=0;i<a.children.length;i++)
afor(i=0;a.children[i];i++)
HTML + JavaScript (ES6), 8 + 192 = 200 bytes
JS
HTML
Mostrar fragmento de código
Menos golf
fuente
id=E
elemento HTML ya que confía en él para que el código funcione?05AB1E ,
382623 bytesPruébalo en línea!
Todavía estoy jugando golf. Se supone que en HTML siempre usará 4 espacios para sangría, y no funciona en HTML "no bonito". No estoy seguro de cómo manejar la parte de "contenido", si esto no es válido, edite la pregunta para mostrar un ejemplo con un nodo que tenga contenido.
fuente
Carbón , 28 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
La
h
variable se utiliza para realizar un seguimiento de si estamos entre comillas.Pase sobre la cuerda en orden inverso.
Enciende el personaje actual.
Si es un,
"
entonces active la bandera de cotización.Si es una
<
y no estamos entre comillas, entonces ...Si el siguiente carácter (anterior en el bucle porque estamos en bucle inverso) es un
/
, entonces ...Sube y dibuja a la
\
izquierda, de lo contrario ...Dibuja ay
/
mueve hacia abajo y hacia la izquierda.Recuerde el carácter para la próxima iteración del bucle.
fuente