# My Squiggly Lamp

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!
• But it doesn't squiggle at all!. Would have loved if inputs > 5 made it squiggle. – Optimizer Jul 21 '15 at 20:15
• 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. – xnor Jul 21 '15 at 20:27
• You can all stop downvoting already! I think OP got the message. – xnor Jul 21 '15 at 21:16
• @xnor I feel sorry for the poor guy. This is probably one of the most downvoted questions ever :/ i.stack.imgur.com/T4A7X.jpg – Beta Decay Jul 22 '15 at 7:08
• 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. – manatwork Jul 22 '15 at 11:07

# Pyth - 16 bytes

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

*N4VQ+d();"/__\

* 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:

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


# 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. • Do you want to build a snow lamp? – Alex A. Jul 21 '15 at 21:52 # ><>, 4341 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: \__/ () () () () () /__\  # R, 5452 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 • Changes nothing but the look: " /_\\" should be "/__\\". BTW, is that \r necessary? – manatwork Aug 2 '16 at 10:17 • @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 ! – Frédéric Aug 2 '16 at 10:22 • Hmm… Weird tool. Can't make it to work non-interactively. Anyway, cat("RRRR",rep(" ()",scan()),"/__\\",sep="\n") seems to work. – manatwork Aug 2 '16 at 10:37 • @manatwork : well... I've never thought that this could work ! It's indeed a nice solution. R is full of surprises ! – Frédéric Aug 2 '16 at 10:42 • Bonjour Frédéric, if you're still active on PPCG you can save 5 bytes – JayCe Jul 31 '18 at 14:18 ## Straw, 26 bytes (non-competing) <#~('--' )>( () )-*>(/__\)>  Use '--' as lamp shade, take input in unary now in decimal • How does this work? – Conor O'Brien Sep 9 '16 at 20:50 • @BetaDecay *therefore noncompeting – Conor O'Brien Sep 9 '16 at 20:51 # CJam, 18 bytes "/__\ "" () "ri*1$


Sample run for input 5:

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


Try it online here

# JavaScript ES6, 34 bytes

i=>|==|
${ () .repeat(i)}/__\\  The newlines are significant Example with input of 5: |==| () () () () () /__\  # sed, 28 bytes s#.# ()\n#g s#^\|$#/__\\\n#g


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

$echo -n 111 | sed -f lamp.sed /__\ () () () /__\  # Gema: 30 characters *=gema\n@repeat{*;\ ()\n}/__\\  Sample run: bash-4.3$ gema '*=gema\n@repeat{*;\ ()\n}/__\\' <<< 3
gema
()
()
()
/__\


# 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.) # 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: |||| () () () () () /__\  ## Pyke, 15 bytes " ()"~mQAD"/__\  Try it here!  ~m - 1000 " ()" - " ()" QAD - duplicate(^) input times "/__\ - "/__\"  Outputs: 1000 () () /__\  # Kotlin, 36 bytes {"|MM|\n${" ()\n".repeat(it)}/__\\"}


Try it online!

# 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   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.

# Canvas, 8 bytes

(×_¶/ｅ⟳║


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


# 05AB1E, 171513 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)


„/_D„ (Iиs)˜∞


Try it online.

# 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)&"/__\"


# 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 () () () () /__\  • nice lamp shade ) – mazzy Aug 1 '18 at 8:50 • try this 8008;," ()"*"$args";"/__\" – mazzy Aug 1 '18 at 8:56

# 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!

• 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/__\\" – Alex Aug 5 '18 at 2:33

# Japt, 17 bytes

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


Try it online!

Output for 5 is:

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

• Nice trick with the ¥. – Shaggy Feb 1 at 0:03
• @Shaggy Thank you! :D – Oliver Feb 1 at 1:44

# SWI-Prolog, 73 60 bytes

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


a(5). outputs

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


# 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)
|~~|
()
()
()
()
/__\


## 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: #### () () /__\  ## Ruby, 42 bytes i=gets.to_i puts "|--|\n#{" ()\n"*i}/__\\"  ## Neoscript, 28 bytes {n|"[~~] "+" () "*n+"/--\\"}  # Java 7 11, 8483 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 "/__\"  ## Perl 5, 24 bytes $_=$<.' ()'x$_.'
/--\
'


Try it online!

Uses 1000 as the cap.

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


Try it online!

## Samples

1
|MM|
()
/__\

2
|MM|
()
()
/__\

3
|MM|
()
()
()
/__\

• Could you maybe provide a link to an online testing environment so one can easily run your submission? – Jonathan Frech Jul 30 '18 at 3:32
• @JonathanFrech TIO link now available – snail_ Jul 31 '18 at 2:19

# Befunge-93, 50 bytes

"\__/"&v
0-1_v#:<g00" ()"*25p0
*25$<>:#,_@#::::"_"  Try it online! Example with Input 3 ____ () () () /__\  # PHP, 38 bytes /--\<?while($argn--)echo"
()"?>

/__\


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