#!/usr/bin/perl use strict; use warnings; use constant { LEN => 75, PI => 3.14159265359 }; sub process; process [0, 2.3875*PI], [-1, 1], 382, baci => sub { cos(1/($_[0]+.05)**.5) }, besos => sub { -cos(1/($_[0]+.15)**.78) }, kisses => sub { sin($_[0]) }; sub process { my ($xr, $yr, $lines, %funcs)=@_; my $m=($xr->[1]-$xr->[0])/($lines-1); my $q=$xr->[0]-$m; my %m = map { $_ => (LEN-length)/($yr->[1]-$yr->[0]) } keys %funcs; my %q = map { $_ => -$m{$_} * $yr->[0] } keys %funcs; for (1..$lines) { my $x=$m*$_+$q; my @str = sort {length($b) <=> length($a)} map ' ' x ($m{$_} * $funcs{$_}($x) + $q{$_}) . $_, keys %funcs; my $base=shift @str; substr $base, 0, length, $_ for @str; print $base, "\n"; } } __END__