47 lines
954 B
Plaintext
47 lines
954 B
Plaintext
pop_count = proc (n: int) returns (int)
|
|
p: int := 0
|
|
while n>0 do
|
|
p := p + n//2
|
|
n := n/2
|
|
end
|
|
return(p)
|
|
end pop_count
|
|
|
|
evil = proc (n: int) returns (bool)
|
|
return(pop_count(n)//2 = 0)
|
|
end evil
|
|
|
|
odious = proc (n: int) returns (bool)
|
|
return(~evil(n))
|
|
end odious
|
|
|
|
first = iter (n: int, p: proctype (int) returns (bool)) yields (int)
|
|
i: int := 0
|
|
while n>0 do
|
|
if p(i) then
|
|
yield(i)
|
|
n := n-1
|
|
end
|
|
i := i+1
|
|
end
|
|
end first
|
|
|
|
start_up = proc ()
|
|
po: stream := stream$primary_output()
|
|
|
|
for i: int in int$from_to(0,29) do
|
|
stream$putright(po, int$unparse(pop_count(3**i)), 3)
|
|
end
|
|
stream$putl(po, "")
|
|
|
|
for i: int in first(30, evil) do
|
|
stream$putright(po, int$unparse(i), 3)
|
|
end
|
|
stream$putl(po, "")
|
|
|
|
for i: int in first(30, odious) do
|
|
stream$putright(po, int$unparse(i), 3)
|
|
end
|
|
stream$putl(po, "")
|
|
end start_up
|