let cuboide a b c =
let rep = String.replicate
let top =
[0 .. c]
|> List.rev
|> List.map (fun i -> rep i " " + "/" + rep a "____/")
|> fun x -> (x.Head.Replace("/", " ")::x.Tail)
|> List.mapi (fun i x -> x + rep (min i b) "|")
|> List.mapi (fun i x -> if i > b then x + "/" else x)
let front =
[1 .. b]
|> List.map (fun x -> "|" + rep a "____|")
|> List.mapi (fun i x -> x + rep (min c (b - i - 1)) "|")
|> List.mapi (fun i x -> if i > b - c - 1 then x + "/" else x)
in top @ front |> List.iter (fun x -> printfn "%s" x)
cuboide 3 3 3
cuboide 5 2 3
cuboide 4 6 5
bGV0IGN1Ym9pZGUgYSBiIGMgPQogICAgbGV0IHJlcCA9IFN0cmluZy5yZXBsaWNhdGUKCiAgICBsZXQgdG9wID0KICAgICAgICBbMCAuLiBjXQogICAgICAgIHw+IExpc3QucmV2CiAgICAgICAgfD4gTGlzdC5tYXAgKGZ1biBpIC0+IHJlcCBpICIgIiArICIvIiArIHJlcCBhICJfX19fLyIpCiAgICAgICAgfD4gZnVuIHggLT4gKHguSGVhZC5SZXBsYWNlKCIvIiwgIiAiKTo6eC5UYWlsKQogICAgICAgIHw+IExpc3QubWFwaSAoZnVuIGkgeCAtPiB4ICsgcmVwIChtaW4gaSBiKSAifCIpCiAgICAgICAgfD4gTGlzdC5tYXBpIChmdW4gaSB4IC0+IGlmIGkgPiBiIHRoZW4geCArICIvIiBlbHNlIHgpCgogICAgbGV0IGZyb250ID0gCiAgICAgICAgWzEgLi4gYl0KICAgICAgICB8PiBMaXN0Lm1hcCAoZnVuIHggLT4gInwiICsgcmVwIGEgIl9fX198IikKICAgICAgICB8PiBMaXN0Lm1hcGkgKGZ1biBpIHggLT4geCArIHJlcCAobWluIGMgKGIgLSBpIC0gMSkpICJ8IikKICAgICAgICB8PiBMaXN0Lm1hcGkgKGZ1biBpIHggLT4gaWYgaSA+IGIgLSBjIC0gMSB0aGVuIHggKyAiLyIgZWxzZSB4KQoKICAgIGluIHRvcCBAIGZyb250IHw+IExpc3QuaXRlciAoZnVuIHggLT4gcHJpbnRmbiAiJXMiIHgpCiAgICAgCmN1Ym9pZGUgMyAzIDMKY3Vib2lkZSA1IDIgMwpjdWJvaWRlIDQgNiA1