#! perl -sw use 5.010; use strict; use Data::Dump qw[ pp ]; my( $w, $h ) = @ARGV; sub display { my @screen = map ' ' x $w . '|', 0 .. $h; my $char = 'A'; for my $term ( @_ ) { substr( $screen[ $_ ], $term->[ 0 ], $term->[ 1 ] ) = $char x $term->[ 1 ] for $term->[ 2 ] .. $term->[ 2 ] + $term->[ 3 ]; ++$char; } # system 'cls'; say for @screen; } for my $n ( 1 .. 26 ) { my @xterms; my $xn = int( $n ** 0.5 ); my $yn = int( $n / $xn ); my $rem = $n - ($xn * $yn); my $deltaX= int( $w / $xn ); my $deltaY = int( $h / ( $yn + ( $rem ? 1 : 0 ) ) ); my( $tlx, $tly ) = ( 0, 0 ); for my $t ( 1 .. $n ) { push @xterms, [ $tlx, $deltaX, $tly, $deltaY ]; $tlx += $deltaX; if( ( $tlx + $deltaX ) > $w ) { $xterms[ -1 ][ 1 ] = $w - $xterms[ -1 ][ 0 ]; $tlx = 0; $tly += $deltaY; my $xLeft = $n - $t; if( $xLeft and $xLeft <= $xn ) { $deltaX = int( $w / $xLeft ); $deltaY = $h - $tly; } } } display( @xterms ); ; } __END__ C:\test>xterms 20 9 AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAAAAAAAAAAAA| BBBBBBBBBBBBBBBBBBBB| AAAAAAAAAAAAAAAAAAAA| BBBBBBBBBBBBBBBBBBBB| AAAAAAAAAAAAAAAAAAAA| BBBBBBBBBBBBBBBBBBBB| AAAAAAAAAAAAAAAAAAAA| BBBBBBBBBBBBBBBBBBBB| AAAAAAAAAAAAAAAAAAAA| BBBBBBBBBBBBBBBBBBBB| AAAAAAAAAAAAAAAAAAAA| BBBBBBBBBBBBBBBBBBBB| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAABBBBBBBBBB| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAABBBBBBBBBB| AAAAAAAAAAAAAAAAAAAA| AAAAAAAAAABBBBBBBBBB| BBBBBBBBBBBBBBBBBBBB| AAAAAAAAAABBBBBBBBBB| BBBBBBBBBBBBBBBBBBBB| CCCCCCCCCCDDDDDDDDDD| BBBBBBBBBBBBBBBBBBBB| CCCCCCCCCCDDDDDDDDDD| CCCCCCCCCCCCCCCCCCCC| CCCCCCCCCCDDDDDDDDDD| CCCCCCCCCCCCCCCCCCCC| CCCCCCCCCCDDDDDDDDDD| CCCCCCCCCCCCCCCCCCCC| CCCCCCCCCCDDDDDDDDDD| CCCCCCCCCCCCCCCCCCCC| CCCCCCCCCCDDDDDDDDDD| AAAAAAAAAABBBBBBBBBB| AAAAAAAAAABBBBBBBBBB| AAAAAAAAAABBBBBBBBBB| CCCCCCCCCCDDDDDDDDDD| CCCCCCCCCCDDDDDDDDDD| CCCCCCCCCCDDDDDDDDDD| EEEEEEEEEEEEEEEEEEEE| EEEEEEEEEEEEEEEEEEEE| EEEEEEEEEEEEEEEEEEEE| EEEEEEEEEEEEEEEEEEEE|