Stars Make Stars Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern) The PPCG Site design is on its way - help us make it awesome! Sandbox for Proposed ChallengesRotate an ASCII art imageAnti-aliasing ASCII artDraw a tiled cube of any sizeStar programming!Emulate a 7-segment displayASCII ART edge detectionThe Letter E with EArmistice Day ChallengeRead ASCII-Art TextDraw some ASCII stars
Do I really need to have a message in a novel to appeal to readers?
Is it possible for SQL statements to execute concurrently within a single session in SQL Server?
Is it fair for a professor to grade us on the possession of past papers?
Should I use a zero-interest credit card for a large one-time purchase?
Question about debouncing - delay of state change
How to react to hostile behavior from a senior developer?
Is grep documentation about ignoring case wrong, since it doesn't ignore case in filenames?
How to write the following sign?
Illegal assignment from sObject to Id
Do wooden building fires get hotter than 600°C?
Why do we bend a book to keep it straight?
Sum letters are not two different
Is there hard evidence that the grant peer review system performs significantly better than random?
If Windows 7 doesn't support WSL, then what does Linux subsystem option mean?
Using audio cues to encourage good posture
Chinese Seal on silk painting - what does it mean?
Generate an RGB colour grid
Take 2! Is this homebrew Lady of Pain warlock patron balanced?
Significance of Cersei's obsession with elephants?
Why do we need to use the builder design pattern when we can do the same thing with setters?
Maximum summed subsequences with non-adjacent items
Central Vacuuming: Is it worth it, and how does it compare to normal vacuuming?
How could we fake a moon landing now?
Performance gap between vector<bool> and array
Stars Make Stars
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 23, 2019 at 00:00UTC (8:00pm US/Eastern)
The PPCG Site design is on its way - help us make it awesome!
Sandbox for Proposed ChallengesRotate an ASCII art imageAnti-aliasing ASCII artDraw a tiled cube of any sizeStar programming!Emulate a 7-segment displayASCII ART edge detectionThe Letter E with EArmistice Day ChallengeRead ASCII-Art TextDraw some ASCII stars
$begingroup$
Introduction
The idea is to use the asterisk character (star) *
to display an ascii-art star at a specified dimension. The dimension is an input number greater than or equal to $1$ that specifies the height in lines of the upper point of the star. The stars here are intended to be six pointed stars with larger sizes looking better from a picture perspective.
In all cases the ascii-art representation of the stars are to appear as two triangles that overlap as shown in the following examples.
Parametrics
The following picture and table of data describes attributes for the first seven sizes of the star. Each of the parameters grows in an arithmetic progression as $N$ increases, except $N=1$ is different.
Examples
For an input of 1 (the degenerate case) the program output should be as follows:
*
*****
*****
*
Input of 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Challenge
Your task is to create a function or program that will accept the number N as input and then output the appropriately sized star using just characters and the
*
character.
- You may assume that the input value is always a positive integer.
- Trailing whitespace on the output lines is OK.
- The program algorithm should be general enough for any $N$ input to produce the star art
output. Practical limitations exist of course due to display output
size. - Output should print to STDOUT.
Standard loopholes are forbidden.- This is code-golf so all usual golfing rules apply.
Scoring
This is code-golf so the code with the shortest number of bytes wins!
code-golf ascii-art
New contributor
$endgroup$
|
show 5 more comments
$begingroup$
Introduction
The idea is to use the asterisk character (star) *
to display an ascii-art star at a specified dimension. The dimension is an input number greater than or equal to $1$ that specifies the height in lines of the upper point of the star. The stars here are intended to be six pointed stars with larger sizes looking better from a picture perspective.
In all cases the ascii-art representation of the stars are to appear as two triangles that overlap as shown in the following examples.
Parametrics
The following picture and table of data describes attributes for the first seven sizes of the star. Each of the parameters grows in an arithmetic progression as $N$ increases, except $N=1$ is different.
Examples
For an input of 1 (the degenerate case) the program output should be as follows:
*
*****
*****
*
Input of 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Challenge
Your task is to create a function or program that will accept the number N as input and then output the appropriately sized star using just characters and the
*
character.
- You may assume that the input value is always a positive integer.
- Trailing whitespace on the output lines is OK.
- The program algorithm should be general enough for any $N$ input to produce the star art
output. Practical limitations exist of course due to display output
size. - Output should print to STDOUT.
Standard loopholes are forbidden.- This is code-golf so all usual golfing rules apply.
Scoring
This is code-golf so the code with the shortest number of bytes wins!
code-golf ascii-art
New contributor
$endgroup$
4
$begingroup$
You also say it can be a function but it must "print to STDOUT". Is this intentional?
$endgroup$
– Sriotchilism O'Zaic
Apr 14 at 14:55
5
$begingroup$
Yep, a general construction rule would be great... for instance I'm not sure about even inputs, like N = 4...
$endgroup$
– digEmAll
Apr 14 at 15:12
7
$begingroup$
Please don't say "The algorithm to produce the stars is part of the programming challenge." This is not something most golfers enjoy when doing an ASCII art challenge, and sounds like an attempt to pawn off something that's the specifiers responsibility. That said, I'm surprised people are unclear on the construction here; it's two triangles overlapped like the challenge says. Would it help to explicitly say the size and offset of the triangles?
$endgroup$
– xnor
Apr 14 at 15:30
9
$begingroup$
@TimPederick Good catch about N=1 being different. I put in a note so solvers don't miss this. I think the challenge would be better without this special case though.
$endgroup$
– xnor
Apr 14 at 15:50
4
$begingroup$
@xnor: since n=1 was different, I could't infer a general rule...and IMO the rule should always be specified for ASCII art, otherwise I'm well allowed to print whatever I want outside the range of the defined examples ;)
$endgroup$
– digEmAll
Apr 14 at 16:18
|
show 5 more comments
$begingroup$
Introduction
The idea is to use the asterisk character (star) *
to display an ascii-art star at a specified dimension. The dimension is an input number greater than or equal to $1$ that specifies the height in lines of the upper point of the star. The stars here are intended to be six pointed stars with larger sizes looking better from a picture perspective.
In all cases the ascii-art representation of the stars are to appear as two triangles that overlap as shown in the following examples.
Parametrics
The following picture and table of data describes attributes for the first seven sizes of the star. Each of the parameters grows in an arithmetic progression as $N$ increases, except $N=1$ is different.
Examples
For an input of 1 (the degenerate case) the program output should be as follows:
*
*****
*****
*
Input of 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Challenge
Your task is to create a function or program that will accept the number N as input and then output the appropriately sized star using just characters and the
*
character.
- You may assume that the input value is always a positive integer.
- Trailing whitespace on the output lines is OK.
- The program algorithm should be general enough for any $N$ input to produce the star art
output. Practical limitations exist of course due to display output
size. - Output should print to STDOUT.
Standard loopholes are forbidden.- This is code-golf so all usual golfing rules apply.
Scoring
This is code-golf so the code with the shortest number of bytes wins!
code-golf ascii-art
New contributor
$endgroup$
Introduction
The idea is to use the asterisk character (star) *
to display an ascii-art star at a specified dimension. The dimension is an input number greater than or equal to $1$ that specifies the height in lines of the upper point of the star. The stars here are intended to be six pointed stars with larger sizes looking better from a picture perspective.
In all cases the ascii-art representation of the stars are to appear as two triangles that overlap as shown in the following examples.
Parametrics
The following picture and table of data describes attributes for the first seven sizes of the star. Each of the parameters grows in an arithmetic progression as $N$ increases, except $N=1$ is different.
Examples
For an input of 1 (the degenerate case) the program output should be as follows:
*
*****
*****
*
Input of 2:
*
***
*********
*******
*********
***
*
(3)
*
***
*****
***************
*************
***********
*************
***************
*****
***
*
(5)
*
***
*****
*******
*********
***************************
*************************
***********************
*********************
*******************
*********************
***********************
*************************
***************************
*********
*******
*****
***
*
Challenge
Your task is to create a function or program that will accept the number N as input and then output the appropriately sized star using just characters and the
*
character.
- You may assume that the input value is always a positive integer.
- Trailing whitespace on the output lines is OK.
- The program algorithm should be general enough for any $N$ input to produce the star art
output. Practical limitations exist of course due to display output
size. - Output should print to STDOUT.
Standard loopholes are forbidden.- This is code-golf so all usual golfing rules apply.
Scoring
This is code-golf so the code with the shortest number of bytes wins!
code-golf ascii-art
code-golf ascii-art
New contributor
New contributor
edited Apr 14 at 19:55
Michael Karas
New contributor
asked Apr 14 at 14:49
Michael KarasMichael Karas
1978
1978
New contributor
New contributor
4
$begingroup$
You also say it can be a function but it must "print to STDOUT". Is this intentional?
$endgroup$
– Sriotchilism O'Zaic
Apr 14 at 14:55
5
$begingroup$
Yep, a general construction rule would be great... for instance I'm not sure about even inputs, like N = 4...
$endgroup$
– digEmAll
Apr 14 at 15:12
7
$begingroup$
Please don't say "The algorithm to produce the stars is part of the programming challenge." This is not something most golfers enjoy when doing an ASCII art challenge, and sounds like an attempt to pawn off something that's the specifiers responsibility. That said, I'm surprised people are unclear on the construction here; it's two triangles overlapped like the challenge says. Would it help to explicitly say the size and offset of the triangles?
$endgroup$
– xnor
Apr 14 at 15:30
9
$begingroup$
@TimPederick Good catch about N=1 being different. I put in a note so solvers don't miss this. I think the challenge would be better without this special case though.
$endgroup$
– xnor
Apr 14 at 15:50
4
$begingroup$
@xnor: since n=1 was different, I could't infer a general rule...and IMO the rule should always be specified for ASCII art, otherwise I'm well allowed to print whatever I want outside the range of the defined examples ;)
$endgroup$
– digEmAll
Apr 14 at 16:18
|
show 5 more comments
4
$begingroup$
You also say it can be a function but it must "print to STDOUT". Is this intentional?
$endgroup$
– Sriotchilism O'Zaic
Apr 14 at 14:55
5
$begingroup$
Yep, a general construction rule would be great... for instance I'm not sure about even inputs, like N = 4...
$endgroup$
– digEmAll
Apr 14 at 15:12
7
$begingroup$
Please don't say "The algorithm to produce the stars is part of the programming challenge." This is not something most golfers enjoy when doing an ASCII art challenge, and sounds like an attempt to pawn off something that's the specifiers responsibility. That said, I'm surprised people are unclear on the construction here; it's two triangles overlapped like the challenge says. Would it help to explicitly say the size and offset of the triangles?
$endgroup$
– xnor
Apr 14 at 15:30
9
$begingroup$
@TimPederick Good catch about N=1 being different. I put in a note so solvers don't miss this. I think the challenge would be better without this special case though.
$endgroup$
– xnor
Apr 14 at 15:50
4
$begingroup$
@xnor: since n=1 was different, I could't infer a general rule...and IMO the rule should always be specified for ASCII art, otherwise I'm well allowed to print whatever I want outside the range of the defined examples ;)
$endgroup$
– digEmAll
Apr 14 at 16:18
4
4
$begingroup$
You also say it can be a function but it must "print to STDOUT". Is this intentional?
$endgroup$
– Sriotchilism O'Zaic
Apr 14 at 14:55
$begingroup$
You also say it can be a function but it must "print to STDOUT". Is this intentional?
$endgroup$
– Sriotchilism O'Zaic
Apr 14 at 14:55
5
5
$begingroup$
Yep, a general construction rule would be great... for instance I'm not sure about even inputs, like N = 4...
$endgroup$
– digEmAll
Apr 14 at 15:12
$begingroup$
Yep, a general construction rule would be great... for instance I'm not sure about even inputs, like N = 4...
$endgroup$
– digEmAll
Apr 14 at 15:12
7
7
$begingroup$
Please don't say "The algorithm to produce the stars is part of the programming challenge." This is not something most golfers enjoy when doing an ASCII art challenge, and sounds like an attempt to pawn off something that's the specifiers responsibility. That said, I'm surprised people are unclear on the construction here; it's two triangles overlapped like the challenge says. Would it help to explicitly say the size and offset of the triangles?
$endgroup$
– xnor
Apr 14 at 15:30
$begingroup$
Please don't say "The algorithm to produce the stars is part of the programming challenge." This is not something most golfers enjoy when doing an ASCII art challenge, and sounds like an attempt to pawn off something that's the specifiers responsibility. That said, I'm surprised people are unclear on the construction here; it's two triangles overlapped like the challenge says. Would it help to explicitly say the size and offset of the triangles?
$endgroup$
– xnor
Apr 14 at 15:30
9
9
$begingroup$
@TimPederick Good catch about N=1 being different. I put in a note so solvers don't miss this. I think the challenge would be better without this special case though.
$endgroup$
– xnor
Apr 14 at 15:50
$begingroup$
@TimPederick Good catch about N=1 being different. I put in a note so solvers don't miss this. I think the challenge would be better without this special case though.
$endgroup$
– xnor
Apr 14 at 15:50
4
4
$begingroup$
@xnor: since n=1 was different, I could't infer a general rule...and IMO the rule should always be specified for ASCII art, otherwise I'm well allowed to print whatever I want outside the range of the defined examples ;)
$endgroup$
– digEmAll
Apr 14 at 16:18
$begingroup$
@xnor: since n=1 was different, I could't infer a general rule...and IMO the rule should always be specified for ASCII art, otherwise I'm well allowed to print whatever I want outside the range of the defined examples ;)
$endgroup$
– digEmAll
Apr 14 at 16:18
|
show 5 more comments
13 Answers
13
active
oldest
votes
$begingroup$
05AB1E, 21 bytes
3*s≠-L·<sÅ0«Âø€à'*×.C
Try it online!
or as a Test Suite
Explanation
3* # multiply input by 3
s≠- # subtract 1 if the input isn't 1
L # push range [1 ... (3*n-(n!=1))]
·< # multiply by 2 and subtract 1 to get odd numbers
sÅ0« # append n zeroes
Âø # zip with a reversed copy
ۈ # get the largest number in each pair
'*× # repeat "*" for each number in the list
.C # format centered
$endgroup$
1
$begingroup$
Your output stars look correct.
$endgroup$
– Michael Karas
Apr 14 at 16:08
1
$begingroup$
I can find loads of alternatives for3*s≠-L·<
like6*s≠·-ÅÉ
or≠3/-6*ÅÉ
, but unfortunately none are shorter.. Nice answer, as always! :)
$endgroup$
– Kevin Cruijssen
Apr 14 at 17:47
add a comment |
$begingroup$
Haskell, 114 bytes
Builds a function g
which takes an number and produces a IO
monad that prints the star to STDOUT. I think this is ok.
f=replicate
a%b=mapM_(n->putStrLn$f(a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..a]++f b 0
g 1=4%1
g a=(3*a)%a
Try it online!
Explanation
First lets talk about the lambda.
n->putStrLn$f(a-n)' '++f(2*n-1)'*'
This takes a number, n
, to be drawn as stars. We print twice that many stars and then 1 more and pad it on the right to the size of the image. We pad this on the right by a
spaces to center the line of stars. We can use this lambda to draw each line.
From this lambda we create (%)
. (%)
starts with doing mapM_
with our lambda to turn a profile into the shape.
Now all we need to do is make a list of the profile for the star. We can do this by making a triangle first with [1..a]
, then padding it with some zeros ++replicate b 0
. If we take the profile of the triangle and reverse it we get the other half of the star. To super impose them we just make a new profile where each entry is the max of the two triangles. This is zipWith max
.
We then call this in one of two ways: as 3%1
for input of 1
and with (3*a-1)%a
otherwise.
From here we do a little bit of fiddling with some of the values to shave some bytes. Since 3*a-1
is rather long we offset some of our other values by 1 so that everything cancels and we get the intended behavior with 3*a
instead. Namely we start our list at 2
instead of 1
and do 2*n-3
instead of 2*n-1
to make up for the change.
Alternative version, 114 bytes
This one builds a point-free function (%)<*>min 2
f=replicate
a%b=mapM_(n->putStrLn$f(3*a-n)' '++f(2*(n-b)+1)'*')$zipWith max<*>reverse$[b..3*a]++f a 0
(%)<*>min 2
Try it online!
Handles all $N>1$, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..3*a]++f a 0
Try it online!
Handles all cases like the $N=1$ case, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-1)'*')$zipWith max<*>reverse$[1..3*a]++f a 0
Try it online!
$endgroup$
$begingroup$
Your output looks nice now.
$endgroup$
– Michael Karas
Apr 14 at 16:04
add a comment |
$begingroup$
R, 125 117 107 bytes
function(n,S=3*n+!n-1,P=pmax(I<-c(2:S*2-3,!1:n),rev(I)),`~`=strrep)cat(paste0(' '~S-2-P%/%2,'*'~P),sep='
')
Try it online!
- -18 thanks to @Giuseppe
Previous (different) approach :
R, 150 148 136 135 130 128 bytes
function(n,G=n<2,K=4*n-1+G)for(i in 1:K-1)cat(`[<-`(rep(' ',W<-3*n-2+G),1+W+c(-i:i*(i<K-n),-(j=K-i-1):j*(i>=n)),'*'),sep='','
')
Try it online!
- -14 thanks to @Kirill L.
- -1 thanks to @t-clausen.dk
- -7 thanks to @Giuseppe
$endgroup$
$begingroup$
Yeah, I also don't like those repeated S[]= assignments, and looks like this works
$endgroup$
– Kirill L.
Apr 14 at 17:55
$begingroup$
Great ! I was thinking to something like that... but I was having dinner :P
$endgroup$
– digEmAll
Apr 14 at 18:08
$begingroup$
Seems you can save a byte: i>n-1 can be rewritten to i>=n
$endgroup$
– t-clausen.dk
Apr 15 at 12:36
$begingroup$
@t-clausen.dk: yep, thanks!
$endgroup$
– digEmAll
Apr 15 at 16:54
1
$begingroup$
117 bytes on the newer version
$endgroup$
– Giuseppe
2 days ago
|
show 5 more comments
$begingroup$
JavaScript (ES8), 101 bytes
n=>(k=3*n+!~-n,g=y=>++y<k+n?`
`.padEnd(w=k-Math.max(y>n&&n-y+k,y<k&&y)).padEnd(2*k+~w,'*')+g(y):'')``
Try it online!
$endgroup$
add a comment |
$begingroup$
Python 2, 101 99 97 bytes
n=input()
x=2*(n>1)
for i in range(1,8*n,2):print('*'*[i,8*n-i-x][i+x>n*6or i/n/2%2]).center(6*n)
Try it online!
-2 bytes, thanks to Lynn
$endgroup$
$begingroup$
I'm reasonably sure you don't need the parens in the selector expression, soi+x>n*6or
saves two bytes.
$endgroup$
– Lynn
Apr 15 at 13:25
$begingroup$
@Lynn Thanks :)
$endgroup$
– TFeld
Apr 15 at 14:04
$begingroup$
You can even goi+x>~i/n/2%2*6*n
or something likei+x>3*n*(~i/n&2)
(both 96 bytes.)
$endgroup$
– Lynn
Apr 15 at 14:15
add a comment |
$begingroup$
Jelly, 21 bytes
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY
A full program accepting a positive integer which prints to STDOUT.
Try it online! Or see a test-suite.
How?
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY - Main Link: integer, n e.g. 3
3 - three 3
× - multiply (n by) 9
’ - decrement 8
Ị - insignificant (abs(n)<=1)? 0
+ - add 8
R - range [1,2,3,4,5,6,7,8]
Ṭ - un-truth (n) [0,0,1]
; - concatenate [1,2,3,4,5,6,7,8,0,0,1]
$ - last two links as a monad:
Ṛ - reverse [1,0,0,8,7,6,5,4,3,2,1]
» - maximum (vectorises) [1,2,3,8,7,6,7,8,3,2,1]
”* - an asterisk character '*'
ẋ - repeat (vectorises) ["*","**",...]
⁶ - a space character ' '
z - transpose with filler ["***********"," ********* ",...]
Ṛ - reverse [" * * "," ** ** ",...]
Z - transpose [" *"," **",...]
ŒB - bounce (vectorises) [" * "," *** ",...]
Y - join with newline characters " * n *** n..."
- implicit print
$endgroup$
add a comment |
$begingroup$
Canvas, 25 23 bytes
R:{⁸3×4M∔]∔{*×]↔⁸1≡?╪]┼
Try it here!
15 bytes without handling 1
$endgroup$
$begingroup$
Makes nice stars.
$endgroup$
– Michael Karas
Apr 14 at 16:07
add a comment |
$begingroup$
Jelly, 21 bytes
×’»ɗ3”*xⱮz⁶ɓ⁶x;»Ṛ$ŒBY
Try it online!
A monadic link accepting a single integer as its left argument and returning a newline-separated Jelly string with the star as its output. When run as a full program implicitly prints the star to STDOUT.
Explanation
ɗ3 | Last three links as a dyad with 3 as right argument:
× | Multiply (by 3)
’ | Decrease by 1
» | Maximum of this (and 3)
”*xⱮ | An implicit range from 1 to this many asterisks
z⁶ | Zip with space as filler
ɓ | Start a new dyadic chain with the input as left argument and the list of asterisks as right argument
⁶x | Input many spaces
; | Concatenated to the asterisk list
$ | Last two links as a monad:
»Ṛ | Maximum of this list and its reverse
ŒB | Bounce each list (i.e. mirror it without duplicating the middle entry)
Y | Join with newlines
$endgroup$
1
$begingroup$
I appreciate you writing the start the stylish way even though×3’»3
is the same length ^_^
$endgroup$
– Lynn
Apr 15 at 13:28
1
$begingroup$
@Lynn at the point I did that I thought I was going to be using another quick to merge multiple links, and it meant that I could do so within the maximum 4 allowed. However, once I decided to useɓ
it didn’t matter but I kept it because I still liked it!
$endgroup$
– Nick Kennedy
Apr 15 at 13:32
add a comment |
$begingroup$
Charcoal, 25 bytes
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*‖O¬C⁰¬⊖θ
Try it online! Link is to verbose version of code. Explanation:
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*
Draw an irregular pentagon representing the top right quarter of the star, but special-casing 1
to make the row an extra column wider.
‖O¬
Reflect to complete the star.
C⁰¬⊖θ
More special-casing to make the star for 1
an extra row taller.
Alternative solution, also 25 bytes:
∧¬⊖θ*G↗↓⊖׳N*‖O‖OO↓∧⊖θ⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
∧¬⊖θ*
Print an extra *
for the case of 1
.
G↗↓⊖׳N*
Draw the left half of a triangle of the appropriate size.
‖O
Reflect to complete the triangle.
‖OO↓∧⊖θ⊖⊗θ
Overlap it with its reflection, except in the case of 1
, in which case just reflect it.
14 bytes without special-casing for 1
:
G<⊖׳N*‖OO↑⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
G<⊖׳N*
Draw a triangle of the appropriate size.
‖OO↑⊖⊗θ
Overlap it with its reflection.
$endgroup$
add a comment |
$begingroup$
Perl 6, 74 bytes
[R,] $_o.&
Try it online!
Literally creates a triangle with the right proportions and overlaps it with a upside-down copy using the string or operator (~|
). Outputs as a list of lines with a leading and trailing line whitespace.
Explanation:
{.& # Anonymous code block
( )xx$_*3-($_>1) # Repeat n*3-(n!=1) times
' 'x--$+$_*3 # With a decreasing indentation
~'*'x$++*2+1 # Append an increasing triangle
# This creates the triangle
,|($ xx$_) # And add some padding lines
o # Pass the triangle to the combining function
Z~| # Zip string bitwise or
$_ # The list
[R,] $_ # With its reverse
$endgroup$
add a comment |
$begingroup$
J, 53 50 bytes
' *'~[:(+..)"1*@<:>:/~@i.@-~3*]
Try it online!
ungolfed
' *' ~ [: (+. .)"1 *@<: >:/~@i.@-~ 3 * ]
how
Use a function table (like a 3rd grade times table) to construct half the triangle by using >:
(greater than or equal) as the function. Then reverse each row, chop of the last column, and stitch the two sides together to get the full triangle (but made of 1 and 0). Add n
rows of zeros at the bottom. Finally reverse the whole thing, and overlay it on the original, using boolean or +.
to get the result. Then turn the 1 to *
and 0 to spaces.
$endgroup$
$begingroup$
Nice! Here's my solution - same length, different approach: Try it online!
$endgroup$
– Galen Ivanov
2 days ago
1
$begingroup$
Thanks. It sure feels like it could be golfed more, but I tried a handful of other approaches and wasn't able to do it.
$endgroup$
– Jonah
2 days ago
add a comment |
$begingroup$
T-SQL, 194 bytes
@
is the input value
@c
handles the width of the top triangle
@d
handles the width bottom triangle
@e
contains the output either @c
or @d
- this saves a few bytes
@f
handles the special case of 1 as input. @c*@=3
determines when to use @f
. 5 bytes cheaper than writing @c=3and @=1
DECLARE @ INT=8
,@c INT=1,@e INT=1,@d INT,@f INT=0SET @d=@*8-3r:PRINT
space(@*3-@e/2+@f/2)+replicate('*',@e-@f)SELECT
@c=nullif(@c,@*6-3)+2,@f=iif(@c*@=3,2,0),@d-=2-@f,@e=iif(@c>@d
or @c/2<@,@c,@d)IF @d>0goto r
Try it online
$endgroup$
add a comment |
$begingroup$
Japt -R
, 25 bytes
+5 bytes for n=1
:
õ cUon3*U-´UÎ)®ç* êÃê!U û
Try it
õ cUon3*U-´UÎ)®ç* êÃê!U û :Implicit input of integer U
õ :Range [1,U]
c :Concatenate
Uo : Range [0,U)
n : Subtract each from
3*U- : Multiply U by 3 and subtract
´U : Decrement U
Î : Get sign
) :End concat
® :Map each Z
ç* : Repeat "*" Z times
ê : Palindromise
à :End map
ê!U :If decremented U is 0, append reverse, else, palindromise
û :Centre pad each line with spaces to the length of the longest
:Implicitly join with newlines and output
$endgroup$
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "200"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Michael Karas is a new contributor. Be nice, and check out our Code of Conduct.
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%2f183174%2fstars-make-stars%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
13 Answers
13
active
oldest
votes
13 Answers
13
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
05AB1E, 21 bytes
3*s≠-L·<sÅ0«Âø€à'*×.C
Try it online!
or as a Test Suite
Explanation
3* # multiply input by 3
s≠- # subtract 1 if the input isn't 1
L # push range [1 ... (3*n-(n!=1))]
·< # multiply by 2 and subtract 1 to get odd numbers
sÅ0« # append n zeroes
Âø # zip with a reversed copy
ۈ # get the largest number in each pair
'*× # repeat "*" for each number in the list
.C # format centered
$endgroup$
1
$begingroup$
Your output stars look correct.
$endgroup$
– Michael Karas
Apr 14 at 16:08
1
$begingroup$
I can find loads of alternatives for3*s≠-L·<
like6*s≠·-ÅÉ
or≠3/-6*ÅÉ
, but unfortunately none are shorter.. Nice answer, as always! :)
$endgroup$
– Kevin Cruijssen
Apr 14 at 17:47
add a comment |
$begingroup$
05AB1E, 21 bytes
3*s≠-L·<sÅ0«Âø€à'*×.C
Try it online!
or as a Test Suite
Explanation
3* # multiply input by 3
s≠- # subtract 1 if the input isn't 1
L # push range [1 ... (3*n-(n!=1))]
·< # multiply by 2 and subtract 1 to get odd numbers
sÅ0« # append n zeroes
Âø # zip with a reversed copy
ۈ # get the largest number in each pair
'*× # repeat "*" for each number in the list
.C # format centered
$endgroup$
1
$begingroup$
Your output stars look correct.
$endgroup$
– Michael Karas
Apr 14 at 16:08
1
$begingroup$
I can find loads of alternatives for3*s≠-L·<
like6*s≠·-ÅÉ
or≠3/-6*ÅÉ
, but unfortunately none are shorter.. Nice answer, as always! :)
$endgroup$
– Kevin Cruijssen
Apr 14 at 17:47
add a comment |
$begingroup$
05AB1E, 21 bytes
3*s≠-L·<sÅ0«Âø€à'*×.C
Try it online!
or as a Test Suite
Explanation
3* # multiply input by 3
s≠- # subtract 1 if the input isn't 1
L # push range [1 ... (3*n-(n!=1))]
·< # multiply by 2 and subtract 1 to get odd numbers
sÅ0« # append n zeroes
Âø # zip with a reversed copy
ۈ # get the largest number in each pair
'*× # repeat "*" for each number in the list
.C # format centered
$endgroup$
05AB1E, 21 bytes
3*s≠-L·<sÅ0«Âø€à'*×.C
Try it online!
or as a Test Suite
Explanation
3* # multiply input by 3
s≠- # subtract 1 if the input isn't 1
L # push range [1 ... (3*n-(n!=1))]
·< # multiply by 2 and subtract 1 to get odd numbers
sÅ0« # append n zeroes
Âø # zip with a reversed copy
ۈ # get the largest number in each pair
'*× # repeat "*" for each number in the list
.C # format centered
edited Apr 14 at 15:56
answered Apr 14 at 15:40
EmignaEmigna
48.2k434146
48.2k434146
1
$begingroup$
Your output stars look correct.
$endgroup$
– Michael Karas
Apr 14 at 16:08
1
$begingroup$
I can find loads of alternatives for3*s≠-L·<
like6*s≠·-ÅÉ
or≠3/-6*ÅÉ
, but unfortunately none are shorter.. Nice answer, as always! :)
$endgroup$
– Kevin Cruijssen
Apr 14 at 17:47
add a comment |
1
$begingroup$
Your output stars look correct.
$endgroup$
– Michael Karas
Apr 14 at 16:08
1
$begingroup$
I can find loads of alternatives for3*s≠-L·<
like6*s≠·-ÅÉ
or≠3/-6*ÅÉ
, but unfortunately none are shorter.. Nice answer, as always! :)
$endgroup$
– Kevin Cruijssen
Apr 14 at 17:47
1
1
$begingroup$
Your output stars look correct.
$endgroup$
– Michael Karas
Apr 14 at 16:08
$begingroup$
Your output stars look correct.
$endgroup$
– Michael Karas
Apr 14 at 16:08
1
1
$begingroup$
I can find loads of alternatives for
3*s≠-L·<
like 6*s≠·-ÅÉ
or ≠3/-6*ÅÉ
, but unfortunately none are shorter.. Nice answer, as always! :)$endgroup$
– Kevin Cruijssen
Apr 14 at 17:47
$begingroup$
I can find loads of alternatives for
3*s≠-L·<
like 6*s≠·-ÅÉ
or ≠3/-6*ÅÉ
, but unfortunately none are shorter.. Nice answer, as always! :)$endgroup$
– Kevin Cruijssen
Apr 14 at 17:47
add a comment |
$begingroup$
Haskell, 114 bytes
Builds a function g
which takes an number and produces a IO
monad that prints the star to STDOUT. I think this is ok.
f=replicate
a%b=mapM_(n->putStrLn$f(a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..a]++f b 0
g 1=4%1
g a=(3*a)%a
Try it online!
Explanation
First lets talk about the lambda.
n->putStrLn$f(a-n)' '++f(2*n-1)'*'
This takes a number, n
, to be drawn as stars. We print twice that many stars and then 1 more and pad it on the right to the size of the image. We pad this on the right by a
spaces to center the line of stars. We can use this lambda to draw each line.
From this lambda we create (%)
. (%)
starts with doing mapM_
with our lambda to turn a profile into the shape.
Now all we need to do is make a list of the profile for the star. We can do this by making a triangle first with [1..a]
, then padding it with some zeros ++replicate b 0
. If we take the profile of the triangle and reverse it we get the other half of the star. To super impose them we just make a new profile where each entry is the max of the two triangles. This is zipWith max
.
We then call this in one of two ways: as 3%1
for input of 1
and with (3*a-1)%a
otherwise.
From here we do a little bit of fiddling with some of the values to shave some bytes. Since 3*a-1
is rather long we offset some of our other values by 1 so that everything cancels and we get the intended behavior with 3*a
instead. Namely we start our list at 2
instead of 1
and do 2*n-3
instead of 2*n-1
to make up for the change.
Alternative version, 114 bytes
This one builds a point-free function (%)<*>min 2
f=replicate
a%b=mapM_(n->putStrLn$f(3*a-n)' '++f(2*(n-b)+1)'*')$zipWith max<*>reverse$[b..3*a]++f a 0
(%)<*>min 2
Try it online!
Handles all $N>1$, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..3*a]++f a 0
Try it online!
Handles all cases like the $N=1$ case, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-1)'*')$zipWith max<*>reverse$[1..3*a]++f a 0
Try it online!
$endgroup$
$begingroup$
Your output looks nice now.
$endgroup$
– Michael Karas
Apr 14 at 16:04
add a comment |
$begingroup$
Haskell, 114 bytes
Builds a function g
which takes an number and produces a IO
monad that prints the star to STDOUT. I think this is ok.
f=replicate
a%b=mapM_(n->putStrLn$f(a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..a]++f b 0
g 1=4%1
g a=(3*a)%a
Try it online!
Explanation
First lets talk about the lambda.
n->putStrLn$f(a-n)' '++f(2*n-1)'*'
This takes a number, n
, to be drawn as stars. We print twice that many stars and then 1 more and pad it on the right to the size of the image. We pad this on the right by a
spaces to center the line of stars. We can use this lambda to draw each line.
From this lambda we create (%)
. (%)
starts with doing mapM_
with our lambda to turn a profile into the shape.
Now all we need to do is make a list of the profile for the star. We can do this by making a triangle first with [1..a]
, then padding it with some zeros ++replicate b 0
. If we take the profile of the triangle and reverse it we get the other half of the star. To super impose them we just make a new profile where each entry is the max of the two triangles. This is zipWith max
.
We then call this in one of two ways: as 3%1
for input of 1
and with (3*a-1)%a
otherwise.
From here we do a little bit of fiddling with some of the values to shave some bytes. Since 3*a-1
is rather long we offset some of our other values by 1 so that everything cancels and we get the intended behavior with 3*a
instead. Namely we start our list at 2
instead of 1
and do 2*n-3
instead of 2*n-1
to make up for the change.
Alternative version, 114 bytes
This one builds a point-free function (%)<*>min 2
f=replicate
a%b=mapM_(n->putStrLn$f(3*a-n)' '++f(2*(n-b)+1)'*')$zipWith max<*>reverse$[b..3*a]++f a 0
(%)<*>min 2
Try it online!
Handles all $N>1$, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..3*a]++f a 0
Try it online!
Handles all cases like the $N=1$ case, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-1)'*')$zipWith max<*>reverse$[1..3*a]++f a 0
Try it online!
$endgroup$
$begingroup$
Your output looks nice now.
$endgroup$
– Michael Karas
Apr 14 at 16:04
add a comment |
$begingroup$
Haskell, 114 bytes
Builds a function g
which takes an number and produces a IO
monad that prints the star to STDOUT. I think this is ok.
f=replicate
a%b=mapM_(n->putStrLn$f(a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..a]++f b 0
g 1=4%1
g a=(3*a)%a
Try it online!
Explanation
First lets talk about the lambda.
n->putStrLn$f(a-n)' '++f(2*n-1)'*'
This takes a number, n
, to be drawn as stars. We print twice that many stars and then 1 more and pad it on the right to the size of the image. We pad this on the right by a
spaces to center the line of stars. We can use this lambda to draw each line.
From this lambda we create (%)
. (%)
starts with doing mapM_
with our lambda to turn a profile into the shape.
Now all we need to do is make a list of the profile for the star. We can do this by making a triangle first with [1..a]
, then padding it with some zeros ++replicate b 0
. If we take the profile of the triangle and reverse it we get the other half of the star. To super impose them we just make a new profile where each entry is the max of the two triangles. This is zipWith max
.
We then call this in one of two ways: as 3%1
for input of 1
and with (3*a-1)%a
otherwise.
From here we do a little bit of fiddling with some of the values to shave some bytes. Since 3*a-1
is rather long we offset some of our other values by 1 so that everything cancels and we get the intended behavior with 3*a
instead. Namely we start our list at 2
instead of 1
and do 2*n-3
instead of 2*n-1
to make up for the change.
Alternative version, 114 bytes
This one builds a point-free function (%)<*>min 2
f=replicate
a%b=mapM_(n->putStrLn$f(3*a-n)' '++f(2*(n-b)+1)'*')$zipWith max<*>reverse$[b..3*a]++f a 0
(%)<*>min 2
Try it online!
Handles all $N>1$, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..3*a]++f a 0
Try it online!
Handles all cases like the $N=1$ case, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-1)'*')$zipWith max<*>reverse$[1..3*a]++f a 0
Try it online!
$endgroup$
Haskell, 114 bytes
Builds a function g
which takes an number and produces a IO
monad that prints the star to STDOUT. I think this is ok.
f=replicate
a%b=mapM_(n->putStrLn$f(a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..a]++f b 0
g 1=4%1
g a=(3*a)%a
Try it online!
Explanation
First lets talk about the lambda.
n->putStrLn$f(a-n)' '++f(2*n-1)'*'
This takes a number, n
, to be drawn as stars. We print twice that many stars and then 1 more and pad it on the right to the size of the image. We pad this on the right by a
spaces to center the line of stars. We can use this lambda to draw each line.
From this lambda we create (%)
. (%)
starts with doing mapM_
with our lambda to turn a profile into the shape.
Now all we need to do is make a list of the profile for the star. We can do this by making a triangle first with [1..a]
, then padding it with some zeros ++replicate b 0
. If we take the profile of the triangle and reverse it we get the other half of the star. To super impose them we just make a new profile where each entry is the max of the two triangles. This is zipWith max
.
We then call this in one of two ways: as 3%1
for input of 1
and with (3*a-1)%a
otherwise.
From here we do a little bit of fiddling with some of the values to shave some bytes. Since 3*a-1
is rather long we offset some of our other values by 1 so that everything cancels and we get the intended behavior with 3*a
instead. Namely we start our list at 2
instead of 1
and do 2*n-3
instead of 2*n-1
to make up for the change.
Alternative version, 114 bytes
This one builds a point-free function (%)<*>min 2
f=replicate
a%b=mapM_(n->putStrLn$f(3*a-n)' '++f(2*(n-b)+1)'*')$zipWith max<*>reverse$[b..3*a]++f a 0
(%)<*>min 2
Try it online!
Handles all $N>1$, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-3)'*')$zipWith max<*>reverse$[2..3*a]++f a 0
Try it online!
Handles all cases like the $N=1$ case, 98 bytes
f=replicate
g a=mapM_(n->putStrLn$f(3*a-n)' '++f(2*n-1)'*')$zipWith max<*>reverse$[1..3*a]++f a 0
Try it online!
edited Apr 15 at 4:59
answered Apr 14 at 15:28
Sriotchilism O'ZaicSriotchilism O'Zaic
35.7k10161369
35.7k10161369
$begingroup$
Your output looks nice now.
$endgroup$
– Michael Karas
Apr 14 at 16:04
add a comment |
$begingroup$
Your output looks nice now.
$endgroup$
– Michael Karas
Apr 14 at 16:04
$begingroup$
Your output looks nice now.
$endgroup$
– Michael Karas
Apr 14 at 16:04
$begingroup$
Your output looks nice now.
$endgroup$
– Michael Karas
Apr 14 at 16:04
add a comment |
$begingroup$
R, 125 117 107 bytes
function(n,S=3*n+!n-1,P=pmax(I<-c(2:S*2-3,!1:n),rev(I)),`~`=strrep)cat(paste0(' '~S-2-P%/%2,'*'~P),sep='
')
Try it online!
- -18 thanks to @Giuseppe
Previous (different) approach :
R, 150 148 136 135 130 128 bytes
function(n,G=n<2,K=4*n-1+G)for(i in 1:K-1)cat(`[<-`(rep(' ',W<-3*n-2+G),1+W+c(-i:i*(i<K-n),-(j=K-i-1):j*(i>=n)),'*'),sep='','
')
Try it online!
- -14 thanks to @Kirill L.
- -1 thanks to @t-clausen.dk
- -7 thanks to @Giuseppe
$endgroup$
$begingroup$
Yeah, I also don't like those repeated S[]= assignments, and looks like this works
$endgroup$
– Kirill L.
Apr 14 at 17:55
$begingroup$
Great ! I was thinking to something like that... but I was having dinner :P
$endgroup$
– digEmAll
Apr 14 at 18:08
$begingroup$
Seems you can save a byte: i>n-1 can be rewritten to i>=n
$endgroup$
– t-clausen.dk
Apr 15 at 12:36
$begingroup$
@t-clausen.dk: yep, thanks!
$endgroup$
– digEmAll
Apr 15 at 16:54
1
$begingroup$
117 bytes on the newer version
$endgroup$
– Giuseppe
2 days ago
|
show 5 more comments
$begingroup$
R, 125 117 107 bytes
function(n,S=3*n+!n-1,P=pmax(I<-c(2:S*2-3,!1:n),rev(I)),`~`=strrep)cat(paste0(' '~S-2-P%/%2,'*'~P),sep='
')
Try it online!
- -18 thanks to @Giuseppe
Previous (different) approach :
R, 150 148 136 135 130 128 bytes
function(n,G=n<2,K=4*n-1+G)for(i in 1:K-1)cat(`[<-`(rep(' ',W<-3*n-2+G),1+W+c(-i:i*(i<K-n),-(j=K-i-1):j*(i>=n)),'*'),sep='','
')
Try it online!
- -14 thanks to @Kirill L.
- -1 thanks to @t-clausen.dk
- -7 thanks to @Giuseppe
$endgroup$
$begingroup$
Yeah, I also don't like those repeated S[]= assignments, and looks like this works
$endgroup$
– Kirill L.
Apr 14 at 17:55
$begingroup$
Great ! I was thinking to something like that... but I was having dinner :P
$endgroup$
– digEmAll
Apr 14 at 18:08
$begingroup$
Seems you can save a byte: i>n-1 can be rewritten to i>=n
$endgroup$
– t-clausen.dk
Apr 15 at 12:36
$begingroup$
@t-clausen.dk: yep, thanks!
$endgroup$
– digEmAll
Apr 15 at 16:54
1
$begingroup$
117 bytes on the newer version
$endgroup$
– Giuseppe
2 days ago
|
show 5 more comments
$begingroup$
R, 125 117 107 bytes
function(n,S=3*n+!n-1,P=pmax(I<-c(2:S*2-3,!1:n),rev(I)),`~`=strrep)cat(paste0(' '~S-2-P%/%2,'*'~P),sep='
')
Try it online!
- -18 thanks to @Giuseppe
Previous (different) approach :
R, 150 148 136 135 130 128 bytes
function(n,G=n<2,K=4*n-1+G)for(i in 1:K-1)cat(`[<-`(rep(' ',W<-3*n-2+G),1+W+c(-i:i*(i<K-n),-(j=K-i-1):j*(i>=n)),'*'),sep='','
')
Try it online!
- -14 thanks to @Kirill L.
- -1 thanks to @t-clausen.dk
- -7 thanks to @Giuseppe
$endgroup$
R, 125 117 107 bytes
function(n,S=3*n+!n-1,P=pmax(I<-c(2:S*2-3,!1:n),rev(I)),`~`=strrep)cat(paste0(' '~S-2-P%/%2,'*'~P),sep='
')
Try it online!
- -18 thanks to @Giuseppe
Previous (different) approach :
R, 150 148 136 135 130 128 bytes
function(n,G=n<2,K=4*n-1+G)for(i in 1:K-1)cat(`[<-`(rep(' ',W<-3*n-2+G),1+W+c(-i:i*(i<K-n),-(j=K-i-1):j*(i>=n)),'*'),sep='','
')
Try it online!
- -14 thanks to @Kirill L.
- -1 thanks to @t-clausen.dk
- -7 thanks to @Giuseppe
edited 2 days ago
answered Apr 14 at 17:06
digEmAlldigEmAll
3,604515
3,604515
$begingroup$
Yeah, I also don't like those repeated S[]= assignments, and looks like this works
$endgroup$
– Kirill L.
Apr 14 at 17:55
$begingroup$
Great ! I was thinking to something like that... but I was having dinner :P
$endgroup$
– digEmAll
Apr 14 at 18:08
$begingroup$
Seems you can save a byte: i>n-1 can be rewritten to i>=n
$endgroup$
– t-clausen.dk
Apr 15 at 12:36
$begingroup$
@t-clausen.dk: yep, thanks!
$endgroup$
– digEmAll
Apr 15 at 16:54
1
$begingroup$
117 bytes on the newer version
$endgroup$
– Giuseppe
2 days ago
|
show 5 more comments
$begingroup$
Yeah, I also don't like those repeated S[]= assignments, and looks like this works
$endgroup$
– Kirill L.
Apr 14 at 17:55
$begingroup$
Great ! I was thinking to something like that... but I was having dinner :P
$endgroup$
– digEmAll
Apr 14 at 18:08
$begingroup$
Seems you can save a byte: i>n-1 can be rewritten to i>=n
$endgroup$
– t-clausen.dk
Apr 15 at 12:36
$begingroup$
@t-clausen.dk: yep, thanks!
$endgroup$
– digEmAll
Apr 15 at 16:54
1
$begingroup$
117 bytes on the newer version
$endgroup$
– Giuseppe
2 days ago
$begingroup$
Yeah, I also don't like those repeated S[]= assignments, and looks like this works
$endgroup$
– Kirill L.
Apr 14 at 17:55
$begingroup$
Yeah, I also don't like those repeated S[]= assignments, and looks like this works
$endgroup$
– Kirill L.
Apr 14 at 17:55
$begingroup$
Great ! I was thinking to something like that... but I was having dinner :P
$endgroup$
– digEmAll
Apr 14 at 18:08
$begingroup$
Great ! I was thinking to something like that... but I was having dinner :P
$endgroup$
– digEmAll
Apr 14 at 18:08
$begingroup$
Seems you can save a byte: i>n-1 can be rewritten to i>=n
$endgroup$
– t-clausen.dk
Apr 15 at 12:36
$begingroup$
Seems you can save a byte: i>n-1 can be rewritten to i>=n
$endgroup$
– t-clausen.dk
Apr 15 at 12:36
$begingroup$
@t-clausen.dk: yep, thanks!
$endgroup$
– digEmAll
Apr 15 at 16:54
$begingroup$
@t-clausen.dk: yep, thanks!
$endgroup$
– digEmAll
Apr 15 at 16:54
1
1
$begingroup$
117 bytes on the newer version
$endgroup$
– Giuseppe
2 days ago
$begingroup$
117 bytes on the newer version
$endgroup$
– Giuseppe
2 days ago
|
show 5 more comments
$begingroup$
JavaScript (ES8), 101 bytes
n=>(k=3*n+!~-n,g=y=>++y<k+n?`
`.padEnd(w=k-Math.max(y>n&&n-y+k,y<k&&y)).padEnd(2*k+~w,'*')+g(y):'')``
Try it online!
$endgroup$
add a comment |
$begingroup$
JavaScript (ES8), 101 bytes
n=>(k=3*n+!~-n,g=y=>++y<k+n?`
`.padEnd(w=k-Math.max(y>n&&n-y+k,y<k&&y)).padEnd(2*k+~w,'*')+g(y):'')``
Try it online!
$endgroup$
add a comment |
$begingroup$
JavaScript (ES8), 101 bytes
n=>(k=3*n+!~-n,g=y=>++y<k+n?`
`.padEnd(w=k-Math.max(y>n&&n-y+k,y<k&&y)).padEnd(2*k+~w,'*')+g(y):'')``
Try it online!
$endgroup$
JavaScript (ES8), 101 bytes
n=>(k=3*n+!~-n,g=y=>++y<k+n?`
`.padEnd(w=k-Math.max(y>n&&n-y+k,y<k&&y)).padEnd(2*k+~w,'*')+g(y):'')``
Try it online!
answered Apr 15 at 6:25
ArnauldArnauld
81.6k797336
81.6k797336
add a comment |
add a comment |
$begingroup$
Python 2, 101 99 97 bytes
n=input()
x=2*(n>1)
for i in range(1,8*n,2):print('*'*[i,8*n-i-x][i+x>n*6or i/n/2%2]).center(6*n)
Try it online!
-2 bytes, thanks to Lynn
$endgroup$
$begingroup$
I'm reasonably sure you don't need the parens in the selector expression, soi+x>n*6or
saves two bytes.
$endgroup$
– Lynn
Apr 15 at 13:25
$begingroup$
@Lynn Thanks :)
$endgroup$
– TFeld
Apr 15 at 14:04
$begingroup$
You can even goi+x>~i/n/2%2*6*n
or something likei+x>3*n*(~i/n&2)
(both 96 bytes.)
$endgroup$
– Lynn
Apr 15 at 14:15
add a comment |
$begingroup$
Python 2, 101 99 97 bytes
n=input()
x=2*(n>1)
for i in range(1,8*n,2):print('*'*[i,8*n-i-x][i+x>n*6or i/n/2%2]).center(6*n)
Try it online!
-2 bytes, thanks to Lynn
$endgroup$
$begingroup$
I'm reasonably sure you don't need the parens in the selector expression, soi+x>n*6or
saves two bytes.
$endgroup$
– Lynn
Apr 15 at 13:25
$begingroup$
@Lynn Thanks :)
$endgroup$
– TFeld
Apr 15 at 14:04
$begingroup$
You can even goi+x>~i/n/2%2*6*n
or something likei+x>3*n*(~i/n&2)
(both 96 bytes.)
$endgroup$
– Lynn
Apr 15 at 14:15
add a comment |
$begingroup$
Python 2, 101 99 97 bytes
n=input()
x=2*(n>1)
for i in range(1,8*n,2):print('*'*[i,8*n-i-x][i+x>n*6or i/n/2%2]).center(6*n)
Try it online!
-2 bytes, thanks to Lynn
$endgroup$
Python 2, 101 99 97 bytes
n=input()
x=2*(n>1)
for i in range(1,8*n,2):print('*'*[i,8*n-i-x][i+x>n*6or i/n/2%2]).center(6*n)
Try it online!
-2 bytes, thanks to Lynn
edited Apr 15 at 14:04
answered Apr 14 at 16:21
TFeldTFeld
16.6k21451
16.6k21451
$begingroup$
I'm reasonably sure you don't need the parens in the selector expression, soi+x>n*6or
saves two bytes.
$endgroup$
– Lynn
Apr 15 at 13:25
$begingroup$
@Lynn Thanks :)
$endgroup$
– TFeld
Apr 15 at 14:04
$begingroup$
You can even goi+x>~i/n/2%2*6*n
or something likei+x>3*n*(~i/n&2)
(both 96 bytes.)
$endgroup$
– Lynn
Apr 15 at 14:15
add a comment |
$begingroup$
I'm reasonably sure you don't need the parens in the selector expression, soi+x>n*6or
saves two bytes.
$endgroup$
– Lynn
Apr 15 at 13:25
$begingroup$
@Lynn Thanks :)
$endgroup$
– TFeld
Apr 15 at 14:04
$begingroup$
You can even goi+x>~i/n/2%2*6*n
or something likei+x>3*n*(~i/n&2)
(both 96 bytes.)
$endgroup$
– Lynn
Apr 15 at 14:15
$begingroup$
I'm reasonably sure you don't need the parens in the selector expression, so
i+x>n*6or
saves two bytes.$endgroup$
– Lynn
Apr 15 at 13:25
$begingroup$
I'm reasonably sure you don't need the parens in the selector expression, so
i+x>n*6or
saves two bytes.$endgroup$
– Lynn
Apr 15 at 13:25
$begingroup$
@Lynn Thanks :)
$endgroup$
– TFeld
Apr 15 at 14:04
$begingroup$
@Lynn Thanks :)
$endgroup$
– TFeld
Apr 15 at 14:04
$begingroup$
You can even go
i+x>~i/n/2%2*6*n
or something like i+x>3*n*(~i/n&2)
(both 96 bytes.)$endgroup$
– Lynn
Apr 15 at 14:15
$begingroup$
You can even go
i+x>~i/n/2%2*6*n
or something like i+x>3*n*(~i/n&2)
(both 96 bytes.)$endgroup$
– Lynn
Apr 15 at 14:15
add a comment |
$begingroup$
Jelly, 21 bytes
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY
A full program accepting a positive integer which prints to STDOUT.
Try it online! Or see a test-suite.
How?
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY - Main Link: integer, n e.g. 3
3 - three 3
× - multiply (n by) 9
’ - decrement 8
Ị - insignificant (abs(n)<=1)? 0
+ - add 8
R - range [1,2,3,4,5,6,7,8]
Ṭ - un-truth (n) [0,0,1]
; - concatenate [1,2,3,4,5,6,7,8,0,0,1]
$ - last two links as a monad:
Ṛ - reverse [1,0,0,8,7,6,5,4,3,2,1]
» - maximum (vectorises) [1,2,3,8,7,6,7,8,3,2,1]
”* - an asterisk character '*'
ẋ - repeat (vectorises) ["*","**",...]
⁶ - a space character ' '
z - transpose with filler ["***********"," ********* ",...]
Ṛ - reverse [" * * "," ** ** ",...]
Z - transpose [" *"," **",...]
ŒB - bounce (vectorises) [" * "," *** ",...]
Y - join with newline characters " * n *** n..."
- implicit print
$endgroup$
add a comment |
$begingroup$
Jelly, 21 bytes
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY
A full program accepting a positive integer which prints to STDOUT.
Try it online! Or see a test-suite.
How?
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY - Main Link: integer, n e.g. 3
3 - three 3
× - multiply (n by) 9
’ - decrement 8
Ị - insignificant (abs(n)<=1)? 0
+ - add 8
R - range [1,2,3,4,5,6,7,8]
Ṭ - un-truth (n) [0,0,1]
; - concatenate [1,2,3,4,5,6,7,8,0,0,1]
$ - last two links as a monad:
Ṛ - reverse [1,0,0,8,7,6,5,4,3,2,1]
» - maximum (vectorises) [1,2,3,8,7,6,7,8,3,2,1]
”* - an asterisk character '*'
ẋ - repeat (vectorises) ["*","**",...]
⁶ - a space character ' '
z - transpose with filler ["***********"," ********* ",...]
Ṛ - reverse [" * * "," ** ** ",...]
Z - transpose [" *"," **",...]
ŒB - bounce (vectorises) [" * "," *** ",...]
Y - join with newline characters " * n *** n..."
- implicit print
$endgroup$
add a comment |
$begingroup$
Jelly, 21 bytes
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY
A full program accepting a positive integer which prints to STDOUT.
Try it online! Or see a test-suite.
How?
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY - Main Link: integer, n e.g. 3
3 - three 3
× - multiply (n by) 9
’ - decrement 8
Ị - insignificant (abs(n)<=1)? 0
+ - add 8
R - range [1,2,3,4,5,6,7,8]
Ṭ - un-truth (n) [0,0,1]
; - concatenate [1,2,3,4,5,6,7,8,0,0,1]
$ - last two links as a monad:
Ṛ - reverse [1,0,0,8,7,6,5,4,3,2,1]
» - maximum (vectorises) [1,2,3,8,7,6,7,8,3,2,1]
”* - an asterisk character '*'
ẋ - repeat (vectorises) ["*","**",...]
⁶ - a space character ' '
z - transpose with filler ["***********"," ********* ",...]
Ṛ - reverse [" * * "," ** ** ",...]
Z - transpose [" *"," **",...]
ŒB - bounce (vectorises) [" * "," *** ",...]
Y - join with newline characters " * n *** n..."
- implicit print
$endgroup$
Jelly, 21 bytes
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY
A full program accepting a positive integer which prints to STDOUT.
Try it online! Or see a test-suite.
How?
×3’+ỊR;Ṭ»Ṛ$”*ẋz⁶ṚZŒBY - Main Link: integer, n e.g. 3
3 - three 3
× - multiply (n by) 9
’ - decrement 8
Ị - insignificant (abs(n)<=1)? 0
+ - add 8
R - range [1,2,3,4,5,6,7,8]
Ṭ - un-truth (n) [0,0,1]
; - concatenate [1,2,3,4,5,6,7,8,0,0,1]
$ - last two links as a monad:
Ṛ - reverse [1,0,0,8,7,6,5,4,3,2,1]
» - maximum (vectorises) [1,2,3,8,7,6,7,8,3,2,1]
”* - an asterisk character '*'
ẋ - repeat (vectorises) ["*","**",...]
⁶ - a space character ' '
z - transpose with filler ["***********"," ********* ",...]
Ṛ - reverse [" * * "," ** ** ",...]
Z - transpose [" *"," **",...]
ŒB - bounce (vectorises) [" * "," *** ",...]
Y - join with newline characters " * n *** n..."
- implicit print
edited Apr 14 at 20:29
answered Apr 14 at 19:15
Jonathan AllanJonathan Allan
54.5k537174
54.5k537174
add a comment |
add a comment |
$begingroup$
Canvas, 25 23 bytes
R:{⁸3×4M∔]∔{*×]↔⁸1≡?╪]┼
Try it here!
15 bytes without handling 1
$endgroup$
$begingroup$
Makes nice stars.
$endgroup$
– Michael Karas
Apr 14 at 16:07
add a comment |
$begingroup$
Canvas, 25 23 bytes
R:{⁸3×4M∔]∔{*×]↔⁸1≡?╪]┼
Try it here!
15 bytes without handling 1
$endgroup$
$begingroup$
Makes nice stars.
$endgroup$
– Michael Karas
Apr 14 at 16:07
add a comment |
$begingroup$
Canvas, 25 23 bytes
R:{⁸3×4M∔]∔{*×]↔⁸1≡?╪]┼
Try it here!
15 bytes without handling 1
$endgroup$
Canvas, 25 23 bytes
R:{⁸3×4M∔]∔{*×]↔⁸1≡?╪]┼
Try it here!
15 bytes without handling 1
edited Apr 14 at 16:06
answered Apr 14 at 15:49
dzaimadzaima
16.1k22060
16.1k22060
$begingroup$
Makes nice stars.
$endgroup$
– Michael Karas
Apr 14 at 16:07
add a comment |
$begingroup$
Makes nice stars.
$endgroup$
– Michael Karas
Apr 14 at 16:07
$begingroup$
Makes nice stars.
$endgroup$
– Michael Karas
Apr 14 at 16:07
$begingroup$
Makes nice stars.
$endgroup$
– Michael Karas
Apr 14 at 16:07
add a comment |
$begingroup$
Jelly, 21 bytes
×’»ɗ3”*xⱮz⁶ɓ⁶x;»Ṛ$ŒBY
Try it online!
A monadic link accepting a single integer as its left argument and returning a newline-separated Jelly string with the star as its output. When run as a full program implicitly prints the star to STDOUT.
Explanation
ɗ3 | Last three links as a dyad with 3 as right argument:
× | Multiply (by 3)
’ | Decrease by 1
» | Maximum of this (and 3)
”*xⱮ | An implicit range from 1 to this many asterisks
z⁶ | Zip with space as filler
ɓ | Start a new dyadic chain with the input as left argument and the list of asterisks as right argument
⁶x | Input many spaces
; | Concatenated to the asterisk list
$ | Last two links as a monad:
»Ṛ | Maximum of this list and its reverse
ŒB | Bounce each list (i.e. mirror it without duplicating the middle entry)
Y | Join with newlines
$endgroup$
1
$begingroup$
I appreciate you writing the start the stylish way even though×3’»3
is the same length ^_^
$endgroup$
– Lynn
Apr 15 at 13:28
1
$begingroup$
@Lynn at the point I did that I thought I was going to be using another quick to merge multiple links, and it meant that I could do so within the maximum 4 allowed. However, once I decided to useɓ
it didn’t matter but I kept it because I still liked it!
$endgroup$
– Nick Kennedy
Apr 15 at 13:32
add a comment |
$begingroup$
Jelly, 21 bytes
×’»ɗ3”*xⱮz⁶ɓ⁶x;»Ṛ$ŒBY
Try it online!
A monadic link accepting a single integer as its left argument and returning a newline-separated Jelly string with the star as its output. When run as a full program implicitly prints the star to STDOUT.
Explanation
ɗ3 | Last three links as a dyad with 3 as right argument:
× | Multiply (by 3)
’ | Decrease by 1
» | Maximum of this (and 3)
”*xⱮ | An implicit range from 1 to this many asterisks
z⁶ | Zip with space as filler
ɓ | Start a new dyadic chain with the input as left argument and the list of asterisks as right argument
⁶x | Input many spaces
; | Concatenated to the asterisk list
$ | Last two links as a monad:
»Ṛ | Maximum of this list and its reverse
ŒB | Bounce each list (i.e. mirror it without duplicating the middle entry)
Y | Join with newlines
$endgroup$
1
$begingroup$
I appreciate you writing the start the stylish way even though×3’»3
is the same length ^_^
$endgroup$
– Lynn
Apr 15 at 13:28
1
$begingroup$
@Lynn at the point I did that I thought I was going to be using another quick to merge multiple links, and it meant that I could do so within the maximum 4 allowed. However, once I decided to useɓ
it didn’t matter but I kept it because I still liked it!
$endgroup$
– Nick Kennedy
Apr 15 at 13:32
add a comment |
$begingroup$
Jelly, 21 bytes
×’»ɗ3”*xⱮz⁶ɓ⁶x;»Ṛ$ŒBY
Try it online!
A monadic link accepting a single integer as its left argument and returning a newline-separated Jelly string with the star as its output. When run as a full program implicitly prints the star to STDOUT.
Explanation
ɗ3 | Last three links as a dyad with 3 as right argument:
× | Multiply (by 3)
’ | Decrease by 1
» | Maximum of this (and 3)
”*xⱮ | An implicit range from 1 to this many asterisks
z⁶ | Zip with space as filler
ɓ | Start a new dyadic chain with the input as left argument and the list of asterisks as right argument
⁶x | Input many spaces
; | Concatenated to the asterisk list
$ | Last two links as a monad:
»Ṛ | Maximum of this list and its reverse
ŒB | Bounce each list (i.e. mirror it without duplicating the middle entry)
Y | Join with newlines
$endgroup$
Jelly, 21 bytes
×’»ɗ3”*xⱮz⁶ɓ⁶x;»Ṛ$ŒBY
Try it online!
A monadic link accepting a single integer as its left argument and returning a newline-separated Jelly string with the star as its output. When run as a full program implicitly prints the star to STDOUT.
Explanation
ɗ3 | Last three links as a dyad with 3 as right argument:
× | Multiply (by 3)
’ | Decrease by 1
» | Maximum of this (and 3)
”*xⱮ | An implicit range from 1 to this many asterisks
z⁶ | Zip with space as filler
ɓ | Start a new dyadic chain with the input as left argument and the list of asterisks as right argument
⁶x | Input many spaces
; | Concatenated to the asterisk list
$ | Last two links as a monad:
»Ṛ | Maximum of this list and its reverse
ŒB | Bounce each list (i.e. mirror it without duplicating the middle entry)
Y | Join with newlines
answered Apr 14 at 20:08
Nick KennedyNick Kennedy
1,83149
1,83149
1
$begingroup$
I appreciate you writing the start the stylish way even though×3’»3
is the same length ^_^
$endgroup$
– Lynn
Apr 15 at 13:28
1
$begingroup$
@Lynn at the point I did that I thought I was going to be using another quick to merge multiple links, and it meant that I could do so within the maximum 4 allowed. However, once I decided to useɓ
it didn’t matter but I kept it because I still liked it!
$endgroup$
– Nick Kennedy
Apr 15 at 13:32
add a comment |
1
$begingroup$
I appreciate you writing the start the stylish way even though×3’»3
is the same length ^_^
$endgroup$
– Lynn
Apr 15 at 13:28
1
$begingroup$
@Lynn at the point I did that I thought I was going to be using another quick to merge multiple links, and it meant that I could do so within the maximum 4 allowed. However, once I decided to useɓ
it didn’t matter but I kept it because I still liked it!
$endgroup$
– Nick Kennedy
Apr 15 at 13:32
1
1
$begingroup$
I appreciate you writing the start the stylish way even though
×3’»3
is the same length ^_^$endgroup$
– Lynn
Apr 15 at 13:28
$begingroup$
I appreciate you writing the start the stylish way even though
×3’»3
is the same length ^_^$endgroup$
– Lynn
Apr 15 at 13:28
1
1
$begingroup$
@Lynn at the point I did that I thought I was going to be using another quick to merge multiple links, and it meant that I could do so within the maximum 4 allowed. However, once I decided to use
ɓ
it didn’t matter but I kept it because I still liked it!$endgroup$
– Nick Kennedy
Apr 15 at 13:32
$begingroup$
@Lynn at the point I did that I thought I was going to be using another quick to merge multiple links, and it meant that I could do so within the maximum 4 allowed. However, once I decided to use
ɓ
it didn’t matter but I kept it because I still liked it!$endgroup$
– Nick Kennedy
Apr 15 at 13:32
add a comment |
$begingroup$
Charcoal, 25 bytes
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*‖O¬C⁰¬⊖θ
Try it online! Link is to verbose version of code. Explanation:
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*
Draw an irregular pentagon representing the top right quarter of the star, but special-casing 1
to make the row an extra column wider.
‖O¬
Reflect to complete the star.
C⁰¬⊖θ
More special-casing to make the star for 1
an extra row taller.
Alternative solution, also 25 bytes:
∧¬⊖θ*G↗↓⊖׳N*‖O‖OO↓∧⊖θ⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
∧¬⊖θ*
Print an extra *
for the case of 1
.
G↗↓⊖׳N*
Draw the left half of a triangle of the appropriate size.
‖O
Reflect to complete the triangle.
‖OO↓∧⊖θ⊖⊗θ
Overlap it with its reflection, except in the case of 1
, in which case just reflect it.
14 bytes without special-casing for 1
:
G<⊖׳N*‖OO↑⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
G<⊖׳N*
Draw a triangle of the appropriate size.
‖OO↑⊖⊗θ
Overlap it with its reflection.
$endgroup$
add a comment |
$begingroup$
Charcoal, 25 bytes
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*‖O¬C⁰¬⊖θ
Try it online! Link is to verbose version of code. Explanation:
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*
Draw an irregular pentagon representing the top right quarter of the star, but special-casing 1
to make the row an extra column wider.
‖O¬
Reflect to complete the star.
C⁰¬⊖θ
More special-casing to make the star for 1
an extra row taller.
Alternative solution, also 25 bytes:
∧¬⊖θ*G↗↓⊖׳N*‖O‖OO↓∧⊖θ⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
∧¬⊖θ*
Print an extra *
for the case of 1
.
G↗↓⊖׳N*
Draw the left half of a triangle of the appropriate size.
‖O
Reflect to complete the triangle.
‖OO↓∧⊖θ⊖⊗θ
Overlap it with its reflection, except in the case of 1
, in which case just reflect it.
14 bytes without special-casing for 1
:
G<⊖׳N*‖OO↑⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
G<⊖׳N*
Draw a triangle of the appropriate size.
‖OO↑⊖⊗θ
Overlap it with its reflection.
$endgroup$
add a comment |
$begingroup$
Charcoal, 25 bytes
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*‖O¬C⁰¬⊖θ
Try it online! Link is to verbose version of code. Explanation:
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*
Draw an irregular pentagon representing the top right quarter of the star, but special-casing 1
to make the row an extra column wider.
‖O¬
Reflect to complete the star.
C⁰¬⊖θ
More special-casing to make the star for 1
an extra row taller.
Alternative solution, also 25 bytes:
∧¬⊖θ*G↗↓⊖׳N*‖O‖OO↓∧⊖θ⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
∧¬⊖θ*
Print an extra *
for the case of 1
.
G↗↓⊖׳N*
Draw the left half of a triangle of the appropriate size.
‖O
Reflect to complete the triangle.
‖OO↓∧⊖θ⊖⊗θ
Overlap it with its reflection, except in the case of 1
, in which case just reflect it.
14 bytes without special-casing for 1
:
G<⊖׳N*‖OO↑⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
G<⊖׳N*
Draw a triangle of the appropriate size.
‖OO↑⊖⊗θ
Overlap it with its reflection.
$endgroup$
Charcoal, 25 bytes
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*‖O¬C⁰¬⊖θ
Try it online! Link is to verbose version of code. Explanation:
G↙θ←⁺⊗θ¬⊖θ↑⊗θ↘⊕θ*
Draw an irregular pentagon representing the top right quarter of the star, but special-casing 1
to make the row an extra column wider.
‖O¬
Reflect to complete the star.
C⁰¬⊖θ
More special-casing to make the star for 1
an extra row taller.
Alternative solution, also 25 bytes:
∧¬⊖θ*G↗↓⊖׳N*‖O‖OO↓∧⊖θ⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
∧¬⊖θ*
Print an extra *
for the case of 1
.
G↗↓⊖׳N*
Draw the left half of a triangle of the appropriate size.
‖O
Reflect to complete the triangle.
‖OO↓∧⊖θ⊖⊗θ
Overlap it with its reflection, except in the case of 1
, in which case just reflect it.
14 bytes without special-casing for 1
:
G<⊖׳N*‖OO↑⊖⊗θ
Try it online! Link is to verbose version of code. Explanation:
G<⊖׳N*
Draw a triangle of the appropriate size.
‖OO↑⊖⊗θ
Overlap it with its reflection.
edited Apr 14 at 21:26
answered Apr 14 at 21:15
NeilNeil
83k745179
83k745179
add a comment |
add a comment |
$begingroup$
Perl 6, 74 bytes
[R,] $_o.&
Try it online!
Literally creates a triangle with the right proportions and overlaps it with a upside-down copy using the string or operator (~|
). Outputs as a list of lines with a leading and trailing line whitespace.
Explanation:
{.& # Anonymous code block
( )xx$_*3-($_>1) # Repeat n*3-(n!=1) times
' 'x--$+$_*3 # With a decreasing indentation
~'*'x$++*2+1 # Append an increasing triangle
# This creates the triangle
,|($ xx$_) # And add some padding lines
o # Pass the triangle to the combining function
Z~| # Zip string bitwise or
$_ # The list
[R,] $_ # With its reverse
$endgroup$
add a comment |
$begingroup$
Perl 6, 74 bytes
[R,] $_o.&
Try it online!
Literally creates a triangle with the right proportions and overlaps it with a upside-down copy using the string or operator (~|
). Outputs as a list of lines with a leading and trailing line whitespace.
Explanation:
{.& # Anonymous code block
( )xx$_*3-($_>1) # Repeat n*3-(n!=1) times
' 'x--$+$_*3 # With a decreasing indentation
~'*'x$++*2+1 # Append an increasing triangle
# This creates the triangle
,|($ xx$_) # And add some padding lines
o # Pass the triangle to the combining function
Z~| # Zip string bitwise or
$_ # The list
[R,] $_ # With its reverse
$endgroup$
add a comment |
$begingroup$
Perl 6, 74 bytes
[R,] $_o.&
Try it online!
Literally creates a triangle with the right proportions and overlaps it with a upside-down copy using the string or operator (~|
). Outputs as a list of lines with a leading and trailing line whitespace.
Explanation:
{.& # Anonymous code block
( )xx$_*3-($_>1) # Repeat n*3-(n!=1) times
' 'x--$+$_*3 # With a decreasing indentation
~'*'x$++*2+1 # Append an increasing triangle
# This creates the triangle
,|($ xx$_) # And add some padding lines
o # Pass the triangle to the combining function
Z~| # Zip string bitwise or
$_ # The list
[R,] $_ # With its reverse
$endgroup$
Perl 6, 74 bytes
[R,] $_o.&
Try it online!
Literally creates a triangle with the right proportions and overlaps it with a upside-down copy using the string or operator (~|
). Outputs as a list of lines with a leading and trailing line whitespace.
Explanation:
{.& # Anonymous code block
( )xx$_*3-($_>1) # Repeat n*3-(n!=1) times
' 'x--$+$_*3 # With a decreasing indentation
~'*'x$++*2+1 # Append an increasing triangle
# This creates the triangle
,|($ xx$_) # And add some padding lines
o # Pass the triangle to the combining function
Z~| # Zip string bitwise or
$_ # The list
[R,] $_ # With its reverse
answered Apr 15 at 6:37
Jo KingJo King
27.3k365132
27.3k365132
add a comment |
add a comment |
$begingroup$
J, 53 50 bytes
' *'~[:(+..)"1*@<:>:/~@i.@-~3*]
Try it online!
ungolfed
' *' ~ [: (+. .)"1 *@<: >:/~@i.@-~ 3 * ]
how
Use a function table (like a 3rd grade times table) to construct half the triangle by using >:
(greater than or equal) as the function. Then reverse each row, chop of the last column, and stitch the two sides together to get the full triangle (but made of 1 and 0). Add n
rows of zeros at the bottom. Finally reverse the whole thing, and overlay it on the original, using boolean or +.
to get the result. Then turn the 1 to *
and 0 to spaces.
$endgroup$
$begingroup$
Nice! Here's my solution - same length, different approach: Try it online!
$endgroup$
– Galen Ivanov
2 days ago
1
$begingroup$
Thanks. It sure feels like it could be golfed more, but I tried a handful of other approaches and wasn't able to do it.
$endgroup$
– Jonah
2 days ago
add a comment |
$begingroup$
J, 53 50 bytes
' *'~[:(+..)"1*@<:>:/~@i.@-~3*]
Try it online!
ungolfed
' *' ~ [: (+. .)"1 *@<: >:/~@i.@-~ 3 * ]
how
Use a function table (like a 3rd grade times table) to construct half the triangle by using >:
(greater than or equal) as the function. Then reverse each row, chop of the last column, and stitch the two sides together to get the full triangle (but made of 1 and 0). Add n
rows of zeros at the bottom. Finally reverse the whole thing, and overlay it on the original, using boolean or +.
to get the result. Then turn the 1 to *
and 0 to spaces.
$endgroup$
$begingroup$
Nice! Here's my solution - same length, different approach: Try it online!
$endgroup$
– Galen Ivanov
2 days ago
1
$begingroup$
Thanks. It sure feels like it could be golfed more, but I tried a handful of other approaches and wasn't able to do it.
$endgroup$
– Jonah
2 days ago
add a comment |
$begingroup$
J, 53 50 bytes
' *'~[:(+..)"1*@<:>:/~@i.@-~3*]
Try it online!
ungolfed
' *' ~ [: (+. .)"1 *@<: >:/~@i.@-~ 3 * ]
how
Use a function table (like a 3rd grade times table) to construct half the triangle by using >:
(greater than or equal) as the function. Then reverse each row, chop of the last column, and stitch the two sides together to get the full triangle (but made of 1 and 0). Add n
rows of zeros at the bottom. Finally reverse the whole thing, and overlay it on the original, using boolean or +.
to get the result. Then turn the 1 to *
and 0 to spaces.
$endgroup$
J, 53 50 bytes
' *'~[:(+..)"1*@<:>:/~@i.@-~3*]
Try it online!
ungolfed
' *' ~ [: (+. .)"1 *@<: >:/~@i.@-~ 3 * ]
how
Use a function table (like a 3rd grade times table) to construct half the triangle by using >:
(greater than or equal) as the function. Then reverse each row, chop of the last column, and stitch the two sides together to get the full triangle (but made of 1 and 0). Add n
rows of zeros at the bottom. Finally reverse the whole thing, and overlay it on the original, using boolean or +.
to get the result. Then turn the 1 to *
and 0 to spaces.
edited Apr 16 at 2:42
answered Apr 16 at 2:13
JonahJonah
2,8281019
2,8281019
$begingroup$
Nice! Here's my solution - same length, different approach: Try it online!
$endgroup$
– Galen Ivanov
2 days ago
1
$begingroup$
Thanks. It sure feels like it could be golfed more, but I tried a handful of other approaches and wasn't able to do it.
$endgroup$
– Jonah
2 days ago
add a comment |
$begingroup$
Nice! Here's my solution - same length, different approach: Try it online!
$endgroup$
– Galen Ivanov
2 days ago
1
$begingroup$
Thanks. It sure feels like it could be golfed more, but I tried a handful of other approaches and wasn't able to do it.
$endgroup$
– Jonah
2 days ago
$begingroup$
Nice! Here's my solution - same length, different approach: Try it online!
$endgroup$
– Galen Ivanov
2 days ago
$begingroup$
Nice! Here's my solution - same length, different approach: Try it online!
$endgroup$
– Galen Ivanov
2 days ago
1
1
$begingroup$
Thanks. It sure feels like it could be golfed more, but I tried a handful of other approaches and wasn't able to do it.
$endgroup$
– Jonah
2 days ago
$begingroup$
Thanks. It sure feels like it could be golfed more, but I tried a handful of other approaches and wasn't able to do it.
$endgroup$
– Jonah
2 days ago
add a comment |
$begingroup$
T-SQL, 194 bytes
@
is the input value
@c
handles the width of the top triangle
@d
handles the width bottom triangle
@e
contains the output either @c
or @d
- this saves a few bytes
@f
handles the special case of 1 as input. @c*@=3
determines when to use @f
. 5 bytes cheaper than writing @c=3and @=1
DECLARE @ INT=8
,@c INT=1,@e INT=1,@d INT,@f INT=0SET @d=@*8-3r:PRINT
space(@*3-@e/2+@f/2)+replicate('*',@e-@f)SELECT
@c=nullif(@c,@*6-3)+2,@f=iif(@c*@=3,2,0),@d-=2-@f,@e=iif(@c>@d
or @c/2<@,@c,@d)IF @d>0goto r
Try it online
$endgroup$
add a comment |
$begingroup$
T-SQL, 194 bytes
@
is the input value
@c
handles the width of the top triangle
@d
handles the width bottom triangle
@e
contains the output either @c
or @d
- this saves a few bytes
@f
handles the special case of 1 as input. @c*@=3
determines when to use @f
. 5 bytes cheaper than writing @c=3and @=1
DECLARE @ INT=8
,@c INT=1,@e INT=1,@d INT,@f INT=0SET @d=@*8-3r:PRINT
space(@*3-@e/2+@f/2)+replicate('*',@e-@f)SELECT
@c=nullif(@c,@*6-3)+2,@f=iif(@c*@=3,2,0),@d-=2-@f,@e=iif(@c>@d
or @c/2<@,@c,@d)IF @d>0goto r
Try it online
$endgroup$
add a comment |
$begingroup$
T-SQL, 194 bytes
@
is the input value
@c
handles the width of the top triangle
@d
handles the width bottom triangle
@e
contains the output either @c
or @d
- this saves a few bytes
@f
handles the special case of 1 as input. @c*@=3
determines when to use @f
. 5 bytes cheaper than writing @c=3and @=1
DECLARE @ INT=8
,@c INT=1,@e INT=1,@d INT,@f INT=0SET @d=@*8-3r:PRINT
space(@*3-@e/2+@f/2)+replicate('*',@e-@f)SELECT
@c=nullif(@c,@*6-3)+2,@f=iif(@c*@=3,2,0),@d-=2-@f,@e=iif(@c>@d
or @c/2<@,@c,@d)IF @d>0goto r
Try it online
$endgroup$
T-SQL, 194 bytes
@
is the input value
@c
handles the width of the top triangle
@d
handles the width bottom triangle
@e
contains the output either @c
or @d
- this saves a few bytes
@f
handles the special case of 1 as input. @c*@=3
determines when to use @f
. 5 bytes cheaper than writing @c=3and @=1
DECLARE @ INT=8
,@c INT=1,@e INT=1,@d INT,@f INT=0SET @d=@*8-3r:PRINT
space(@*3-@e/2+@f/2)+replicate('*',@e-@f)SELECT
@c=nullif(@c,@*6-3)+2,@f=iif(@c*@=3,2,0),@d-=2-@f,@e=iif(@c>@d
or @c/2<@,@c,@d)IF @d>0goto r
Try it online
edited 2 days ago
answered Apr 14 at 22:19
t-clausen.dkt-clausen.dk
2,114414
2,114414
add a comment |
add a comment |
$begingroup$
Japt -R
, 25 bytes
+5 bytes for n=1
:
õ cUon3*U-´UÎ)®ç* êÃê!U û
Try it
õ cUon3*U-´UÎ)®ç* êÃê!U û :Implicit input of integer U
õ :Range [1,U]
c :Concatenate
Uo : Range [0,U)
n : Subtract each from
3*U- : Multiply U by 3 and subtract
´U : Decrement U
Î : Get sign
) :End concat
® :Map each Z
ç* : Repeat "*" Z times
ê : Palindromise
à :End map
ê!U :If decremented U is 0, append reverse, else, palindromise
û :Centre pad each line with spaces to the length of the longest
:Implicitly join with newlines and output
$endgroup$
add a comment |
$begingroup$
Japt -R
, 25 bytes
+5 bytes for n=1
:
õ cUon3*U-´UÎ)®ç* êÃê!U û
Try it
õ cUon3*U-´UÎ)®ç* êÃê!U û :Implicit input of integer U
õ :Range [1,U]
c :Concatenate
Uo : Range [0,U)
n : Subtract each from
3*U- : Multiply U by 3 and subtract
´U : Decrement U
Î : Get sign
) :End concat
® :Map each Z
ç* : Repeat "*" Z times
ê : Palindromise
à :End map
ê!U :If decremented U is 0, append reverse, else, palindromise
û :Centre pad each line with spaces to the length of the longest
:Implicitly join with newlines and output
$endgroup$
add a comment |
$begingroup$
Japt -R
, 25 bytes
+5 bytes for n=1
:
õ cUon3*U-´UÎ)®ç* êÃê!U û
Try it
õ cUon3*U-´UÎ)®ç* êÃê!U û :Implicit input of integer U
õ :Range [1,U]
c :Concatenate
Uo : Range [0,U)
n : Subtract each from
3*U- : Multiply U by 3 and subtract
´U : Decrement U
Î : Get sign
) :End concat
® :Map each Z
ç* : Repeat "*" Z times
ê : Palindromise
à :End map
ê!U :If decremented U is 0, append reverse, else, palindromise
û :Centre pad each line with spaces to the length of the longest
:Implicitly join with newlines and output
$endgroup$
Japt -R
, 25 bytes
+5 bytes for n=1
:
õ cUon3*U-´UÎ)®ç* êÃê!U û
Try it
õ cUon3*U-´UÎ)®ç* êÃê!U û :Implicit input of integer U
õ :Range [1,U]
c :Concatenate
Uo : Range [0,U)
n : Subtract each from
3*U- : Multiply U by 3 and subtract
´U : Decrement U
Î : Get sign
) :End concat
® :Map each Z
ç* : Repeat "*" Z times
ê : Palindromise
à :End map
ê!U :If decremented U is 0, append reverse, else, palindromise
û :Centre pad each line with spaces to the length of the longest
:Implicitly join with newlines and output
edited Apr 15 at 17:24
answered Apr 14 at 22:13
ShaggyShaggy
19k21768
19k21768
add a comment |
add a comment |
Michael Karas is a new contributor. Be nice, and check out our Code of Conduct.
Michael Karas is a new contributor. Be nice, and check out our Code of Conduct.
Michael Karas is a new contributor. Be nice, and check out our Code of Conduct.
Michael Karas is a new contributor. Be nice, and check out our Code of Conduct.
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).
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%2f183174%2fstars-make-stars%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
4
$begingroup$
You also say it can be a function but it must "print to STDOUT". Is this intentional?
$endgroup$
– Sriotchilism O'Zaic
Apr 14 at 14:55
5
$begingroup$
Yep, a general construction rule would be great... for instance I'm not sure about even inputs, like N = 4...
$endgroup$
– digEmAll
Apr 14 at 15:12
7
$begingroup$
Please don't say "The algorithm to produce the stars is part of the programming challenge." This is not something most golfers enjoy when doing an ASCII art challenge, and sounds like an attempt to pawn off something that's the specifiers responsibility. That said, I'm surprised people are unclear on the construction here; it's two triangles overlapped like the challenge says. Would it help to explicitly say the size and offset of the triangles?
$endgroup$
– xnor
Apr 14 at 15:30
9
$begingroup$
@TimPederick Good catch about N=1 being different. I put in a note so solvers don't miss this. I think the challenge would be better without this special case though.
$endgroup$
– xnor
Apr 14 at 15:50
4
$begingroup$
@xnor: since n=1 was different, I could't infer a general rule...and IMO the rule should always be specified for ASCII art, otherwise I'm well allowed to print whatever I want outside the range of the defined examples ;)
$endgroup$
– digEmAll
Apr 14 at 16:18