Rosetta Code

Palindromic gapful numbers

Find the first palindromic gapful numbers in a bounded decimal range.

Medium View source
Source rosettacode/popular/palindromic_gapful_numbers.vibe
# title: Palindromic gapful numbers
# source: https://rosettacode.org/wiki/Palindromic_gapful_numbers
# category: Rosetta Code
# difficulty: Medium
# summary: Find the first palindromic gapful numbers in a bounded decimal range.
# tags: popular, numbers, search, divisibility
# vibe: 0.2

def digit_value(char)
  "0123456789".index(char)
end

def reverse_text(text)
  output = ""
  index = text.length - 1

  while index >= 0
    output = output + text.slice(index)
    index = index - 1
  end

  output
end

def palindromic_gapful?(number)
  text = "" + number
  if text.length < 3
    return false
  end

  if text != reverse_text(text)
    return false
  end

  divisor = (digit_value(text.slice(0)) * 10) + digit_value(text.slice(text.length - 1))
  number % divisor == 0
end

def first_palindromic_gapful_numbers(count)
  values = []

  outer = 1
  while outer <= 9 && values.length < count
    middle = 0
    while middle <= 9 && values.length < count
      candidate = (outer * 100) + (middle * 10) + outer
      if palindromic_gapful?(candidate)
        values = values.push(candidate)
      end
      middle = middle + 1
    end
    outer = outer + 1
  end

  outer = 1
  while values.length < count
    inner = 0
    while inner < 100 && values.length < count
      tens = inner / 10
      ones = inner % 10
      candidate = (outer * 1000) + (tens * 100) + (ones * 10) + outer
      if palindromic_gapful?(candidate)
        values = values.push(candidate)
      end
      inner = inner + 1
    end
    outer = outer + 1
  end

  values
end

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