#!/usr/bin/perl sub say { print @_, $/ } # emulation of say :) sub cuboid { # Constant dimnesions of cuboid my ($x, $y, $z) = map({int} @_); # ASCII characters # $c = corner point # $h = horizontal line # $v = vertical line # $d = diagonal line # $s = space (inside cuboid) my ($c, $h, $v, $d, $s) = ('+', '-', '|', '/', shift(@ARGV) || ' '); # Some variables my ($p, $o) = (0, 0); say ' ' x ($z + 1), $c, $h x $x, $c; for (1 .. $z) { say ' ' x ($z - $_ + 1), $d, $s x $x, $d, $s x ($_ - 1 - $p), $_ > $y ? !$p ? do { $p = 1; $o = $z - $y; $c; } : $p++ ? $d : $c : $v; } say $c, $h x $x, $c, $z < $y ? do { $s x $z, $v } : $p ? do { $s x ($z - $o), $d; } : do { $s x $z, $c }; for (1 .. $y) { say $v, $s x $x, $v, $z - 1 >= $y ? $_ >= $z ? ($s x $x, $c) : ($s x ($z - $_ - $o), $d) : $z == $y ? do { $s x ($y - $_), $d } : $y - $_ > $z ? do { $s x $z, $v } : $y - $_ == $z ? do { $s x ($y - $_), $c } : do { $s x ($y - $_), $d } } say $c, $h x $x, $c; } cuboid shift || rand 20, shift || rand 10, shift || rand 10;