13
\$\begingroup\$

While moving, I broke my lamp. Now, I need a new one. It's your job to make me a lamp! I'm not sure what size I want, though I know I want a squiggly one.

Your program/function must take in a number input, and print out a lamp with that many squiggles/bumps.

Examples:

Input:2

Output:

/--\
 ()
 ()
/__\

Input:3

Output:

/--\
 ()
 ()
 ()
/__\

Input:5

Output:

/--\
 ()
 ()
 ()
 ()
 ()
/__\

Rules:

  • 0 & negative numbers don't matter
  • To give the lamps (an this challenge) more of a variety, you must change the lamp shade.
    • They must be 4 characters wide and 1 character high.
    • They can be in any shape, including non-lamp-shade shapes.
    • They must not contain whitespace.
    • The base must stay the same.
  • You must show an example input & output with your lamp shade.
  • Shortest code wins!
\$\endgroup\$
  • \$\begingroup\$ But it doesn't squiggle at all!. Would have loved if inputs > 5 made it squiggle. \$\endgroup\$ – Optimizer Jul 21 '15 at 20:15
  • 22
    \$\begingroup\$ I downvoted. I think this is a boring ASCII art. There's a repeated section in the middle and no overlap between the parts, which are also too short to compress. It just has form ABBB..BBBC. The requirement to change a section just means people will use a short built-in string. \$\endgroup\$ – xnor Jul 21 '15 at 20:27
  • 7
    \$\begingroup\$ You can all stop downvoting already! I think OP got the message. \$\endgroup\$ – xnor Jul 21 '15 at 21:16
  • 1
    \$\begingroup\$ @xnor I feel sorry for the poor guy. This is probably one of the most downvoted questions ever :/ i.stack.imgur.com/T4A7X.jpg \$\endgroup\$ – Beta Decay Jul 22 '15 at 7:08
  • 1
    \$\begingroup\$ Not voted in any way myself, but given the similarity with Draw an ASCII Lightning Bolt, I can understand the downvoters. Some little twist like having larger base for higher lamp, or having a repeated decoration only on each nth squiggle would made it a little bit different. \$\endgroup\$ – manatwork Jul 22 '15 at 11:07

34 Answers 34

4
\$\begingroup\$

Pyth - 16 bytes

Uses quotes for the shade since N is preinitialized to that.

*N4VQ+d`();"/__\

Try it online here.

* 4            String repetition 4x, implicit print
 N             Preinitialized to Quote
VQ             For N in range(Q)
 +             String concat
  d            Space
   `()         Repr of empty tuple
;              Close for loop
"/__\          Implicitly print string, implicit close quote

Sample for 5:

""""
 ()
 ()
 ()
 ()
 ()
/__\
\$\endgroup\$
7
\$\begingroup\$

Snowman 0.2.0, 42 chars

)vg10sB]"[--]
"sP:" ()
"sP;bR"/__"sP92wRsP

Sample run:

llama@llama:...Code/snowman/ppcg53483lamp$ snowman lamp.snowman
5
[--]
 ()
 ()
 ()
 ()
 ()
/__\

So I only noticed that I forgot to implement the ability to escape backslashes within strings when I solved this challenge. That's definitely going to be a thing in the next version, but for now, here's what I did to print the final line:

"/__"sP92wRsP

92 is the ASCII code for a backslash, wR wraps it in an array, and I can now print it with sP because "strings" in Snowman are actually just arrays of numbers.

\$\endgroup\$
  • 7
    \$\begingroup\$ Do you want to build a snow lamp? \$\endgroup\$ – Alex A. Jul 21 '15 at 21:52
3
\$\begingroup\$

><>, 43 41 38 bytes

"\__/"aiv
"&-1v!?:<&a" ()
~"!_\
?!;o>l

Input via a code point, e.g. space is 32. This uses part of the program's own code as the lampshade, resulting in something that looks like a satellite dish:

~\_!
 ()
 ()
 ()
 ()
 ()
/__\

(Suggestion thanks to @randomra)

For three more bytes, we can change the third line to add a bit more customisation:

"\__/"aiv
"&-1v!?:<&a" ()
__\"\~"/
?!;o>l

This produces one of those lamps which shoot light upwards, for lack of a better way of putting it:

\__/
 ()
 ()
 ()
 ()
 ()
/__\
\$\endgroup\$
3
\$\begingroup\$

R, 54 52 46 bytes

cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")

In this version, input and output are almost mixed together :

{in/out}PUT :

> cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n")
1: 4
2: 
Read 1 item
RRRR
 ()
 ()
 ()
 ()
/__\

EDIT 1 : -2 bytes thanks to @manatwork comment.
EDIT 2 : -6 bytes. Full credit goes to @manatwork again

\$\endgroup\$
  • 1
    \$\begingroup\$ Changes nothing but the look: " /_\\" should be "/__\\". BTW, is that \r necessary? \$\endgroup\$ – manatwork Aug 2 '16 at 10:17
  • \$\begingroup\$ @manatwork It did change the shape of the lamp's foot, making it more stable + your remark about \r saved me two bytes ! Should have re-read my code ! Thanks ! \$\endgroup\$ – Frédéric Aug 2 '16 at 10:22
  • 1
    \$\begingroup\$ Hmm… Weird tool. Can't make it to work non-interactively. Anyway, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n") seems to work. \$\endgroup\$ – manatwork Aug 2 '16 at 10:37
  • \$\begingroup\$ @manatwork : well... I've never thought that this could work ! It's indeed a nice solution. R is full of surprises ! \$\endgroup\$ – Frédéric Aug 2 '16 at 10:42
  • \$\begingroup\$ Bonjour Frédéric, if you're still active on PPCG you can save 5 bytes \$\endgroup\$ – JayCe Jul 31 '18 at 14:18
3
\$\begingroup\$

Straw, 26 bytes (non-competing)

<#~('--'
)>( ()
)-*>(/__\)>

Use '--' as lamp shade, take input in unary now in decimal

\$\endgroup\$
  • \$\begingroup\$ How does this work? \$\endgroup\$ – Conor O'Brien Sep 9 '16 at 20:50
  • \$\begingroup\$ @BetaDecay *therefore noncompeting \$\endgroup\$ – Conor O'Brien Sep 9 '16 at 20:51
2
\$\begingroup\$

CJam, 18 bytes

"/__\
"" ()
"ri*1$

Sample run for input 5:

/__\
 ()
 ()
 ()
 ()
 ()
/__\

Try it online here

\$\endgroup\$
2
\$\begingroup\$

JavaScript ES6, 34 bytes

i=>`|==|
${` ()
`.repeat(i)}/__\\`

The newlines are significant

Example with input of 5:

|==|
 ()
 ()
 ()
 ()
 ()
/__\
\$\endgroup\$
2
\$\begingroup\$

sed, 28 bytes

s#.# ()\n#g
s#^\|$#/__\\\n#g

Takes input in unary. The shade is the obvious selection (same as the base).

Test run

$ echo -n 111 | sed -f lamp.sed
/__\
 ()
 ()
 ()
/__\
\$\endgroup\$
1
\$\begingroup\$

Gema: 30 characters

*=gema\n@repeat{*;\ ()\n}/__\\

Sample run:

bash-4.3$ gema '*=gema\n@repeat{*;\ ()\n}/__\\' <<< 3
gema
 ()
 ()
 ()
/__\
\$\endgroup\$
1
\$\begingroup\$

jq: 30 characters

(29 characters code + 1 character command line option.)

8888,(range(.)|" ()"),"/__\\"

Sample run:

bash-4.3$ jq -r '8888,(range(.)|" ()"),"/__\\"' <<< 3
8888
 ()
 ()
 ()
/__\

On-line test (Passing -r through URL is not supported – check Raw Output yourself.)

\$\endgroup\$
1
\$\begingroup\$

C, 54 bytes

Call f() with the desired height of the lamp.

f(n){for(puts("||||");n--;puts(" ()"));puts("/__\\");}

Try it on ideone.

Example output for 5:

||||
 ()
 ()
 ()
 ()
 ()
/__\
\$\endgroup\$
1
\$\begingroup\$

Pyke, 15 bytes

" ()"~mQAD"/__\

Try it here!

     ~m         - 1000
" ()"           -  " ()"
       QAD      - duplicate(^) input times
          "/__\ - "/__\"

Outputs:

1000
 ()
 ()
/__\
\$\endgroup\$
1
\$\begingroup\$

Kotlin, 36 bytes

{"|MM|\n${" ()\n".repeat(it)}/__\\"}

Try it online!

\$\endgroup\$
1
\$\begingroup\$

Whitespace, 169 bytes

[S S S N
_Push_0][T  N
T   T   _Read_STDIN_as_integer][S S S T S T T   T   S S N
_Push_92_\][S S S T S T T   T   T   T   N
_Push_95__][S N
S _Duplicate_95__][S S S T  S T T   T   T   N
_Push_47_/][N
S S N
_Create_Label_LOOP][S S S N
_Push_0][T  T   T   _Retrieve_at_address_0][S S S T N
_Push_1][T  S S T   _Subtract][S N
S _Duplicate][S S S N
_Push_0][S N
T   _Swap_top_two][T    T   S _Store_at_address_0][N
T   T   S N
_If_neg_Jump_to_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S T S S T   N
_Push_41_)][S S S T S T S S S N
_Push_40_(][S S S T S S S S S N
_Push_32_space][N
S N
N
_Jump_to_Label_LOOP][N
S S S N
_Create_Label_PRINT][S S S T    S T S N
_Push_10_newline][S S S T   S S S S T   N
_Push_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][S N
S _Duplicate_33_!][N
S S T   N
_Create_Label_LOOP_2][T N
S S _Print_as_character][N
S N
T   N
_Jump_to_Label_LOOP_2]

Letters S (space), T (tab), and N (new-line) added as highlighting only.
[..._some_action] added as explanation only.

Try it online (with raw spaces, tabs and new-lines only).

Explanation in pseudo-code:

Pushes all characters in reversed order to the stack, and then prints them in a loop.

Integer i = STDIN as input
Push "\__/" to the stack
Start LOOP:
  i = i - 1
  if(i is negative):
    Go to function PRINT
  Push "\n)( " to the stack
  Go to next iteration of LOOP

function PRINT:
  Push "\n!!!!" to the stack
  Start LOOP_2:
    Print top as character to STDOUT
    Go to next iteration of LOOP_2

NOTE: i in the pseudo-code above is stored back in the heap in every iteration of LOOP, because we don't want to leave it on the stack to be printed at the end.

\$\endgroup\$
1
\$\begingroup\$

Canvas, 8 bytes

(×_¶/e⟳║

Try it here!

Explanation:

(×        repeat "(" input times
  _¶/e    encase it on both sides in "_\n/"
          the 1st line is surrounded in "_" and the second ends and starts with "/"
      ⟳   rotate the string clockwise without changing characters
       ║  palindromize horizontally with 0 overlap
\$\endgroup\$
1
\$\begingroup\$

05AB1E, 17 15 13 11 bytes

„ (и„/_.ø)˜∞

-2 bytes (17 → 15) thanks to @EriktheOutgolfer.
-2 byte (13 → 11) after being inspired by @dzaima's Canvas answer.

Cap is the same as the base (/__\).

Explanation:

„ (            # Literal string " ("
   и           # Repeat " (" the input amount of times
               #  i.e. " (" and 3 → [' (',' (',' (']
    „/_        # Literal string "/_"
       .ø      # Surround the list of " (" with "/_" on both ends
               #  i.e. [' (',' (',' ('] → ['/_',[' (',' (',' (',' ('],'/_']
         ˜     # Flatten this list
               #  i.e. ['/_',[' (',' (',' ('],'/_'] → ['/_',' (',' (',' (','/_']
          ∞    # Mirror each item
               #  i.e. ['/_',' (',' (',' (','/_'] → ['/__\',' () ',' () ',' () ','/__\']
               # And output the list new-line delimited (implicitly due to the mirror)

Old 13 bytes answer:

„/_D„ (Iиs)˜∞

Try it online.

\$\endgroup\$
1
\$\begingroup\$

Excel, 31 bytes

An anonymous worksheet function that takes input as a numeric from range [A1] and outputs to the calling cell.

This lamp is musical - and will help to liven and lighten up your day.

="/\
"&REPT(" ()
",A1)&"/__\"

Output

I love lamp

\$\endgroup\$
1
\$\begingroup\$

PowerShell 5.1, 28 26 Bytes

Thanks Mazzy for 2 bytes

8008;," ()"*"$args";"/__\"

Since the shade can be any 4 characters, using a number saves a pair of quotes. The hardest part was finding a nice looking shade.

Output:

PS C:\Users\ItsMe\Desktop> .\scratch.ps1 4
8008
 ()
 ()
 ()
 ()
/__\
\$\endgroup\$
  • \$\begingroup\$ nice lamp shade ) \$\endgroup\$ – mazzy Aug 1 '18 at 8:50
  • 1
    \$\begingroup\$ try this 8008;," ()"*"$args";"/__\" \$\endgroup\$ – mazzy Aug 1 '18 at 8:56
1
\$\begingroup\$

Python 2, 36 bytes

print"-"*4+"\n ()"*input()+"\n/__\\"

For input 4:

----
 ()
 ()
 ()
 ()
/__\

Note that for Python that any lamp shade using pipes is a byte less.

-1 bytes thanks to @Alex!

\$\endgroup\$
  • 1
    \$\begingroup\$ I think if you change the lampshade to a single character and multiply it by 4 you can save one byte: print"-"*4+"\n ()"*input()+"\n/__\\" \$\endgroup\$ – Alex Aug 5 '18 at 2:33
1
\$\begingroup\$

Japt, 17 bytes

Æ` ()`Ãi¥² p"/__\

Try it online!

Output for 5 is:

====
 ()
 ()
 ()
 ()
 ()
/__\
\$\endgroup\$
  • \$\begingroup\$ Nice trick with the ¥. \$\endgroup\$ – Shaggy Feb 1 at 0:03
  • \$\begingroup\$ @Shaggy Thank you! :D \$\endgroup\$ – Oliver Feb 1 at 1:44
0
\$\begingroup\$

SWI-Prolog, 73 60 bytes

a(X):-write(golf),writef("%r",["\n ()",X]),write("\n/__\\").

a(5). outputs

golf
 ()
 ()
 ()
 ()
 ()
/__\
\$\endgroup\$
0
\$\begingroup\$

Julia, 36 bytes

n->print("|~~|\n"*" ()\n"^n*"/__\\")

This creates an unnamed function that takes an integer as input and prints to stdout.

Example:

julia> f(4)
|~~|
 ()
 ()
 ()
 ()
/__\
\$\endgroup\$
0
\$\begingroup\$

Bash + coreutils, 37 bytes

yes ' ()'|sed '1i####
'$1'{a/__\\
q}'

The newlines are necessary and counted in the bytes total. GNU sed is required.

Run:

./squiggly_lamp.sh 2

Output:

####
 ()
 ()
/__\
\$\endgroup\$
0
\$\begingroup\$

Ruby, 42 bytes

i=gets.to_i
puts "|--|\n#{" ()\n"*i}/__\\"
\$\endgroup\$
0
\$\begingroup\$

Neoscript, 28 bytes

{n|"[~~]
"+" ()
"*n+"/--\\"}
\$\endgroup\$
0
\$\begingroup\$

Java 7 11, 84 83 37 bytes

n->"i!!i\n"+" ()\n".repeat(n)+"/__\\"

Try it online. (NOTE: Java 11 isn't supported on TIO yet, so String.repeat(int) has been emulated with repeat(String,int) for the same byte-count.)

Uses i!!i as cap. ¡!!¡ looks better, but is two bytes more.

Explanation:

n->                    // Method with integer parameter and String return-type
  "i!!i\n"             //  Return the cap + new-line
  " ()\n".repeat(n)    //   appended with " ()" and a new-line `n` amount of times
  "/__\\"              //   append with "/__\"
\$\endgroup\$
0
\$\begingroup\$

Perl 5, 24 bytes

$_=$<.'
 ()'x$_.'
/--\
'

Try it online!

Uses 1000 as the cap.

\$\endgroup\$
0
\$\begingroup\$

Ahead, 38 bytes

I"|MM|"Wr
~W" ()"oN<s!:-1~
@W"/__\"oN<

Try it online!

Samples

1
|MM|
 ()
/__\

2
|MM|
 ()
 ()
/__\

3
|MM|
 ()
 ()
 ()
/__\
\$\endgroup\$
  • 2
    \$\begingroup\$ Could you maybe provide a link to an online testing environment so one can easily run your submission? \$\endgroup\$ – Jonathan Frech Jul 30 '18 at 3:32
  • \$\begingroup\$ @JonathanFrech TIO link now available \$\endgroup\$ – snail_ Jul 31 '18 at 2:19
0
\$\begingroup\$

Befunge-93, 50 bytes

"\__/"&v
0-1_v#:<g00" ()"*25p0
*25$<>:#,_@#::::"_"

Try it online!

Example with Input 3

____
 ()
 ()
 ()
/__\
\$\endgroup\$
0
\$\begingroup\$

PHP, 38 bytes

/--\<?while($argn--)echo"
 ()"?>

/__\

Save to file; run as pipe with -nF or try it online.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.