17
\$\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\$
11
  • \$\begingroup\$ But it doesn't squiggle at all!. Would have loved if inputs > 5 made it squiggle. \$\endgroup\$
    – Optimizer
    Jul 21, 2015 at 20:15
  • 25
    \$\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, 2015 at 20:27
  • 8
    \$\begingroup\$ You can all stop downvoting already! I think OP got the message. \$\endgroup\$
    – xnor
    Jul 21, 2015 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, 2015 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, 2015 at 11:07

38 Answers 38

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\$
1
  • 7
    \$\begingroup\$ Do you want to build a snow lamp? \$\endgroup\$
    – Alex A.
    Jul 21, 2015 at 21:52
5
\$\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\$
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\$
5
  • 1
    \$\begingroup\$ Changes nothing but the look: " /_\\" should be "/__\\". BTW, is that \r necessary? \$\endgroup\$
    – manatwork
    Aug 2, 2016 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, 2016 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, 2016 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, 2016 at 10:42
  • \$\begingroup\$ Bonjour Frédéric, if you're still active on PPCG you can save 5 bytes \$\endgroup\$
    – JayCe
    Jul 31, 2018 at 14:18
3
\$\begingroup\$

Straw, 26 bytes (non-competing)

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

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

\$\endgroup\$
2
  • \$\begingroup\$ How does this work? \$\endgroup\$ Sep 9, 2016 at 20:50
  • \$\begingroup\$ @BetaDecay *therefore noncompeting \$\endgroup\$ Sep 9, 2016 at 20:51
2
\$\begingroup\$

CJam, 18 bytes

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

Sample run for input 5:

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

Try it online here

\$\endgroup\$
0
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\$
2
\$\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\$
0
2
\$\begingroup\$

1+, 114 bytes

11+""*+"*";";";;1.1##(A|11+""""**+;)"""*"**;""*""*+*";1+;"\"1+/<1+#(A)11+"*(|1+"1+")1+*+;1()"*"1+*++";;1()*"1+*+;

You all! Stop complaining about the length, this is the best I could do! Go blame Parcly Taxel for designing such a bowly language!

Shade is $$$$.

\$\endgroup\$
2
  • \$\begingroup\$ Throwing shade I see \$\endgroup\$
    – Razetime
    Aug 21, 2020 at 10:44
  • \$\begingroup\$ @Razetime What do you mean \$\endgroup\$ Aug 21, 2020 at 10:46
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\$
0
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\$
2
  • \$\begingroup\$ nice lamp shade ) \$\endgroup\$
    – mazzy
    Aug 1, 2018 at 8:50
  • 1
    \$\begingroup\$ try this 8008;," ()"*"$args";"/__\" \$\endgroup\$
    – mazzy
    Aug 1, 2018 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
  • 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, 2018 at 2:33
1
\$\begingroup\$

Japt, 17 bytes

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

Try it online!

Output for 5 is:

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

MAWP, 65 61 bytes

@95W2M!;2A!!;;2W2M;[25W;84W;85W!;1M;1A]25W;95W2M!;2W1M!!;;3A;

I'm sure it can be golfed by a few more bytes when displaying characters.

Try it!

\$\endgroup\$
4
  • \$\begingroup\$ Why? :( (15 chars) \$\endgroup\$ Aug 21, 2020 at 9:58
  • \$\begingroup\$ gimme 1+ answer \$\endgroup\$
    – Razetime
    Aug 21, 2020 at 10:01
  • \$\begingroup\$ Ok workin' on it \$\endgroup\$ Aug 21, 2020 at 10:01
  • \$\begingroup\$ ...done. Almost two times as long as your program... \$\endgroup\$ Aug 21, 2020 at 10:39
1
\$\begingroup\$

Vyxal j, 15 bytes

×d?(‛ ()‛/_WvøṀ

Try it Online!

Example output:

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

I kinda golfed the shade.

×d              # two asterisks
  ?(   )        # Input times...
    ‛ (         # Push the two-char ` (`
        ‛/_     # Push the two-char `/_`
           W    # Push the entire stack
            vøṀ # Ascii-art mirror each item. 
\$\endgroup\$
1
\$\begingroup\$

Pascal, 118 characters

Strings consist of char values. The available char values beyond the bare minimum (i. e. necessary to write Pascal language elements) are implementation-defined. Provided that all char values present are available in your implementation, you can write:

program p(input,output);var l:integer;begin
read(l);writeLn('🐬‥💦〜');for l:=1 to l do
writeLn(' ()');write('/__\')end.

Input:

4

Output (pun intended):

🐬‥💦〜
 ()
 ()
 ()
 ()
/__\

This lamp grants you a wish if you rub it. 😂

\$\endgroup\$
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\$

PyMin, 24 bytes / 17 characters

»ƒ+ѿ+" ø\n"*¬+ɓ+ѿ

Output for 5:

Fizz
 ()
 ()
 ()
 ()
 ()
Buzz

Shorter version with v0.5:

21 bytes / 13 characters

»ƒƜ+" ø¶"¯+ɓƜ
\$\endgroup\$
1
  • \$\begingroup\$ The base of the lamp must be /__\. \$\endgroup\$
    – snail_
    Aug 7, 2018 at 3:08

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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