From: gw7rib@aol.com   
      
   On Tuesday, November 22, 2022 at 12:53:47 PM UTC, Ben Bacarisse wrote:   
   > Richard Heathfield writes:   
   >   
   > > On 21/11/2022 8:45 pm, Ben Bacarisse wrote:   
   > >> I wonder if there are any real posters here?   
   > >   
   > > Nobody here but us chickens.   
   > >   
   > >> 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...   
   > >   
   > > Dunno. Let's find out:   
   > >   
   > > Ctrl-L coming up:   
   > >   
   > >   
   > >   
   > Didn't see a form feed there. Here's one (I hope):   
   > > although of course in C the problem would be far better solved as:   
   > >   
   > > int inrange(int lo, int hi, int k)   
   > > {   
   > > return (lo <= k) && (k < hi);   
   > > }   
   > >   
   > > or even as a macro.   
   > >   
   > > I must confess I'm not entirely certain I have correctly interpreted   
   > > your puzzle, which I have taken to mean "is this a given value in the   
   > > given range", but this seems just a bit too easy for you to make a   
   > > hash of, but I'm sure I've made hashes of worse. I've missed   
   > > something, haven't I?   
   > The circular wrapping. On a clock, 55 is in the range of minutes that   
   > starts at 45 and ends at 5.   
      
   What's wrong with - subtract start from both end and value, add the modulus if   
   either is negative, and compare?   
      
   For example, in your example we subtract 45 from 5 (end) and 55 (value) to get   
   -40 (end) and 10 (value). Adjusting gives 20 (end) and 10 (value). 10 is below   
   20 so we're in the range.   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|