if number is 1-2, 4 or 6-8 or 12-28, 30, 32...

Terry Reedy tjreedy at udel.edu
Tue Jun 11 06:40:03 CEST 2002


"Gustaf Liljegren" <gustafl at algonet.se> wrote in message
news:Xns9229EE722467Fgustafl at 195.100.94.182...
> I'm making a function that takes one integer and returns a boolean
that
> says if the integer matches a number in a certain group of numbers.
This
> group consists of single numbers aswell as ranges spanning thousands
of
> numbers. I'm looking for an elegant way to write this function.

After reading the other responses, I would try the following
(untested):
  sort ranges and merge contiguous ranges so there is a gap between
each
  express each range (including single ranges) as half-open range
[min,max+1)
  put 2n endpoints in a single list # they *will* be distinct by step
1
  test target number against first and last int in list
  if < first or >= last, no match; (if = first, match # not sure if
need this)
  if within that range, run binsort to get index of largest num <=
target
  # modify binsort or next statement if necessary
  if even(index) match = true else false

Terry J. Reedy








More information about the Python-list mailing list