Rosetta Code

Brazilian numbers

Find the first Brazilian numbers by searching for bases whose representation uses one repeated digit.

Medium View source
Source rosettacode/popular/brazilian_numbers.vibe
# title: Brazilian numbers
# source: https://rosettacode.org/wiki/Brazilian_numbers
# category: Rosetta Code
# difficulty: Medium
# summary: Find the first Brazilian numbers by searching for bases whose representation uses one repeated digit.
# tags: popular, numbers, base-conversion, search
# vibe: 0.2

def base_digits(number, base)
  if number == 0
    return "0"
  end

  digits = ""
  current = number

  while current > 0
    digits = ("" + (current % base)) + digits
    current = current / base
  end

  digits
end

def same_digits?(text)
  index = 1
  while index < text.length
    if text.slice(index) != text.slice(0)
      return false
    end
    index = index + 1
  end
  true
end

def brazilian?(number)
  base = 2
  while base <= number - 2
    digits = base_digits(number, base)
    if digits.length > 1 && same_digits?(digits)
      return true
    end
    base = base + 1
  end
  false
end

def first_brazilian_numbers(count)
  values = []
  candidate = 7

  while values.length < count
    if brazilian?(candidate)
      values = values.push(candidate)
    end
    candidate = candidate + 1
  end

  values
end

def run
  first_brazilian_numbers(10)
end
Output
Press run to execute run from this example.
rosetta-code popular numbers base-conversion search browser-runner