Charcoal, 239 238 bytes
UR¹⁶¦²²P×_¹⁶↘¹”“1T↘H‖⌕⦄Q⌈⌀MH⁷鱫cJε⎚#÷‖↧⸿ÿ_M±Gςθx↥<]t~⁻?T\`⪫F№⮌ξv‹⎇αδ¹9∨q¢←6X$⪫SA¤ü‖§Dv⁸)⮌s?ANHτ!ZNσE⟲>£'αlT↙№%Mü‴⟲@ιRQ$⟧.ηψf◧4\¬‴χe@“σXN±I%T↧~wA⁵6ζ▶‴À$UX0⁰β¤c⁷DFQm→>H⟧∨^α~ok∨A1ψς9⁸}'¶$β”P×_¹⁴M↓P×_¹⁵←_/↑²² P×_¹⁶M⁵¦²P↘⁸M¹⁹↓↗⁸‖B
Try it online! Link is to verbose version of code. Most of this is simply printing a large compressed string, but the repetitive parts have been coded separately to reduce the length of the string; in particular the Rectangle
saves a number of bytes by avoiding the space padding to reach the 17th column and even the diagonal lines save a byte each.
Rectangle(16, 22); For the |s in the 2nd and 17th columns
Multiprint(Times("_", 16)); Overwrite the 2nd row with _s
Print(:DownRight, 1); Print the \ in row 2, column 2
Print(<compressed string>); Print the bulk of the web
Multiprint(Times("_" 14)) Print the _s in the penultimate row
Move(:Down);
Multiprint(Times("_" 15)); Overwrite the bottom row with _s
Print(:Left, "_/"); Print the / in the bottom row
Print(:Up, 22); Print the |s in the 1st column
Print(" ");
Multiprint(Times("_" 16)); Print the `_`s in the 1st row
Jump(5, 2);
Multiprint(:DownRight, 8); Print a long diagonal line
Move(19 :Down);
Print(:UpRight, 8); Print the other long diagonal line
ReflectButterfly(); Mirror the first 16 columns (17th is axis)
Edit: Charcoal no longer seems to recognise the compressed string, and its current compression generates a shorter string which saves 5251 bytes, and allows one of the diagonals lines to be moved back into the string for a further 32-byte saving. (Note that these aren't the counts displayed by -sl
; indeed even the original count appears to have been off by 1.) However there are twothree additional savings that would also have applied to the original code: Try it online!
- 1 byte by using
B
(Box
) instead ofUR
(Rectangle
). - 1 byte by using
↙P×_¹⁶←/
instead of↓P×_¹⁵←_/
. - 1 byte by using
×_¹⁶J⁵¦¹
instead ofP×_¹⁶M⁵¦²
.