ASCII art H trees
up vote
9
down vote
favorite
An H tree is a fractal tree structure that starts with a line. In each iteration, T branches are added to all endpoints. In this challenge, you have to create an ASCII representation of every second H tree level.
The first level simply contains three hyphen-minus characters:
---
The next levels are constructed recursively:
- Create a 2x2 matrix of copies from the previous level, separated by three spaces or lines.
- Connect the centers of the copies with ASCII art lines in the form of an H. Use
-
for horizontal lines,|
for vertical lines, and+
whenever lines meet each other.
Second level
-+- -+-
| |
+-----+
| |
-+- -+-
Third level
-+- -+- -+- -+-
| | | |
+--+--+ +--+--+
| | | | | |
-+- | -+- -+- | -+-
| |
+-----------+
| |
-+- | -+- -+- | -+-
| | | | | |
+--+--+ +--+--+
| | | |
-+- -+- -+- -+-
Rules
- Input is an integer representing the level of the ASCII art H tree as described above (not the actual H tree level), either zero- or one-indexed.
- Output is flexible. For example, you can print the result or return a newline-separated string, a list of strings for each line, or a 2D array of characters.
- You must use
-
,|
,+
and space characters. - Trailing space and up to three trailing white-space lines are allowed.
This is code golf. The shortest answer in bytes wins.
code-golf ascii-art fractal
add a comment |
up vote
9
down vote
favorite
An H tree is a fractal tree structure that starts with a line. In each iteration, T branches are added to all endpoints. In this challenge, you have to create an ASCII representation of every second H tree level.
The first level simply contains three hyphen-minus characters:
---
The next levels are constructed recursively:
- Create a 2x2 matrix of copies from the previous level, separated by three spaces or lines.
- Connect the centers of the copies with ASCII art lines in the form of an H. Use
-
for horizontal lines,|
for vertical lines, and+
whenever lines meet each other.
Second level
-+- -+-
| |
+-----+
| |
-+- -+-
Third level
-+- -+- -+- -+-
| | | |
+--+--+ +--+--+
| | | | | |
-+- | -+- -+- | -+-
| |
+-----------+
| |
-+- | -+- -+- | -+-
| | | | | |
+--+--+ +--+--+
| | | |
-+- -+- -+- -+-
Rules
- Input is an integer representing the level of the ASCII art H tree as described above (not the actual H tree level), either zero- or one-indexed.
- Output is flexible. For example, you can print the result or return a newline-separated string, a list of strings for each line, or a 2D array of characters.
- You must use
-
,|
,+
and space characters. - Trailing space and up to three trailing white-space lines are allowed.
This is code golf. The shortest answer in bytes wins.
code-golf ascii-art fractal
2
Related: Create an “H” from smaller “H”s
– nwellnhof
Nov 25 at 11:45
add a comment |
up vote
9
down vote
favorite
up vote
9
down vote
favorite
An H tree is a fractal tree structure that starts with a line. In each iteration, T branches are added to all endpoints. In this challenge, you have to create an ASCII representation of every second H tree level.
The first level simply contains three hyphen-minus characters:
---
The next levels are constructed recursively:
- Create a 2x2 matrix of copies from the previous level, separated by three spaces or lines.
- Connect the centers of the copies with ASCII art lines in the form of an H. Use
-
for horizontal lines,|
for vertical lines, and+
whenever lines meet each other.
Second level
-+- -+-
| |
+-----+
| |
-+- -+-
Third level
-+- -+- -+- -+-
| | | |
+--+--+ +--+--+
| | | | | |
-+- | -+- -+- | -+-
| |
+-----------+
| |
-+- | -+- -+- | -+-
| | | | | |
+--+--+ +--+--+
| | | |
-+- -+- -+- -+-
Rules
- Input is an integer representing the level of the ASCII art H tree as described above (not the actual H tree level), either zero- or one-indexed.
- Output is flexible. For example, you can print the result or return a newline-separated string, a list of strings for each line, or a 2D array of characters.
- You must use
-
,|
,+
and space characters. - Trailing space and up to three trailing white-space lines are allowed.
This is code golf. The shortest answer in bytes wins.
code-golf ascii-art fractal
An H tree is a fractal tree structure that starts with a line. In each iteration, T branches are added to all endpoints. In this challenge, you have to create an ASCII representation of every second H tree level.
The first level simply contains three hyphen-minus characters:
---
The next levels are constructed recursively:
- Create a 2x2 matrix of copies from the previous level, separated by three spaces or lines.
- Connect the centers of the copies with ASCII art lines in the form of an H. Use
-
for horizontal lines,|
for vertical lines, and+
whenever lines meet each other.
Second level
-+- -+-
| |
+-----+
| |
-+- -+-
Third level
-+- -+- -+- -+-
| | | |
+--+--+ +--+--+
| | | | | |
-+- | -+- -+- | -+-
| |
+-----------+
| |
-+- | -+- -+- | -+-
| | | | | |
+--+--+ +--+--+
| | | |
-+- -+- -+- -+-
Rules
- Input is an integer representing the level of the ASCII art H tree as described above (not the actual H tree level), either zero- or one-indexed.
- Output is flexible. For example, you can print the result or return a newline-separated string, a list of strings for each line, or a 2D array of characters.
- You must use
-
,|
,+
and space characters. - Trailing space and up to three trailing white-space lines are allowed.
This is code golf. The shortest answer in bytes wins.
code-golf ascii-art fractal
code-golf ascii-art fractal
asked Nov 25 at 11:29
nwellnhof
6,3131125
6,3131125
2
Related: Create an “H” from smaller “H”s
– nwellnhof
Nov 25 at 11:45
add a comment |
2
Related: Create an “H” from smaller “H”s
– nwellnhof
Nov 25 at 11:45
2
2
Related: Create an “H” from smaller “H”s
– nwellnhof
Nov 25 at 11:45
Related: Create an “H” from smaller “H”s
– nwellnhof
Nov 25 at 11:45
add a comment |
4 Answers
4
active
oldest
votes
up vote
7
down vote
Charcoal, 22 bytes
P-²FNF²«⟲T²+×⁺²κX²ι←‖O
Try it online! Link is to verbose version of code. 0-indexed. Explanation:
P-²
Print the initial three -
s, leaving the cursor in the middle.
FN
Repeat for the number of times given.
F²«
Repeat twice for each H
. Each loop creates a slightly bigger H
from the previous loop, but we only want alternate H
s.
⟲T²
Rotate the figure.
+×⁺²κX²ι←
Draw half of the next line.
‖O
Reflect to complete the step.
The result at each iteration is as follows:
---
| |
+---+
| |
-+- -+-
| |
+-----+
| |
-+- -+-
| | | |
+-+-+ +-+-+
| | | | | |
| |
+-------+
| |
| | | | | |
+-+-+ +-+-+
| | | |
-+- -+- -+- -+-
| | | |
+--+--+ +--+--+
| | | | | |
-+- | -+- -+- | -+-
| |
+-----------+
| |
-+- | -+- -+- | -+-
| | | | | |
+--+--+ +--+--+
| | | |
-+- -+- -+- -+-
If you wonder how a 5-th levelH
looks like, a quick zoomed-out glance: i.imgur.com/EGapcrS.png
– Paul
Nov 25 at 17:59
add a comment |
up vote
7
down vote
Canvas, 20 19 bytes
ø⁸«╵[↷L⇵;l⇵└┌├-×╋‼│
Try it here!
Explanation:
ø push an empty canvas
⁸«╵[ repeat input*2 + 1 times
↷ rotate clockwise
L⇵ ceil(width/2)
;l⇵ ceil(height/2); leaves stack as [ ⌈½w⌉, canvas, ⌈½h⌉ ]
└┌ reorder stack to [ canvas, ⌈½w⌉, ⌈½h⌉, ⌈½w⌉ ]
├ add 2 to the top ⌈w÷2⌉
-× "-" * (2 + ⌈w÷2⌉)
╋ in the canvas, at (⌈w÷2⌉; ⌈h÷2⌉) insert the dashes
‼ normalize the canvas (the 0th iteration inserts at (0; 0) breaking things)
│ and palindromize horizontally
add a comment |
up vote
1
down vote
Python 2, 227 bytes
L=len
def f(n):
if n==1:return[['-']*3]
m=[l+[' ']*3+l for l in f(n-1)];w=L(m[0]);y=L(m)/2;x=w/4-1;m=map(list,m+[' '*w,' '*x+'-'*(w-x-x)+' '*x,' '*w]+m)
for i in range(y,L(m)-y):m[i][x]=m[i][w+~x]='|+'[m[i][x]>' ']
return m
Try it online!
add a comment |
up vote
0
down vote
Perl 6, 118 bytes
{map ->y{map {' |-+'.comb[:2[map {$^b%%1*$b&&6>=$^a/($b+&-$b)%8>=2},$^x/¾,y/2,y,$x/3-$_]]},2..^$_*6},2..^$_*4}o*R**2
Try it online!
0-indexed. Returns a 2D array of characters. The basic idea is that the expression
b = y & -y // Isolate lowest one bit
b <= x % (4*b) <= 3*b
generates the pattern
--- --- --- ---
----- -----
--- --- --- ---
---------
--- --- --- ---
----- -----
--- --- --- ---
Explanation
{ ... }o*R**2 # Feed $_=2**$n into block
map ->y{ ... },2..^$_*4 # Map y=2..2**n*4-1
map { ... },2..^$_*6 # Map $x=2..2**n*6-1
' |-+'.comb[:2[ ... ]] # Choose char depending on base-2 number from two Bools
map { ... } # Map coordinates to Bool
# Horizontal lines
,$^x/¾ # Modulo 8*¾=6
,y/2 # Skip every second row
# Vertical lines
,y # Modulo 8
,$x/3 # Skip every third column
-$_ # Empty middle column
# Map using expression
$^b%%1*$b&& # Return 0 if $b is zero or has fractional part
6>=$^a/($b+&-$b)%8>=2 # Pattern with modulo 8
add a comment |
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
7
down vote
Charcoal, 22 bytes
P-²FNF²«⟲T²+×⁺²κX²ι←‖O
Try it online! Link is to verbose version of code. 0-indexed. Explanation:
P-²
Print the initial three -
s, leaving the cursor in the middle.
FN
Repeat for the number of times given.
F²«
Repeat twice for each H
. Each loop creates a slightly bigger H
from the previous loop, but we only want alternate H
s.
⟲T²
Rotate the figure.
+×⁺²κX²ι←
Draw half of the next line.
‖O
Reflect to complete the step.
The result at each iteration is as follows:
---
| |
+---+
| |
-+- -+-
| |
+-----+
| |
-+- -+-
| | | |
+-+-+ +-+-+
| | | | | |
| |
+-------+
| |
| | | | | |
+-+-+ +-+-+
| | | |
-+- -+- -+- -+-
| | | |
+--+--+ +--+--+
| | | | | |
-+- | -+- -+- | -+-
| |
+-----------+
| |
-+- | -+- -+- | -+-
| | | | | |
+--+--+ +--+--+
| | | |
-+- -+- -+- -+-
If you wonder how a 5-th levelH
looks like, a quick zoomed-out glance: i.imgur.com/EGapcrS.png
– Paul
Nov 25 at 17:59
add a comment |
up vote
7
down vote
Charcoal, 22 bytes
P-²FNF²«⟲T²+×⁺²κX²ι←‖O
Try it online! Link is to verbose version of code. 0-indexed. Explanation:
P-²
Print the initial three -
s, leaving the cursor in the middle.
FN
Repeat for the number of times given.
F²«
Repeat twice for each H
. Each loop creates a slightly bigger H
from the previous loop, but we only want alternate H
s.
⟲T²
Rotate the figure.
+×⁺²κX²ι←
Draw half of the next line.
‖O
Reflect to complete the step.
The result at each iteration is as follows:
---
| |
+---+
| |
-+- -+-
| |
+-----+
| |
-+- -+-
| | | |
+-+-+ +-+-+
| | | | | |
| |
+-------+
| |
| | | | | |
+-+-+ +-+-+
| | | |
-+- -+- -+- -+-
| | | |
+--+--+ +--+--+
| | | | | |
-+- | -+- -+- | -+-
| |
+-----------+
| |
-+- | -+- -+- | -+-
| | | | | |
+--+--+ +--+--+
| | | |
-+- -+- -+- -+-
If you wonder how a 5-th levelH
looks like, a quick zoomed-out glance: i.imgur.com/EGapcrS.png
– Paul
Nov 25 at 17:59
add a comment |
up vote
7
down vote
up vote
7
down vote
Charcoal, 22 bytes
P-²FNF²«⟲T²+×⁺²κX²ι←‖O
Try it online! Link is to verbose version of code. 0-indexed. Explanation:
P-²
Print the initial three -
s, leaving the cursor in the middle.
FN
Repeat for the number of times given.
F²«
Repeat twice for each H
. Each loop creates a slightly bigger H
from the previous loop, but we only want alternate H
s.
⟲T²
Rotate the figure.
+×⁺²κX²ι←
Draw half of the next line.
‖O
Reflect to complete the step.
The result at each iteration is as follows:
---
| |
+---+
| |
-+- -+-
| |
+-----+
| |
-+- -+-
| | | |
+-+-+ +-+-+
| | | | | |
| |
+-------+
| |
| | | | | |
+-+-+ +-+-+
| | | |
-+- -+- -+- -+-
| | | |
+--+--+ +--+--+
| | | | | |
-+- | -+- -+- | -+-
| |
+-----------+
| |
-+- | -+- -+- | -+-
| | | | | |
+--+--+ +--+--+
| | | |
-+- -+- -+- -+-
Charcoal, 22 bytes
P-²FNF²«⟲T²+×⁺²κX²ι←‖O
Try it online! Link is to verbose version of code. 0-indexed. Explanation:
P-²
Print the initial three -
s, leaving the cursor in the middle.
FN
Repeat for the number of times given.
F²«
Repeat twice for each H
. Each loop creates a slightly bigger H
from the previous loop, but we only want alternate H
s.
⟲T²
Rotate the figure.
+×⁺²κX²ι←
Draw half of the next line.
‖O
Reflect to complete the step.
The result at each iteration is as follows:
---
| |
+---+
| |
-+- -+-
| |
+-----+
| |
-+- -+-
| | | |
+-+-+ +-+-+
| | | | | |
| |
+-------+
| |
| | | | | |
+-+-+ +-+-+
| | | |
-+- -+- -+- -+-
| | | |
+--+--+ +--+--+
| | | | | |
-+- | -+- -+- | -+-
| |
+-----------+
| |
-+- | -+- -+- | -+-
| | | | | |
+--+--+ +--+--+
| | | |
-+- -+- -+- -+-
answered Nov 25 at 12:16
Neil
78.5k744175
78.5k744175
If you wonder how a 5-th levelH
looks like, a quick zoomed-out glance: i.imgur.com/EGapcrS.png
– Paul
Nov 25 at 17:59
add a comment |
If you wonder how a 5-th levelH
looks like, a quick zoomed-out glance: i.imgur.com/EGapcrS.png
– Paul
Nov 25 at 17:59
If you wonder how a 5-th level
H
looks like, a quick zoomed-out glance: i.imgur.com/EGapcrS.png– Paul
Nov 25 at 17:59
If you wonder how a 5-th level
H
looks like, a quick zoomed-out glance: i.imgur.com/EGapcrS.png– Paul
Nov 25 at 17:59
add a comment |
up vote
7
down vote
Canvas, 20 19 bytes
ø⁸«╵[↷L⇵;l⇵└┌├-×╋‼│
Try it here!
Explanation:
ø push an empty canvas
⁸«╵[ repeat input*2 + 1 times
↷ rotate clockwise
L⇵ ceil(width/2)
;l⇵ ceil(height/2); leaves stack as [ ⌈½w⌉, canvas, ⌈½h⌉ ]
└┌ reorder stack to [ canvas, ⌈½w⌉, ⌈½h⌉, ⌈½w⌉ ]
├ add 2 to the top ⌈w÷2⌉
-× "-" * (2 + ⌈w÷2⌉)
╋ in the canvas, at (⌈w÷2⌉; ⌈h÷2⌉) insert the dashes
‼ normalize the canvas (the 0th iteration inserts at (0; 0) breaking things)
│ and palindromize horizontally
add a comment |
up vote
7
down vote
Canvas, 20 19 bytes
ø⁸«╵[↷L⇵;l⇵└┌├-×╋‼│
Try it here!
Explanation:
ø push an empty canvas
⁸«╵[ repeat input*2 + 1 times
↷ rotate clockwise
L⇵ ceil(width/2)
;l⇵ ceil(height/2); leaves stack as [ ⌈½w⌉, canvas, ⌈½h⌉ ]
└┌ reorder stack to [ canvas, ⌈½w⌉, ⌈½h⌉, ⌈½w⌉ ]
├ add 2 to the top ⌈w÷2⌉
-× "-" * (2 + ⌈w÷2⌉)
╋ in the canvas, at (⌈w÷2⌉; ⌈h÷2⌉) insert the dashes
‼ normalize the canvas (the 0th iteration inserts at (0; 0) breaking things)
│ and palindromize horizontally
add a comment |
up vote
7
down vote
up vote
7
down vote
Canvas, 20 19 bytes
ø⁸«╵[↷L⇵;l⇵└┌├-×╋‼│
Try it here!
Explanation:
ø push an empty canvas
⁸«╵[ repeat input*2 + 1 times
↷ rotate clockwise
L⇵ ceil(width/2)
;l⇵ ceil(height/2); leaves stack as [ ⌈½w⌉, canvas, ⌈½h⌉ ]
└┌ reorder stack to [ canvas, ⌈½w⌉, ⌈½h⌉, ⌈½w⌉ ]
├ add 2 to the top ⌈w÷2⌉
-× "-" * (2 + ⌈w÷2⌉)
╋ in the canvas, at (⌈w÷2⌉; ⌈h÷2⌉) insert the dashes
‼ normalize the canvas (the 0th iteration inserts at (0; 0) breaking things)
│ and palindromize horizontally
Canvas, 20 19 bytes
ø⁸«╵[↷L⇵;l⇵└┌├-×╋‼│
Try it here!
Explanation:
ø push an empty canvas
⁸«╵[ repeat input*2 + 1 times
↷ rotate clockwise
L⇵ ceil(width/2)
;l⇵ ceil(height/2); leaves stack as [ ⌈½w⌉, canvas, ⌈½h⌉ ]
└┌ reorder stack to [ canvas, ⌈½w⌉, ⌈½h⌉, ⌈½w⌉ ]
├ add 2 to the top ⌈w÷2⌉
-× "-" * (2 + ⌈w÷2⌉)
╋ in the canvas, at (⌈w÷2⌉; ⌈h÷2⌉) insert the dashes
‼ normalize the canvas (the 0th iteration inserts at (0; 0) breaking things)
│ and palindromize horizontally
edited Nov 25 at 15:52
answered Nov 25 at 12:31
dzaima
14.1k21754
14.1k21754
add a comment |
add a comment |
up vote
1
down vote
Python 2, 227 bytes
L=len
def f(n):
if n==1:return[['-']*3]
m=[l+[' ']*3+l for l in f(n-1)];w=L(m[0]);y=L(m)/2;x=w/4-1;m=map(list,m+[' '*w,' '*x+'-'*(w-x-x)+' '*x,' '*w]+m)
for i in range(y,L(m)-y):m[i][x]=m[i][w+~x]='|+'[m[i][x]>' ']
return m
Try it online!
add a comment |
up vote
1
down vote
Python 2, 227 bytes
L=len
def f(n):
if n==1:return[['-']*3]
m=[l+[' ']*3+l for l in f(n-1)];w=L(m[0]);y=L(m)/2;x=w/4-1;m=map(list,m+[' '*w,' '*x+'-'*(w-x-x)+' '*x,' '*w]+m)
for i in range(y,L(m)-y):m[i][x]=m[i][w+~x]='|+'[m[i][x]>' ']
return m
Try it online!
add a comment |
up vote
1
down vote
up vote
1
down vote
Python 2, 227 bytes
L=len
def f(n):
if n==1:return[['-']*3]
m=[l+[' ']*3+l for l in f(n-1)];w=L(m[0]);y=L(m)/2;x=w/4-1;m=map(list,m+[' '*w,' '*x+'-'*(w-x-x)+' '*x,' '*w]+m)
for i in range(y,L(m)-y):m[i][x]=m[i][w+~x]='|+'[m[i][x]>' ']
return m
Try it online!
Python 2, 227 bytes
L=len
def f(n):
if n==1:return[['-']*3]
m=[l+[' ']*3+l for l in f(n-1)];w=L(m[0]);y=L(m)/2;x=w/4-1;m=map(list,m+[' '*w,' '*x+'-'*(w-x-x)+' '*x,' '*w]+m)
for i in range(y,L(m)-y):m[i][x]=m[i][w+~x]='|+'[m[i][x]>' ']
return m
Try it online!
answered Nov 27 at 9:14
TFeld
13.7k21239
13.7k21239
add a comment |
add a comment |
up vote
0
down vote
Perl 6, 118 bytes
{map ->y{map {' |-+'.comb[:2[map {$^b%%1*$b&&6>=$^a/($b+&-$b)%8>=2},$^x/¾,y/2,y,$x/3-$_]]},2..^$_*6},2..^$_*4}o*R**2
Try it online!
0-indexed. Returns a 2D array of characters. The basic idea is that the expression
b = y & -y // Isolate lowest one bit
b <= x % (4*b) <= 3*b
generates the pattern
--- --- --- ---
----- -----
--- --- --- ---
---------
--- --- --- ---
----- -----
--- --- --- ---
Explanation
{ ... }o*R**2 # Feed $_=2**$n into block
map ->y{ ... },2..^$_*4 # Map y=2..2**n*4-1
map { ... },2..^$_*6 # Map $x=2..2**n*6-1
' |-+'.comb[:2[ ... ]] # Choose char depending on base-2 number from two Bools
map { ... } # Map coordinates to Bool
# Horizontal lines
,$^x/¾ # Modulo 8*¾=6
,y/2 # Skip every second row
# Vertical lines
,y # Modulo 8
,$x/3 # Skip every third column
-$_ # Empty middle column
# Map using expression
$^b%%1*$b&& # Return 0 if $b is zero or has fractional part
6>=$^a/($b+&-$b)%8>=2 # Pattern with modulo 8
add a comment |
up vote
0
down vote
Perl 6, 118 bytes
{map ->y{map {' |-+'.comb[:2[map {$^b%%1*$b&&6>=$^a/($b+&-$b)%8>=2},$^x/¾,y/2,y,$x/3-$_]]},2..^$_*6},2..^$_*4}o*R**2
Try it online!
0-indexed. Returns a 2D array of characters. The basic idea is that the expression
b = y & -y // Isolate lowest one bit
b <= x % (4*b) <= 3*b
generates the pattern
--- --- --- ---
----- -----
--- --- --- ---
---------
--- --- --- ---
----- -----
--- --- --- ---
Explanation
{ ... }o*R**2 # Feed $_=2**$n into block
map ->y{ ... },2..^$_*4 # Map y=2..2**n*4-1
map { ... },2..^$_*6 # Map $x=2..2**n*6-1
' |-+'.comb[:2[ ... ]] # Choose char depending on base-2 number from two Bools
map { ... } # Map coordinates to Bool
# Horizontal lines
,$^x/¾ # Modulo 8*¾=6
,y/2 # Skip every second row
# Vertical lines
,y # Modulo 8
,$x/3 # Skip every third column
-$_ # Empty middle column
# Map using expression
$^b%%1*$b&& # Return 0 if $b is zero or has fractional part
6>=$^a/($b+&-$b)%8>=2 # Pattern with modulo 8
add a comment |
up vote
0
down vote
up vote
0
down vote
Perl 6, 118 bytes
{map ->y{map {' |-+'.comb[:2[map {$^b%%1*$b&&6>=$^a/($b+&-$b)%8>=2},$^x/¾,y/2,y,$x/3-$_]]},2..^$_*6},2..^$_*4}o*R**2
Try it online!
0-indexed. Returns a 2D array of characters. The basic idea is that the expression
b = y & -y // Isolate lowest one bit
b <= x % (4*b) <= 3*b
generates the pattern
--- --- --- ---
----- -----
--- --- --- ---
---------
--- --- --- ---
----- -----
--- --- --- ---
Explanation
{ ... }o*R**2 # Feed $_=2**$n into block
map ->y{ ... },2..^$_*4 # Map y=2..2**n*4-1
map { ... },2..^$_*6 # Map $x=2..2**n*6-1
' |-+'.comb[:2[ ... ]] # Choose char depending on base-2 number from two Bools
map { ... } # Map coordinates to Bool
# Horizontal lines
,$^x/¾ # Modulo 8*¾=6
,y/2 # Skip every second row
# Vertical lines
,y # Modulo 8
,$x/3 # Skip every third column
-$_ # Empty middle column
# Map using expression
$^b%%1*$b&& # Return 0 if $b is zero or has fractional part
6>=$^a/($b+&-$b)%8>=2 # Pattern with modulo 8
Perl 6, 118 bytes
{map ->y{map {' |-+'.comb[:2[map {$^b%%1*$b&&6>=$^a/($b+&-$b)%8>=2},$^x/¾,y/2,y,$x/3-$_]]},2..^$_*6},2..^$_*4}o*R**2
Try it online!
0-indexed. Returns a 2D array of characters. The basic idea is that the expression
b = y & -y // Isolate lowest one bit
b <= x % (4*b) <= 3*b
generates the pattern
--- --- --- ---
----- -----
--- --- --- ---
---------
--- --- --- ---
----- -----
--- --- --- ---
Explanation
{ ... }o*R**2 # Feed $_=2**$n into block
map ->y{ ... },2..^$_*4 # Map y=2..2**n*4-1
map { ... },2..^$_*6 # Map $x=2..2**n*6-1
' |-+'.comb[:2[ ... ]] # Choose char depending on base-2 number from two Bools
map { ... } # Map coordinates to Bool
# Horizontal lines
,$^x/¾ # Modulo 8*¾=6
,y/2 # Skip every second row
# Vertical lines
,y # Modulo 8
,$x/3 # Skip every third column
-$_ # Empty middle column
# Map using expression
$^b%%1*$b&& # Return 0 if $b is zero or has fractional part
6>=$^a/($b+&-$b)%8>=2 # Pattern with modulo 8
answered 2 days ago
nwellnhof
6,3131125
6,3131125
add a comment |
add a comment |
If this is an answer to a challenge…
…Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.
…Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
Explanations of your answer make it more interesting to read and are very much encouraged.…Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.
More generally…
…Please make sure to answer the question and provide sufficient detail.
…Avoid asking for help, clarification or responding to other answers (use comments instead).
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodegolf.stackexchange.com%2fquestions%2f176521%2fascii-art-h-trees%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
2
Related: Create an “H” from smaller “H”s
– nwellnhof
Nov 25 at 11:45