Python - 211 h=input()*2 d=h/4 q='|' e=' ' w=e*d u='\n' s='+'+'-'*h+'+' y=e+w+s+u i='' v=q+e*h+q for l in range(0,d):y+=e*(d-l)+'/'+e*h+'/'+e*l+q+u;i+=v+e*(d-l-1)+'/'+u print y+s+w+q+u+''.join([v+w+q+u]*(d-1))+v+w+'+'+u+i+s I'd like to note that I took some ideas from JPvdMerwe (Using a string to print once, and the one-liner for that I didn't know was correct syntax in Python) ---------- First version - Python - 256 n = int(raw_input()) d=n/2 h=n*2 q='|' e=' ' w=e*d s='+'+'-'*h+'+' r=range print e+w+s for l in r(d,0,-1): print e*l+'/'+e*h+'/'+e*(d-l)+q print s+w+q v=q+e*h+q for l in r(d+1,n): print v+w+q print v+w+'+' for l in r(0,d): print v+e*(d-l-1)+'/' print s I'm sure there's a couple of stuff that can be done better, I'm gonna be trying to improve it later on today.