Build a simple room in ASCII-art
Python 3, 230 223 222 217 bytes
def f(a):b=a[0]+[0];m=' _';print('\n'.join([' '+'_'*b[0]+' ']+['|'+' '*min(b[l],b[l+1])+m[b[l+1]<1]*(b[l]>b[l+1])+m[k]*(b[l]-b[l+1]-1)+'|'+m[k]*(b[l+1]-b[l]-1)for l,i in enumerate(zip(*a))for k in[0]*(i[1]-1)+[1]]))
Thanks to @StewieGriffin @KevinLau for their help
Results
>>> f([[2, 14, 6, 8, 4, 18, 2, 10, 4, 2],[1, 2, 3, 1, 2, 1, 1, 1, 2, 1]])
__
| |___________
| |
| _______|
| |
| |
| |_
| ___|
| |
| |_____________
| _______________|
| |_______
| _____|
| |
| _|
|__|
JavaScript (ES6) 174
The only critical part is the horizontal row joining 2 parts of different widths, with the vertical bar on right side that can be in the middle or at the right end.
(p,h,q=-1,R=(n,s=' ')=>s.repeat(n))=>[...p,0].map((x,i)=>(x>q?p=x:(p=q,q=x),(~q?`
|`+R(q+(x<p)-!x)+R(x>q,'|'):' ')+R(p+~q+!x,'_')+R(x<p,'|')+R(h[i]-1,`
|${R(q=x)}|`))).join``
TEST
f=(p,h,q=-1,R=(n,s=' ')=>s.repeat(n))=>[...p,0].map((x,i)=>(x>q?p=x:(p=q,q=x),(~q?`
|`+R(q+(x<p)-!x)+R(x>q,'|'):' ')+R(p+~q+!x,'_')+R(x<p,'|')+R(h[i]-1,`
|${R(q=x)}|`))).join``
// Less golfed
F=(p,h, q=-1,
R=(n,s=' ')=>s.repeat(n)
)=>
[...p, 0].map((x,i)=> (
x>q? p=x : (p=q,q=x),
(q>=0?`\n|`+R(q+(x<p)-!x)+R(x>q,'|'):' ')
+ R(p+~q+!x,'_') + R(x<p,'|')
+ R(h[i]-1,`\n|${R(q=x)}|`)
)).join``
console.log=x=>O.textContent+=x+'\n'
;[
[[2],[1]],
[[4],[2]],
[[2, 6, 2, 4],[2, 2, 1, 3]],
[[2, 14, 6, 8, 4, 18, 2, 10, 4, 2],[1, 2, 3, 1, 2, 1, 1, 1, 2, 1]]
].forEach(t=>{
var w=t[0],h=t[1]
console.log('['+w+'] ['+h+']\n'+f(w,h)+'\n')
})
<pre id=O></pre>
Ruby 191
First time golfing, also it's my first day with Ruby, so it's probably not the most elegant thing in the world, but it'll do?
def f(x)
a=x[0]+[0]
puts" #{'_'*a[0]} "
for i in 0..x[1].length-1
n,m=a[i,2].sort
puts"|#{' '*a[i]}|\n"*(x[1][i]-1)+'|'+' '*n+(a[i+1]<1?'_':m>a[i]?'|':' ')+'_'*(m-n-1)+(n<a[i]?'|':'')
end
end