Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.programming > #15977

Re: A little puzzle.

From Tim Rentsch <tr.17687@z991.linuxsc.com>
Newsgroups comp.programming
Subject Re: A little puzzle.
Date 2022-11-27 18:38 -0800
Organization A noiseless patient Spider
Message-ID <8635a3951f.fsf@linuxsc.com> (permalink)
References (2 earlier) <87wn7nj9mb.fsf@bsb.me.uk> <86sfi98xnx.fsf@linuxsc.com> <87leo1i5bo.fsf@bsb.me.uk> <86k03k7yqe.fsf@linuxsc.com> <87o7stisxy.fsf@bsb.me.uk>

Show all headers | View raw


Ben Bacarisse <ben.usenet@bsb.me.uk> writes:

> Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
>
>> Ben Bacarisse <ben.usenet@bsb.me.uk> writes:
>>
>>> Tim Rentsch <tr.17687@z991.linuxsc.com> writes:
>>>
>>>> I think this problem would make a good interview question,
>>>> provided care were taken to phrase it so the subtleties were
>>>> still there, but possible points of confusion were reduced.
>>>> Not that I know how to do that... :)
>>>
>>> I didn't make a good job of presenting it.  It certainly didn't
>>> pique anyone else's interest, but then comp.programming is not
>>> well populated.
>>
>> I think part of the problem is that the question looks "easier"
>> than it really is.  People have an initial reaction (certainly I
>> know I did) but don't continue to think through what the issues
>> might be.
>
> I think so.  I am, to be honest, rather disappointed by the
> reception this problem has had.  Even after various examples and
> two explanations, some posters still don't know what's being
> asked, but at the time it is claimed that it's trivial and not
> worth coding up.  Sometimes both claims are made by the same
> poster.

I am somewhat baffled by the replies.  I thought what was being
sought was evident in your initial posting.  Perhaps not obvious,
but still clear enough after a bit of thought.

>> For what it's worth, here is a stab at presenting the problem.
>> It's longer than I would like it to be, but maybe it will be
>> helpful.
>>
>> We are interested in writing a function to answer a more general
>> version of the example problem stated below.
>>
>> Consider a plane flying easterly (and for simplicity, directly
>> above the equator).  We measure the plane's progress by its
>> longitude, measured to the nearest second of arc (1/3600 of a
>> degree), so from -180 degrees to 179 degrees 59 minutes 59
>> seconds (or equivalently from -648000 seconds to 647999 seconds).
>> We would like to know if a given longitude is between the plane's
>> starting longitude and ending longitude.  (Note that the
>> longitude measurements below are given in degrees, minutes, and
>> seconds, but we may assume that internally they are represented
>> as an integer number of seconds.)
>>
>> For example, if the plane flies
>>
>>    from Los Angeles, US (longitude -118 14' 37")
>>    to New York, US (longitude -73 56' 7")
>>
>> does it cross over the longitude lines of
>>
>>    Denver, US (longitude -104 59' 30"), or
>>    Moscow, Russia (longitude 37 37' 6")?
>>
>> Answer: the plane does cross the longitude line of Denver but not
>> that of Moscow.
>>
>> Similarly, if the plane flies
>>
>>    from Beijing, China (longitude 116 23' 0")
>>    to Los Angeles, US (longitude -118 14' 37")
>>
>> does it cross over
>>
>>    Tokyo, Japan (longitude 139 50' 32"),
>>    Waikiki, Hawaii, US (longitude -157 50' 4"), or
>>    Moscow, Russia (longitude 37 37' 6")?
>>
>> Answer: the plane does cross the longitude lines of Tokyo and
>> Waikiki but not that of Moscow.
>>
>> For the general case we would like to handle any circular measure
>> (for convenience having coordinates in some integer range).
>>
>> Exercise: write a function to answer this kind of question for
>> circular measures in general.  You may assume integer coordinates
>> and intervals that include the starting point but do not include
>> the end point.  Give a suitable declaration for the function,
>> and separately give a function definition to implement the given
>> interface.
>
> I think this is good, though the example with seconds of arc may
> appear fiddly to some people.  Degrees would do, but then the
> examples would become a bit fuzzy.

I agree on both points.  I didn't like the fiddly-ness, but no
better example came to mind.

> I would probably use times of day.  For example, my cheap
> "off-peak" electricity is from 22:00 to 00:30 and from 02:30 to
> 7:30 but there are all sorts possible examples:  times of day when
> I do not want to be disturbed, times when particular parking rules
> apply and so on.

I was looking for a circular measure that is widely known and also
has some negative values.  Longitude was the best I could think of.

> The problem would then be to determine, given a time of day (in
> minutes past midnight), if that time is within a particular
> period.

Hours of the day, especially on a 24-hour clock, is probably better
than longitude for the initial example. 

> I don't think it's a spoiler to give, first, a very concrete
> example, even including the function interface.  A second part of
> the question would be by ask about generalising this interface to
> any "circular" measure.

I was trying to be faithful (what I thought was) your not wanting
to give away the simplicity of a general solution.  I can't
decide if your example below gives away too much or might be
slightly misleading (because the modulus is inherent in the
measure).  It's hard to find a phrasing that is both specific
enough to clearly state what is being sought and also not so
specific that it gives away the nature of the problem.  I was
trying to strike a balance point, apparently not quite balanced
enough.  :)

> So I don't think it would matter to help DAK by giving
>
>   with Ada.Text_IO;
>   use Ada.Text_IO;
>
>   procedure Longitude is
>
>      function Flight_East_Crosses_Longitude
>        (Start_Seconds, End_Seconds, Longitude : Integer) return Boolean is
>      begin
>         -- Your code here
>      end Flight_East_Crosses_Longitude;
>
>      Beijing     : constant Integer := ((+116 * 60) + 23) * 60 +  0;
>      Los_Angeles : constant Integer := ((-118 * 60) + 14) * 60 + 37;
>      Tokyo       : constant Integer := ((+139 * 60) + 50) * 60 + 32;
>      Waikiki     : constant Integer := ((-157 * 60) + 50) * 60 +  4;
>      Moscow      : constant Integer := ((+037 * 60) + 37) * 60 +  6;
>
>   begin
>      Put_Line(
>         Flight_East_Crosses_Longitude(Beijing, Los_Angeles,   Tokyo)'img
>      );
>      Put_Line(
>         Flight_East_Crosses_Longitude(Beijing, Los_Angeles, Waikiki)'img
>      );
>      Put_Line(
>         Flight_East_Crosses_Longitude(Beijing, Los_Angeles,  Moscow)'img
>       );
>   end Longitude;

(I reformatted the calls to Put_Line() so they wouldn't violate
my newsreader's idea of how long lines should be.)

> Of course, Ada is one of the few languages where one can actually
> implement largely type-generic functions, so it's a shame to be
> this specific, but as I say, that could come later.

I can't help feeling that your suggestion of using times of
day -- especially if expressed in 4-digit military time format --
would be a better choice for the example.

Back to comp.programming | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-21 20:45 +0000
  Re: A little puzzle. David Brown <david.brown@hesbynett.no> - 2022-11-21 22:06 +0100
    Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-21 21:21 +0000
      Re: A little puzzle. David Brown <david.brown@hesbynett.no> - 2022-11-22 09:17 +0100
        Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-11-22 11:07 +0000
          Re: A little puzzle. David Brown <david.brown@hesbynett.no> - 2022-11-22 15:17 +0100
        Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-22 11:40 +0000
          Re: A little puzzle. David Brown <david.brown@hesbynett.no> - 2022-11-22 15:26 +0100
            Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-22 15:28 +0000
              Re: A little puzzle. David Brown <david.brown@hesbynett.no> - 2022-11-22 16:30 +0100
      Re: A little puzzle. David Brown <david.brown@hesbynett.no> - 2022-11-22 09:23 +0100
        Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-11-22 11:08 +0000
        Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-22 12:54 +0000
  Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-21 17:39 -0800
    Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-22 13:00 +0000
      Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-22 05:31 -0800
  Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-11-22 11:04 +0000
    Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-22 12:53 +0000
      Re: A little puzzle. Paul N <gw7rib@aol.com> - 2022-11-22 05:01 -0800
        Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-22 05:48 -0800
          Re: A little puzzle. David Brown <david.brown@hesbynett.no> - 2022-11-22 15:31 +0100
      FFs [was Re: A little puzzle] Richard Harnden <richard.nospam@gmail.com> - 2022-11-22 16:29 +0000
    Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-12-14 13:57 +0000
      Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-12-14 13:58 +0000
      Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-12-14 16:22 +0000
  Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-22 05:24 -0800
    Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-22 15:23 +0000
      Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-23 08:04 -0800
        Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-24 00:06 +0000
          Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-11-24 04:06 +0000
            Re: A little puzzle. David Brown <david.brown@hesbynett.no> - 2022-11-24 09:29 +0100
              Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-24 13:23 +0000
            Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-24 13:14 +0000
              Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-11-24 14:00 +0000
                Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-24 14:59 +0000
                Re: A little puzzle. Richard Harnden <richard.nospam@gmail.com> - 2022-11-24 19:00 +0000
                Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-24 20:36 +0000
              Re: A little puzzle. Andreas <nobody@me.com> - 2022-11-27 00:38 +0100
                Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-27 00:11 +0000
          Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-24 14:51 -0800
            Re: A little puzzle. "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2022-11-25 09:30 +0100
              Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-25 01:16 -0800
                Re: A little puzzle. "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2022-11-25 11:11 +0100
                Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-25 06:26 -0800
                Re: A little puzzle. "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2022-11-25 15:59 +0100
            Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-26 16:25 +0000
              Re: A little puzzle. "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2022-11-26 19:36 +0100
                Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-27 02:03 +0000
                Re: A little puzzle. "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2022-11-27 11:02 +0100
                Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-01 04:30 -0800
                Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-12-02 00:22 +0000
                Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-02 22:30 -0800
                Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-12-03 02:43 -0800
              Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-27 18:38 -0800
  Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-11-27 02:27 -0800
    Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-27 19:23 -0800
      Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-11-27 22:59 -0800
        Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-11-27 23:03 -0800
        Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-28 07:22 -0800
          Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-11-28 10:20 -0800
            Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-29 04:29 -0800
              Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-11-29 04:50 -0800
                Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-11-29 14:47 +0000
                Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-29 17:23 +0000
                Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-11-29 09:50 -0800
                Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-30 01:39 -0800
                Re: A little puzzle. Richard Heathfield <rjh@cpax.org.uk> - 2022-11-30 11:10 +0000
                Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-30 02:24 -0800
                Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-11-30 06:28 -0800
                Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-01 06:55 -0800
                Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-12-02 01:54 -0800
  Re: A little puzzle. Richard Harnden <richard.nospam@gmail.com> - 2022-11-28 11:20 +0000
    Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-28 07:30 -0800
      Re: A little puzzle. Richard Harnden <richard.nospam@gmail.com> - 2022-11-28 17:15 +0000
        Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-29 04:03 -0800
          Re: A little puzzle. Richard Harnden <richard.nospam@gmail.com> - 2022-11-29 15:03 +0000
            Re: A little puzzle. "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2022-11-29 16:13 +0100
              Re: A little puzzle. Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-11-29 17:37 +0000
                Re: A little puzzle. "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> - 2022-11-29 19:02 +0100
                Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-11-29 10:10 -0800
            Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-11-30 03:32 -0800
              Re: A little puzzle. Julio Di Egidio <julio@diegidio.name> - 2022-11-30 06:36 -0800
              Re: A little puzzle. Richard Harnden <richard.nospam@gmail.com> - 2022-11-30 15:21 +0000
                Re: A little puzzle. Tim Rentsch <tr.17687@z991.linuxsc.com> - 2022-12-01 06:51 -0800

csiph-web