turniere-backend/app/services/utils.rb

36 lines
890 B
Ruby

# frozen_string_literal: true
require 'singleton'
class Utils
include Singleton
# Calculates the previous power of 2 given a number
#
# @param number [Integer] the number to generate the previous power of 2 from
# @return [Array] previous power of two
def self.previous_power_of_two(number)
return 0 if number.zero?
exponent = Math.log2 number
2**exponent.floor
end
# Calculates the next power of 2 given a number
#
# @param number [Integer] the number to generate the next power of 2 from
# @return [Array] next power of two
def self.next_power_of_two(number)
return 1 if number.zero?
2 * previous_power_of_two(number)
end
# Calculates if a number is a power of 2
#
# @param number [Integer] the number to check
# @return [Boolean] is the number a power of 2?
def self.po2?(number)
number.to_s(2).count('1') == 1
end
end