Tâche: convertir une page HTML en montagne!
Lorsque les pages HTML sont en retrait, elles peuvent ressembler à:
<div>
<div>
<div>
</div>
<div>
<div>
</div>
</div>
</div>
</div>
Mais pour être honnête, une montagne est plus représentative de cette structure.
Nous pouvons donc le réécrire comme:
/\
/\/ \
/ \
/ \
Les barres obliques les plus à gauche et à droite correspondent à la division externe - chaque paire de balises HTML doit être représentée comme /
pour la balise de début et \
pour la balise de fin - à l'intérieur de toutes les balises sont "plus élevées", avec la même structure.
Contribution:
- Il n'y aura pas
<!DOCTYPE>
- Il n'y aura pas de balises à fermeture automatique, par exemple
<img />
ou<br />
- Il peut y avoir des attributs ou du contenu à l'intérieur des balises
- Il peut y avoir des espaces ou des tabulations - votre programme doit les ignorer
- Il n'y aura aucun espace entre
<
ou</
et le nom de la balise - Toutes les entrées seront HTML valides
Sortie - une montagne représentant les balises comme ci-dessus.
Plus de tests:
Contribution:
<div id="123"> HI </div><a><span></span></a>
Sortie:
/\
/\/ \
Contribution:
<body id="<"></body>
Sortie:
/\
</ div>
? ou peut-on supposer que la barre oblique est toujours adjacente à ladiv
<
ou</
(jusqu'au nom de la balise) - mais il peut toujours y avoir des espaces pour les attributs par exemple<div id="aDiv">
>
tel que<a >b</a >
.)Réponses:
HTML + CSS + JavaScript, 39 + 141 + 20 = 200 octets
Affiche visuellement la page Web. Pour que cela fonctionne avec des éléments spéciaux comme
<body>
, toutes les lettres de l'entrée sont remplacées.HTML + CSS + JavaScript, 10 + 103 + 20 = 133 octets
Solution qui fonctionne s'il n'y a pas de contenu dans les balises.
la source
Javascript + JQuery,
275246 octets29 octets enregistrés grâce à Rick Hitchcock
Une solution assez naïve au problème. Analyse le code HTML avec JQuery
$(string)
, puis construit récursivement une montagne latérale au format:Fait ensuite pivoter la chaîne résultante dans le sens antihoraire et alerte le résultat.
Afficher l'extrait de code
la source
j=(a,b,c,i)=>{s=(c=' '.repeat(b))+'/\n';for(i
...for(c=0;c<s.length;c++)
lafor(c=0;s[c];c++)
for(i=0;i<a.children.length;i++)
pourfor(i=0;a.children[i];i++)
HTML + JavaScript (ES6), 8 + 192 = 200 octets
JS
HTML
Afficher l'extrait de code
Moins golfé
la source
id=E
élément HTML puisque vous comptez dessus pour que le code fonctionne?05AB1E ,
382623 octetsEssayez-le en ligne!
Je joue encore au golf. Il suppose qu'en HTML, vous utiliserez toujours 4 espaces pour l'indentation, et ne fonctionne pas sur du HTML "non joli". Vous ne savez pas comment gérer la partie "contenu", si cela n'est pas valide, veuillez modifier la question pour afficher un exemple avec un nœud ayant du contenu.
la source
Fusain , 28 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. Explication:
La
h
variable est utilisée pour savoir si nous sommes à l'intérieur de guillemets.Faites une boucle sur la chaîne dans l'ordre inverse.
Activez le caractère actuel.
Si c'est un
"
basculez le drapeau de citation.Si c'est un
<
et que nous ne sommes pas entre guillemets, alors ...Si le caractère suivant (précédent dans la boucle parce que nous bouclons en sens inverse) est un
/
, alors ...Montez et dessinez un
\
vers la gauche, sinon ...Dessine un
/
et déplacez-vous vers le bas et la gauche.N'oubliez pas le caractère pour la prochaine itération de boucle.
la source