34 lines
613 B
Bash
34 lines
613 B
Bash
popcount() {
|
|
local -i n=$1
|
|
(( n < 0 )) && return 1
|
|
local ones=0
|
|
while (( n > 0 )); do
|
|
(( ones += n%2 ))
|
|
(( n /= 2 ))
|
|
done
|
|
echo $ones
|
|
}
|
|
|
|
popcount_3s=()
|
|
n=1
|
|
for (( i=0; i<30; i++ )); do
|
|
popcount_3s+=( $(popcount $n) )
|
|
(( n *= 3 ))
|
|
done
|
|
echo "powers of 3 popcounts: ${popcount_3s[*]}"
|
|
|
|
evil=()
|
|
odious=()
|
|
n=0
|
|
while (( ${#evil[@]} < 30 || ${#odious[@]} < 30 )); do
|
|
p=$( popcount $n )
|
|
if (( $p%2 == 0 )); then
|
|
evil+=( $n )
|
|
else
|
|
odious+=( $n )
|
|
fi
|
|
(( n++ ))
|
|
done
|
|
echo "evil nums: ${evil[*]:0:30}"
|
|
echo "odious nums: ${odious[*]:0:30}"
|