Worthwhile task shaving: Difference between revisions

Added Algol 68
(Worthwhile task shaving in FreeBASIC)
(Added Algol 68)
Line 14:
playfulness than rigid scientific accuracy.
 
 
=={{header|ALGOL 68}}==
{{trans|Wren}}
<syntaxhighlight lang="algol68">
BEGIN # xkcd 1205, translated from the Wren sample #
[]INT shaved = ( 1, 5, 30, 60, 300, 1800, 3600, 21600, 86400 );
# time shaved off in seconds #
[]STRING columns = ( "1 SECOND", "5 SECONDS", "30 SECONDS", "1 MINUTE", "5 MINUTES"
, "30 MINUTES", "1 HOUR", "6 HOURS", "1 DAY"
);
REAL diy = 365.25;
INT minute = 60;
INT hour = minute * 60;
INT day = hour * 24;
INT week = day * 7;
REAL month = day * diy / 12;
REAL year = day * diy;
 
[]REAL freq = ( 50 * diy, 5 * diy, diy, diy/7, 12, 1 ); # frequency per year #
INT mult = 5; # multiplier for table #
 
PROC pad right = ( STRING s, INT w )STRING:
IF INT len = ( UPB s - LWB s ) + 1; len >= w THEN s ELSE s + ( ( w - len ) * " " ) FI;
PROC center = ( STRING s, INT w )STRING:
IF INT len = ( UPB s - LWB s ) + 1; len >= w THEN s ELSE ( ( ( w - len ) OVER 2 ) * " " ) + s FI;
 
PROC fmt time = ( REAL tf, STRING interval )VOID:
BEGIN
INT t = ENTIER tf;
print( ( pad right( whole( t, 0 ) + " " + interval + IF t = 1 THEN "" ELSE "S" FI, 13 ) ) )
END # fmt time # ;
 
print( ( center( "HOW OFTEN YOU DO THE TASK", 93 ), newline ) );
print( ( pad right( "SHAVED OFF", 12 ), " | "
, pad right( "50/DAY", 13 ), pad right( "5/DAY", 13 ), pad right( "DAILY", 13 )
, pad right( "WEEKLY", 13 ), pad right( "MONTHLY", 13 ), pad right( "YEARLY", 13 )
, newline
)
);
print( ( "-" * 93, newline ) );
FOR y FROM LWB columns TO UPB columns DO
print( ( pad right( columns[ y ], 12 ), " | " ) );
FOR x FROM LWB freq TO UPB freq DO
REAL t = freq[ x ] * shaved[ y ] * mult;
IF t < minute THEN
fmt time( t, "SECOND" )
ELIF t < hour THEN
fmt time( t / minute, "MINUTE" )
ELIF t < day THEN
fmt time( t / hour, "HOUR" )
ELIF t < 14 * day THEN
fmt time( t / day, "DAY" )
ELIF t < 9 * week THEN
fmt time( t / week, "WEEK" )
ELIF t < year THEN
fmt time( t / month, "MONTH" )
ELSE
print( ( " " * 13 ) )
FI
OD;
print( ( newline ) )
OD
END
</syntaxhighlight>
{{out}}
<pre>
HOW OFTEN YOU DO THE TASK
SHAVED OFF | 50/DAY 5/DAY DAILY WEEKLY MONTHLY YEARLY
---------------------------------------------------------------------------------------------
1 SECOND | 1 DAY 2 HOURS 30 MINUTES 4 MINUTES 1 MINUTE 5 SECONDS
5 SECONDS | 5 DAYS 12 HOURS 2 HOURS 21 MINUTES 5 MINUTES 25 SECONDS
30 SECONDS | 4 WEEKS 3 DAYS 15 HOURS 2 HOURS 30 MINUTES 2 MINUTES
1 MINUTE | 2 MONTHS 6 DAYS 1 DAY 4 HOURS 1 HOUR 5 MINUTES
5 MINUTES | 10 MONTHS 4 WEEKS 6 DAYS 21 HOURS 5 HOURS 25 MINUTES
30 MINUTES | 6 MONTHS 5 WEEKS 5 DAYS 1 DAY 2 HOURS
1 HOUR | 2 MONTHS 10 DAYS 2 DAYS 5 HOURS
6 HOURS | 2 MONTHS 2 WEEKS 1 DAY
1 DAY | 8 MONTHS 8 WEEKS 5 DAYS
</pre>
 
=={{header|FreeBASIC}}==
3,044

edits