Lucky and even lucky numbers: Difference between revisions

m
→‎{{header|Phix}}: added syntax colouring, marked p2js incompatible
m (→‎{{header|Phix}}: added syntax colouring, marked p2js incompatible)
Line 2,102:
 
=={{header|Phix}}==
<!--<lang Phix>constant luckyMax = 120000(notonline)-->
<span style="color: #008080;">without</span> <span style="color: #008080;">js</span> <span style="color: #000080;font-style:italic;">-- (command line handling)</span>
<span style="color: #008080;">constant</span> <span style="color: #000000;">luckyMax</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">120000</span>
sequence lucky
<span style="color: #004080;">sequence</span> <span style="color: #000000;">lucky</span>
procedure filterLucky()
integer n = 2
<span style="color: #008080;">procedure</span> <span style="color: #000000;">filterLucky</span><span style="color: #0000FF;">()</span>
while n<=length(lucky) do
<span style="color: #004080;">integer</span> <span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">2</span>
integer m = lucky[n],
<span style="color: #008080;">while</span> <span style="color: #000000;">n</span><span style="color: #0000FF;"><=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
l = m-1
<span style="color: #004080;">integer</span> <span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">lucky</span><span style="color: #0000FF;">[</span><span style="color: #000000;">n</span><span style="color: #0000FF;">],</span>
for k=m+1 to length(lucky) do
<span style="color: #000000;">l</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">m</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span>
if mod(k,m)!=0 then
<span style="color: #008080;">for</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">=</span><span style="color: #000000;">m</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;">lucky</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
l += 1
<span style="color: #008080;">if</span> <span style="color: #7060A8;">mod</span><span style="color: #0000FF;">(</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m</span><span style="color: #0000FF;">)!=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
lucky[l] = lucky[k]
<span style="color: #000000;">l</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
end if
<span style="color: #000000;">lucky</span><span style="color: #0000FF;">[</span><span style="color: #000000;">l</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">lucky</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">]</span>
end for
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if l>=length(lucky) then exit end if
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
lucky = lucky[1..l]
<span style="color: #008080;">if</span> <span style="color: #000000;">l</span><span style="color: #0000FF;">>=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">)</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>
n += 1
<span style="color: #000000;">lucky</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">lucky</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">l</span><span style="color: #0000FF;">]</span>
end while
<span style="color: #000000;">n</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">1</span>
end procedure
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
constant helptxt = """
argument(s) | what is displayed
<span style="color: #008080;">constant</span> <span style="color: #000000;">helptxt</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"""
=======================================
j argument(s) | jthwhat luckyis numberdisplayed
=======================================
j [,] lucky | jth lucky number
j [,] evenLucky | jth even lucky number
j k j [,] lucky | jth through kth (inclusive) lucky numbersnumber
j k lucky j [,] evenLucky | jth through kth (inclusive)even lucky numbersnumber
j k evenLucky | jth through kth (inclusive) even lucky numbers
j -k lucky | jth through |kth all(inclusive) lucky numbers in the range j to k
j -k luckyevenLucky | jth |through kth all(inclusive) even lucky numbers in the range j to k
j -k evenLucky | all even lucky numbers in the range j to k
j -k lucky | all lucky numbers in the range j to k
"""
j -k evenLucky | all even lucky numbers in the range j to k
 
"""</span>
procedure fatal(string msg)
puts(1,msg)
<span style="color: #008080;">procedure</span> <span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">msg</span><span style="color: #0000FF;">)</span>
puts(1,helptxt)
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">msg</span><span style="color: #0000FF;">)</span>
{} = wait_key()
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">helptxt</span><span style="color: #0000FF;">)</span>
abort(0)
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
end procedure
<span style="color: #7060A8;">abort</span><span style="color: #0000FF;">(</span><span style="color: #000000;">0</span><span style="color: #0000FF;">)</span>
 
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
procedure main()
sequence cl = command_line()
<span style="color: #008080;">procedure</span> <span style="color: #000000;">main</span><span style="color: #0000FF;">()</span>
integer j,k,l,m,n
<span style="color: #004080;">sequence</span> <span style="color: #000000;">cl</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">command_line</span><span style="color: #0000FF;">()</span>
bool single = true, range = true, odd = true
<span style="color: #004080;">integer</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">l</span><span style="color: #0000FF;">,</span><span style="color: #000000;">m</span><span style="color: #0000FF;">,</span><span style="color: #000000;">n</span>
if length(cl)=2 then
<span style="color: #004080;">bool</span> <span style="color: #000000;">single</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">range</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span><span style="color: #0000FF;">,</span> <span style="color: #7060A8;">odd</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">true</span>
-- fatal("at least one argument must be supplied") -- (if preferred)
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">2</span> <span style="color: #008080;">then</span>
sequence tests = {"1 20",
<span style="color: #000080;font-style:italic;">-- fatal("at least one argument must be supplied") -- (if preferred)</span>
"1 20 evenLucky",
<span style="color: #004080;">sequence</span> <span style="color: #000000;">tests</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #008000;">"1 20"</span><span style="color: #0000FF;">,</span>
"20 lucky",
<span style="color: #008000;">"1 20 evenLucky"</span><span style="color: #0000FF;">,</span>
<span style="color: #008000;">"20 lucky"</span><span style="6000color: -6100#0000FF;">,</span>
<span style="6000color: -6100#008000;">"20 evenLucky"</span><span style="color: #0000FF;">,</span>
<span style="color: #008000;">"6000 -6100"</span><span style="10000color: lucky#0000FF;">,</span>
<span style="10000color: #008000;">"6000 -6100 evenLucky"}</span><span style="color: #0000FF;">,</span>
<span style="color: #008000;">"10000 lucky"</span><span style="color: #0000FF;">,</span>
-- (done this way to exercise the real command line handling)
if cl[1]=cl[2] then <span style="color: #008000;">"10000 evenLucky"</span><span --style="color: (compiled)#0000FF;">}</span>
<span style="color: #000080;font-style:italic;">-- (done this way to exercise the real command line handling)</span>
cl = cl[1..1]
<span style="color: #008080;">if</span> <span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]=</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- (compiled)</span>
elsif platform()=WINDOWS then -- (and interpreted)
<span style="color: #000000;">cl</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">..</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
cl[1] = substitute(cl[1],"pw","p") -- (pw.exe -> p.exe)
<span style="color: #008080;">elsif</span> <span style="color: #7060A8;">platform</span><span style="color: #0000FF;">()=</span><span style="color: #004600;">WINDOWS</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- (and interpreted)</span>
end if
<span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">substitute</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span><span style="color: #008000;">"pw"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"p"</span><span style="color: #0000FF;">)</span> <span style="color: #000080;font-style:italic;">-- (pw.exe -&gt; p.exe)</span>
for i=1 to length(cl) do
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if find(' ',cl[i]) then cl[i] = sprintf("\"%s\"",{cl[i]}) end if
<span style="color: #008080;">for</span> <span style="color: #000000;">i</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;">cl</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
end for
<span style="color: #008080;">if</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #008000;">' '</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">])</span> <span style="color: #008080;">then</span> <span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"\"%s\""</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]})</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
for t=1 to length(tests) do
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
string cmd = join(append(cl,tests[t]))
<span style="color: #008080;">for</span> <span style="color: #000000;">t</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;">tests</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
-- printf(1,"running %s\n",{cmd})
<span style="color: #004080;">string</span> <span style="color: #000000;">cmd</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">append</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tests</span><span style="color: #0000FF;">[</span><span style="color: #000000;">t</span><span style="color: #0000FF;">]))</span>
{} = system_exec(cmd)
<span style="color: #000080;font-style:italic;">-- printf(1,"running %s\n",{cmd})</span>
end for
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">system_exec</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cmd</span><span style="color: #0000FF;">)</span>
puts(1, "tests complete\n")
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
{} = wait_key()
<span style="color: #7060A8;">puts</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"tests complete\n"</span><span style="color: #0000FF;">)</span>
else
<span style="color: #0000FF;">{}</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">wait_key</span><span style="color: #0000FF;">()</span>
cl = cl[3..$] -- ({1,2} are {interperter,source} or {exe,exe})
<span style="color: #008080;">else</span>
 
<span style="color: #000000;">cl</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">3</span><span style="color: #0000FF;">..$]</span> <span style="color: #000080;font-style:italic;">-- ({1,2} are {interperter,source} or {exe,exe})
--
-- Allow eg "lucky j , evenLucky" to be == "lucky j evenLucky"
--
if length(cl)=3-- andAllow eg cl[2]="lucky j , evenLucky" thento cl[2..2]be == {}"lucky endj ifevenLucky"
--</span>
 
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">)=</span><span style="color: #000000;">3</span> <span style="color: #008080;">and</span> <span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]=</span><span style="color: #008000;">","</span> <span style="color: #008080;">then</span> <span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">2</span><span style="color: #0000FF;">..</span><span style="color: #000000;">2</span><span style="color: #0000FF;">]</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{}</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
for i=1 to length(cl) do
string cli = cl[i]
<span style="color: #008080;">for</span> <span style="color: #000000;">i</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;">cl</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">do</span>
if cli[1]<='9' then -- (includes '-')
<span style="color: #004080;">string</span> <span style="color: #000000;">cli</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">]</span>
sequence d = scanf(cl[i],"%d")
<span style="color: #008080;">if</span> <span style="color: #000000;">cli</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]<=</span><span style="color: #008000;">'9'</span> <span style="color: #008080;">then</span> <span style="color: #000080;font-style:italic;">-- (includes '-')</span>
if length(d)!=1 then
<span style="color: #004080;">sequence</span> <span style="color: #000000;">d</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">scanf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">[</span><span style="color: #000000;">i</span><span style="color: #0000FF;">],</span><span style="color: #008000;">"%d"</span><span style="color: #0000FF;">)</span>
fatal("unrecognised "&cli)
<span style="color: #008080;">if</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)!=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"unrecognised "</span><span style="color: #0000FF;">&</span><span style="color: #000000;">cli</span><span style="color: #0000FF;">)</span>
if i>2 then
<span style="color: fatal(#008080;"too>end</span> many<span style="color: numbers#008080;")>if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">></span><span style="color: #000000;">2</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"too many numbers"</span><span style="color: #0000FF;">)</span>
n = d[1][1]
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
if i=1 then
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">[</span><span style="color: #000000;">1</span><span style="color: #0000FF;">][</span><span style="color: #000000;">1</span><span style="color: #0000FF;">]</span>
if n<1 then
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
fatal("first argument must be a positive integer")
<span style="color: #008080;">if</span> <span style="color: #000000;">n</span><span style="color: #0000FF;"><</span><span style="color: #000000;">1</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"first argument must be a positive integer"</span><span style="color: #0000FF;">)</span>
j = n
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
else
<span style="color: #000000;">j</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">n</span>
single = false
<span style="color: if n#008080;">else<0/span> then
<span style="color: #000000;">single</span> <span style="color: #0000FF;">=</span> range<span style="color: #004600;">false</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">n</span><span style="color: #0000FF;"><</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
n = -n
<span style="color: #000000;">range</span> <span style="color: #0000FF;">=</span> <span style="color: #004600;">false</span>
end if
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">n</span>
if n<j then
<span style="color: fatal(#008080;"second>end</span> argument<span cannot be less thanstyle="color: first#008080;")>if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">n</span><span style="color: #0000FF;"><</span><span style="color: #000000;">j</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"second argument cannot be less than first"</span><span style="color: #0000FF;">)</span>
k = n
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">n</span>
else
l <span style="color: find(cli,{#008080;"lucky>end</span> <span style=","evenLuckycolor: #008080;"})>if</span>
<span if lstyle=0"color: then#008080;">else</span>
<span style="color: #000000;">l</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">find</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cli</span><span style="color: #0000FF;">,{</span><span style="color: #008000;">"lucky"</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"evenLucky"</span><span style="color: #0000FF;">})</span>
fatal("unrecognised "&cli)
<span style="color: #008080;">if</span> <span style="color: #000000;">l</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"unrecognised "</span><span style="color: #0000FF;">&</span><span style="color: #000000;">cli</span><span style="color: #0000FF;">)</span>
if i!=length(cl) then
<span style="color: fatal(cli&#008080;">end</span> must<span be laststyle="color: parameter#008080;")>if</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">!=</span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cli</span><span style="color: #0000FF;">&</span><span style="color: #008000;">" must be last parameter"</span><span style="color: #0000FF;">)</span>
odd = (l=1)
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<span style="color: #7060A8;">odd</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">(</span><span style="color: #000000;">l</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)</span>
end for
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
lucky = tagset(luckyMax,2-odd,2)
filterLucky()
<span style="color: #000000;">lucky</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">tagset</span><span style="color: #0000FF;">(</span><span style="color: #000000;">luckyMax</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">-</span><span style="color: #7060A8;">odd</span><span style="color: #0000FF;">,</span><span style="color: #000000;">2</span><span style="color: #0000FF;">)</span>
printf(1,"Output when args are %s\n",{join(cl)})
<span style="color: #000000;">filterLucky</span><span style="color: #0000FF;">()</span>
string even = iff(odd?"":"even ")
<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;">"Output when args are %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">join</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cl</span><span style="color: #0000FF;">)})</span>
if single then
<span style="color: #004080;">string</span> <span style="color: #7060A8;">even</span> <span style="color: #0000FF;">=</span> <span style="color: #008080;">iff</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">odd</span><span style="color: #0000FF;">?</span><span style="color: #008000;">""</span><span style="color: #0000FF;">:</span><span style="color: #008000;">"even "</span><span style="color: #0000FF;">)</span>
if j>length(lucky) then
<span style="color: #008080;">if</span> <span style="color: #000000;">single</span> <span style="color: #008080;">then</span>
fatal(sprintf("the argument, %d, is too big", j))
<span style="color: #008080;">if</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">></span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"the argument, %d, is too big"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">))</span>
printf(1,"Lucky %snumber %d = %d\n",{even,j, lucky[j]})
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
elsif range then
<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;">"Lucky %snumber %d = %d\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">even</span><span style="color: #0000FF;">,</span><span style="color: #000000;">j</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">lucky</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]})</span>
if k>length(lucky) then
<span style="color: #008080;">elsif</span> <span style="color: #000000;">range</span> <span style="color: #008080;">then</span>
fatal(sprintf("the argument, %d, is too big", k))
<span style="color: #008080;">if</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">></span><span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">)</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"the argument, %d, is too big"</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">))</span>
printf(1,"Lucky %snumbers %d to %d are: %s\n",{even,j,k,sprint(lucky[j..k])})
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
else
<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;">"Lucky %snumbers %d to %d are: %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #7060A8;">even</span><span style="color: #0000FF;">,</span><span style="color: #000000;">j</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sprint</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">..</span><span style="color: #000000;">k</span><span style="color: #0000FF;">])})</span>
if j>lucky[$] then
<span style="color: #008080;">else</span>
fatal("start of range is too big")
<span style="color: #008080;">if</span> <span style="color: #000000;">j</span><span style="color: #0000FF;">></span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">[$]</span> <span style="color: #008080;">then</span>
elsif k>lucky[$] then
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="endcolor: #008000;">"start of range is too big"</span><span style="color: #0000FF;">)</span>
<span style="color: #008080;">elsif</span> <span style="color: #000000;">k</span><span style="color: #0000FF;">></span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">[$]</span> <span style="color: #008080;">then</span>
end if
<span style="color: #000000;">fatal</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"end of range is too big"</span><span style="color: #0000FF;">)</span>
m = abs(binary_search(j,lucky))
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
n = binary_search(k,lucky)
<span style="color: #000000;">m</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">abs</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">binary_search</span><span style="color: #0000FF;">(</span><span style="color: #000000;">j</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">))</span>
if n<0 then n = -n-1 end if
<span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">binary_search</span><span style="color: #0000FF;">(</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">)</span>
printf(1,"Lucky %snumbers between %d and %d are: %s\n", {even,j,k,sprint(lucky[m..n])})
<span style="color: #008080;">if</span> <span style="color: #000000;">n</span><span style="color: #0000FF;"><</span><span style="color: #000000;">0</span> <span style="color: #008080;">then</span> <span style="color: #000000;">n</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">-</span><span style="color: #000000;">n</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end if
<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;">"Lucky %snumbers between %d and %d are: %s\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #7060A8;">even</span><span style="color: #0000FF;">,</span><span style="color: #000000;">j</span><span style="color: #0000FF;">,</span><span style="color: #000000;">k</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">sprint</span><span style="color: #0000FF;">(</span><span style="color: #000000;">lucky</span><span style="color: #0000FF;">[</span><span style="color: #000000;">m</span><span style="color: #0000FF;">..</span><span style="color: #000000;">n</span><span style="color: #0000FF;">])})</span>
end if
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
end procedure
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
main()</lang>
<span style="color: #008080;">end</span> <span style="color: #008080;">procedure</span>
<span style="color: #000000;">main</span><span style="color: #0000FF;">()</span>
<!--</lang>-->
{{out}}
<pre>
7,803

edits