Jump to content

Worthwhile task shaving: Difference between revisions

m
→‎{{header|Phix}}: use pygments
m (→‎{{header|Phix}}: use pygments)
Line 401:
 
=={{header|Phix}}==
<!--<syntaxhighlight lang="phix">(phixonline)-->
<!--</syntaxhighlight>-- lang="phix">
<span style="color: #008080;">with</span> <span style="color: #008080;">javascript_semantics</span>
with javascript_semantics
<span style="color: #008080;">constant</span> <span style="color: #000000;">SEC</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span>
constant SEC = 1,
<span style="color: #000000;">MIN</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">60</span><span style="color: #0000FF;">,</span>
MIN = 60,
<span style="color: #000000;">HOUR</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">60</span><span style="color: #0000FF;">*</span><span style="color: #000000;">MIN</span><span style="color: #0000FF;">,</span>
HOUR = 60*MIN,
<span style="color: #000000;">DAY</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">*</span><span style="color: #000000;">HOUR</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (allow some sleepage)</span>
DAY = 8*HOUR, -- (allow some sleepage)
<span style="color: #000000;">WEEK</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">*</span><span style="color: #000000;">DAY</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (omit weekends)</span>
WEEK = 5*DAY, -- (omit weekends)
<span style="color: #000000;">MONTH</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">*</span><span style="color: #000000;">WEEK</span><span style="color: #0000FF;">,</span>
MONTH = 4*WEEK,
<span style="color: #000000;">YEAR</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">*</span><span style="color: #000000;">MONTH</span><span style="color: #0000FF;">,</span> <span style="color: #000080;font-style:italic;">-- (as 48 weeks/omit holidays)</span>
YEAR = 12*MONTH, -- (as 48 weeks/omit holidays)
<span style="color: #000000;">shavings</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">30</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MIN</span><span style="color: #0000FF;">,</span><span style="color: #000000;">5</span><span style="color: #0000FF;">*</span><span style="color: #000000;">MIN</span><span style="color: #0000FF;">,</span><span style="color: #000000;">30</span><span style="color: #0000FF;">*</span><span style="color: #000000;">MIN</span><span style="color: #0000FF;">,</span><span style="color: #000000;">HOUR</span><span style="color: #0000FF;">,</span><span style="color: #000000;">6</span><span style="color: #0000FF;">*</span><span style="color: #000000;">HOUR</span><span style="color: #0000FF;">,</span><span style="color: #000000;">DAY</span><span style="color: #0000FF;">},</span>
shavings = {1,5,30,MIN,5*MIN,30*MIN,HOUR,6*HOUR,DAY},
<span style="color: #000000;">frequencies</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{{</span><span style="color: #000000;">50</span><span style="color: #0000FF;">,</span><span style="color: #000000;">DAY</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">5</span><span style="color: #0000FF;">,</span><span style="color: #000000;">DAY</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">DAY</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">WEEK</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">MONTH</span><span style="color: #0000FF;">},{</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">YEAR</span><span style="color: #0000FF;">}},</span>
frequencies = {{50,DAY},{5,DAY},{1,DAY},{1,WEEK},{1,MONTH},{1,YEAR}},
<span style="color: #000000;">roundto</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">SEC</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">MIN</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">HOUR</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">DAY</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">WEEK</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">MONTH</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">YEAR</span><span style="color: #0000FF;">},</span>
roundto = {SEC, MIN, HOUR, DAY, WEEK, MONTH, YEAR},
<span style="color: #000000;">ts</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"sec"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"min"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"hour"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"day"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"week"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"month"</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"year"</span><span style="color: #0000FF;">}</span>
ts = {"sec", "min", "hour", "day", "week", "month", "year"}
 
<span style="color: #008080;">function</span> <span style="color: #000000;">duration</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">a</span><span style="color: #0000FF;">)</span>
function duration(atom a)
<span style="color: #004080;">string</span> <span style="color: #000000;">es</span>
string es
<span style="color: #008080;">for</span> <span style="color: #000000;">rdx</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">roundto</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
for rdx=1 to length(roundto) do
<span style="color: #004080;">atom</span> <span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">trunc</span><span style="color: #0000FF;">(</span><span style="color: #000000;">a</span><span style="color: #0000FF;">/</span><span style="color: #000000;">roundto</span><span style="color: #0000FF;">[</span><span style="color: #000000;">rdx</span><span style="color: #0000FF;">])</span>
atom t = trunc(a/roundto[rdx])
<span style="color: #008080;">if</span> <span style="color: #000000;">rdx</span><span style="color: #0000FF;">></span><span style="color: #000000;">1</span> <span style="color: #008080;">and</span> <span style="color: #000000;">t</span><span style="color: #0000FF;"><</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if rdx>1 and t<1 then exit end if
<span style="color: #000000;">es</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%d %s%s"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">t</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ts</span><span style="color: #0000FF;">[</span><span style="color: #000000;">rdx</span><span style="color: #0000FF;">],</span><span style="color: #7060A8;">iff</span><span style="color: #0000FF;">(</span><span style="color: #000000;">t</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">?</span><span style="color: #008000;">""</span><span style="color: #0000FF;">:</span><span style="color: #008000;">"s"</span><span style="color: #0000FF;">)})</span>
es = sprintf("%d %s%s",{t,ts[rdx],iff(t=1?"":"s")})
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end for
<span style="color: #008080;">return</span> <span style="color: #000000;">es</span>
return es
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
end function
 
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"""
printf(1,"""
------------- How long can you work on making a routine task more -------------
------------- efficientHow beforelong spendingcan moreyou timework thanon youmaking saved?a routine task more -------------
------------------------------ (acrossefficient fivebefore years)spending more time than you saved? ----------------------------
----------+------------------------------------------ (across five years) ----------------------------
Shave off | ----------+------------------------------------------------ How Often You Do The Task ----------------------
Shave off | ------------------- How Often You Do The Task ----------------------
task time | 50/day 5/day daily weekly monthly yearly
----------+-----------+-----------+-----------+-----------+-----------+----------
"""</span><span style="color: #0000FF;">)</span>
""")
<span style="color: #008080;">for</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">shavings</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
for s=1 to length(shavings) do
<span style="color: #004080;">integer</span> <span style="color: #000000;">si</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">shavings</span><span style="color: #0000FF;">[</span><span style="color: #000000;">s</span><span style="color: #0000FF;">]</span>
integer si = shavings[s]
<span style="color: #004080;">string</span> <span style="color: #000000;">line</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%10s "</span><span style="color: #0000FF;">,</span><span style="color: #000000;">duration</span><span style="color: #0000FF;">(</span><span style="color: #000000;">si</span><span style="color: #0000FF;">))</span>
string line = sprintf("%10s ",duration(si))
<span style="color: #008080;">for</span> <span style="color: #000000;">f</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">frequencies</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
for f=1 to length(frequencies) do
<span style="color: #004080;">integer</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">per</span><span style="color: #0000FF;">,</span><span style="color: #000000;">slot</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">frequencies</span><span style="color: #0000FF;">[</span><span style="color: #000000;">f</span><span style="color: #0000FF;">]</span>
integer {per,slot} = frequencies[f]
<span style="color: #008080;">if</span> <span style="color: #000000;">si</span><span style="color: #0000FF;">*</span><span style="color: #000000;">per</span> <span style="color: #0000FF;">></span> <span style="color: #000000;">slot</span> <span style="color: #008080;">then</span>
if si*per > slot then
<span style="color: #000000;">line</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%10s "</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"n/a"</span><span style="color: #0000FF;">)</span>
<span style line &= sprintf("color:%10s #008080;">else<,"n/span>a")
else
<span style="color: #004080;">atom</span> <span style="color: #000000;">shaving</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">5</span><span style="color: #0000FF;">*</span><span style="color: #000000;">YEAR</span><span style="color: #0000FF;">/</span><span style="color: #000000;">slot</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">per</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">*</span> <span style="color: #000000;">si</span>
atom shaving = (5*YEAR/slot * per) * si
<span style="color: #000000;">line</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%10s "</span><span style="color: #0000FF;">,</span><span style="color: #000000;">duration</span><span style="color: #0000FF;">(</span><span style="color: #000000;">shaving</span><span style="color: #0000FF;">))</span>
line &= sprintf("%10s ",duration(shaving))
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end for
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"%s\n"</span><span style="color: #0000FF;">,</span><span style="color: #000000;">line</span><span style="color: #0000FF;">)</span>
printf(1,"%s\n",line)
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
end for
<!--</syntaxhighlight>-->
</syntaxhighlight>
{{out}}
One outlier here is 1hr 5/day ==> 3 years vs original 10 months: as per notes above for 5/8ths the cutoff is indeed 3 years.<br>
7,820

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.