home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.programming      Programming issues that transcend langua      57,431 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 56,694 of 57,431   
   Richard Harnden to Tim Rentsch   
   Re: A little puzzle.   
   28 Nov 22 17:15:22   
   
   From: richard.nospam@gmail.com   
      
   On 28/11/2022 15:30, Tim Rentsch wrote:   
   > Richard Harnden  writes:   
   >   
   >> On 21/11/2022 20:45, Ben Bacarisse wrote:   
   >>   
   >>> I wonder if there are any real posters here?  Let's see...   
   >>>   
   >>> I came across a trivial programming task that must have been solved a   
   >>> thousand times by other programmers, but it had never crossed my path   
   >>> until yesterday.  I must be feeling my age because I made a real hash of   
   >>> tackling it at first.  Anyway, I thought it might be of interest.   
   >>>   
   >>> Consider any ordered measure that "wraps round" -- bearings in degrees,   
   >>> minutes in the hour, indeed hours in either the 12 or 24 hour clock.   
   >>> The problem is to determine if a given value is in the sub-range   
   >>> specified by a start and an en value.   
   >>>   
   >>> I was specifically concerned with integer values where the sub-range   
   >>> includes the start value but excludes the end value.   
   >>>   
   >>> Though I am not sure this merits the term "puzzle", I suggest that   
   >>> solutions be posted with some spoiler protection.  Do all the news   
   >>> readers used by programmers (or ex programmers) all respect the presence   
   >>> of a form-feed character...   
   >>>    
   >>> ... like this?  Because that's my favourite way, rather than posting   
   >>> lots of dummy lines before the solution.   
   >>   
   >> I think this works ...   
   >>   
   >> int in_subrange(int range, int start, int end, int check)   
   >> {   
   >>      check %= range;   
   >>   
   >>      if (  ( end < start && (   
   >>                 (check >= 0 && check <= end)   
   >>              || (check >= start && check < range)   
   >>              )   
   >>            )   
   >>         || ( check >= start && check <= end )   
   >>         )   
   >>              return 1;   
   >>   
   >>      return 0;   
   >> }   
   >   
   > Have you thought about a case where the values of check, start,   
   > and end are chosen from the interval -9000000000 to 9000000000?   
   > How about the interval -18000000000 to 18000000000?   
      
   Nope, I assume that start and end are between zero and range, and that   
   check is greater that zero.   
      
   I didn't think about overflows at all.   
      
   With unsigned integers ...   
      
   int in_subrange(uint_fast64_t range, uint_fast64_t start, uint_fast64_t   
   end, uint_fast64_t check)   
   {   
        check %= range;   
      
        if (  ( end < start && (   
                   check <= end   
                || (check >= start && check < range)   
                )   
              )   
           || ( check >= start && check <= end )   
           )   
                return 1;   
      
        return 0;   
   }   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca