I began to consider leap year, and I am basing my answers on todayno . But
I think I am getting errors based on it. Does this seem ok to you?
diff=: 13 :'(todayno x)-todayno y'
(2005 3 1) diff 2004 2 29
366
(2004 3 1) diff 2003 2 29
366
(2003 3 1) diff 2002 2 29
365
(2002 3 1) diff 2001 2 29
365
(2001 3 1) diff 2000 2 29
366
(2000 3 1) diff 1999 2 29
366
(1999 3 1) diff 1998 2 29
365
(1998 3 1) diff 1997 2 29
365
(1997 3 1) diff 1996 2 29
366
(1996 3 1) diff 1995 2 29
366
Linda
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of robert
therriault
Sent: Tuesday, September 23, 2014 12:30 PM
To: [email protected]
Subject: Re: [Jprogramming] Weekend Puzzle - Age of Groundhog born 2002 2 2
Hey Raul,
You got me to rethink whether I needed to know if Feb 29th is included in
the interval. It turns out that I didn't. It also turns out that by using
your leap year I found that I didn't need todayno either!
Here is my considerably simpler version with a test suite. As a general
comment, I rarely work on these problems without having a test suite to
check that my 'solutions' work in all the cases I think are valid.
2014 9 23 age 2002 2 2 NB. Groundhog age
12 7 21
Cheers, bob
age =: 3 : 0 NB. age in yyyy mm dd as of x if born on y
'left argument is today ; right argument is birth day result is age in yyyy
mm dd'
:
if. x <&(1000#.]) y do. 'Wasn''t born yet!' return. end.
'yb mb db'=. y
'yt mt dt'=. x
ly=. 2| +/ 0= 4 100 400 | yb
dcount=. 31 , (28 + ly ) , 31 30 31 30 31 31 30 31 30 31
(yt-yb) , ((12|mt-mb) - dt<db) , ((mt-2){dcount )|dt-db
)
testdate =: 3 : 0
assert. 0 0 0 -: 2000 2 28 age 2000 2 28 NB. same date
assert. 0 0 1 -: 2000 3 2 age 2000 3 1 NB. event and current after feb 29 in
leap year
assert. 0 0 1 -: 2000 2 28 age 2000 2 27 NB. event and current before feb 29
in leap year
assert. 0 0 2 -: 2000 3 1 age 2000 2 28 NB. event before and current after
feb 29 in leap year
assert. 'Wasn''t born yet!' -: 2000 2 28 age 2000 3 1 NB. event before
current in leap year
assert. 0 0 1 -: 1900 3 2 age 1900 3 1 NB. event and current after feb 28 in
non leap year
assert. 0 0 1 -: 1900 2 28 age 1900 2 27 NB. event and current before feb 28
in non leap year
assert. 0 0 1 -: 1900 3 1 age 1900 2 28 NB. event before and current after
feb 28 in leap non year
assert. 'Wasn''t born yet!' -: 1900 2 28 age 1900 3 1 NB. event before
current in non leap year
assert. 1 0 1 -: 2000 3 2 age 1999 3 1 NB. event previous year and current
after feb 29 in leap year
assert. 1 0 1 -: 2000 2 28 age 1999 2 27 NB. event previous year and current
before feb 29 in leap year
assert. 1 0 1 -: 2000 3 1 age 1999 2 28 NB. event previous year before and
current after feb 29 in leap year
assert. 1 11 0 -: 2000 2 1 age 1999 3 1 NB. event previous year after and
current before feb 29 in leap year
assert. 1 0 1 -: 1900 3 2 age 1899 3 1 NB. event previous year and current
after feb 28 in non leap year
assert. 1 0 2 -: 1900 3 1 age 1899 2 27 NB. event previous year and current
before feb 28 in non leap year
assert. 1 0 1 -: 1900 3 1 age 1899 2 28 NB. event previous year before and
current after feb 28 in non leap year
assert. 1 11 0 -: 1900 2 1 age 1899 3 1 NB. event previous year after and
current before feb 29 in non leap year
)
testdate ''
On Sep 23, 2014, at 2:47 AM, Raul Miller <[email protected]> wrote:
> Or, in J:
>
> isleap=: 3 :'2|+/0=4 100 400|/y'
>
> isleap 1900 2000 2012 2100
> 0 1 1 0
>
> (I am mentioning this because I think I included a buggy version of
> this expression in an earlier message - I think I left out the 0=
> part.)
>
> Thanks,
>
> --
> Raul
>
>
> On Mon, Sep 22, 2014 at 10:13 PM, Don Kelly <[email protected]> wrote:
>> Fortunately, the use of "leap" is valid as long as one doesn't go back
past
>> 1901 or ahead past 2099.
>>
>> 1900 and 2100 aren't leap years (Fine tuning of the leap year calculation
).
>>
>> Don Kelly
>>
>>
>>
>>
>> On 20/09/2014 10:53 PM, robert therriault wrote:
>>>
>>> Hi Linda,
>>>
>>> I share your dream and sometimes the statement 'I have a dream' can
change
>>> the world. :-)
>>>
>>> On to the weekend puzzle...
>>>
>>> The first thing I need to figure out is whether the birthday has
happened
>>> this year or not. If it has then I can pretty easily get the number of
days
>>> since the birthday using todayno, but if it hasn't then I need to find
the
>>> number of days since the previous year's birthday.
>>>
>>> 'yg mg dg' =: gbday =: 2002 2 2 NB. Groundhog's birthday
>>> 'ya ma da'=:afterbday =: 2014 9 20 NB. An example of date after the
>>> birthday
>>> 'yb mb db'=:beforebday =: 2014 1 31 NB. An example of a date before
>>> the birthday
>>>
>>> bdYet=:(0>-/) &: todayno NB. returns 1 if the current date is in the
same
>>> calendar year before the birthday
>>> ya
>>> 2014
>>> ya=. ya- afterbday bdYet ({. afterbday),}.gbday NB.use the current
>>> year from example and the birthday
>>> ya
>>> 2014
>>> yb
>>> 2014
>>> yb=. yb- beforebday bdYet ({. beforebday),}.gbday
>>> yb
>>> 2013
>>>
>>> Next thing would be to define a vector that gives the accumulated days
in
>>> the year if the year were to start on February 1st. The leap year issue
>>> means that the first item in the list will be 29 if it is a leap year.
since
>>> I have already figured out whether I am counting from the previous year,
I
>>> will use the adjusted year to decide if the year that I am counting from
was
>>> a leap year. I will just use a simple (and incorrect) version of leap
year.
>>>
>>> leap=: 0= 4&|
>>> feb=: 28 + leap ya
>>> feb
>>> 28
>>> [daysFebFirst=: +/\ (feb), 31 30 31 30 31 31 30 31 30 31 31
>>> 28 59 89 120 150 181 212 242 273 303 334 365
>>>
>>> Finally, I create the results.
>>>
>>> [yr=:ya-yg NB. number of years
>>> 12
>>>
>>> [elapsed=: -/ todayno"_1 afterbday,: ya,}.gbday NB. days since the
>>> birthday
>>> 230
>>> [mr=: +/ elapsed > daysFebFirst NB. number of months
>>> 7
>>> [dr=: (<:mr){ elapsed - daysFebFirst
>>> 18
>>> yr,mr,dr
>>> 12 7 18
>>>
>>> And for the case of a date before the birthday Jan 31st 2014 we get
>>>
>>> [feb=: 28 + leap yb NB. No change since 2013 is not a leap year
>>> 28
>>> [yr=:yb-yg NB. number of years
>>> 11
>>>
>>> [elapsed=: -/ todayno"_1 beforebday ,: yb ,}.gbday NB. days since the
>>> previous birthday
>>> 363
>>> [mr=: +/ elapsed > daysFebFirst NB. number of months
>>> 11
>>> [dr=: (<:mr){ elapsed - daysFebFirst
>>> 29
>>> yr,mr,dr
>>> 11 11 29
>>>
>>> Cheers, bob
>>>
>>> On Sep 20, 2014, at 10:58 AM, Linda Alvord <[email protected]>
>>> wrote:
>>>
>>>> The J forum is my elementary school set of sub imjects. What you
suggest
>>>> is
>>>> exactly what I would hope would happen in a J classroom. All would
have
>>>> J.
>>>> All could experiment and exchange ideas. Hopefully they would have
>>>> solutions
>>>> they believe were correct. Then they could explain their thinking to
the
>>>> entire class and the teacher. At this point in the process, the
teacher
>>>> would not be a leader but a follower.
>>>>
>>>> Possibly I am dreaming....
>>>>
>>>> Linda
>>>>
>>>> -----Original Message-----
>>>> From: [email protected]
>>>> [mailto:[email protected]] On Behalf Of robert
>>>> therriault
>>>> Sent: Saturday, September 20, 2014 1:20 PM
>>>> To: [email protected]
>>>> Subject: Re: [Jprogramming] Weekend Puzzle - Age of Groundhog born 2002
2
>>>> 2
>>>>
>>>> Hi Linda,
>>>>
>>>> If you are looking for a way to get learners to be interested in the
>>>> problem, why not use the very model of learning that we are using here?
>>>>
>>>> You put a problem out to your class (forum) and see how the responses
go.
>>>> You as the teacher (moderator) are free to choose the rules, knowing
that
>>>> the students (participants) are able to put their attention elsewhere
if
>>>> things are not kept interesting. It is a style of learning that we use
on
>>>> these forums everyday and it seems to work for us.
>>>>
>>>> What might not work as well is going into the class and showing them
how
>>>> to
>>>> solve the problem, as this takes away so much from the experience that
we
>>>> enjoy when we are learning. The challenge for the teacher is not so
much
>>>> coming up with a solution, as it is to make sure that they are engaging
>>>> as
>>>> many students as possible. This is especially true at the extremes of
the
>>>> class' abilities - both the really adept and those that are struggling
>>>> with
>>>> the concepts are where teachers are most valuable.
>>>>
>>>> Just my two bits, but I would probably just start with the question of
>>>> 'how
>>>> would you measure time in metric?' and use that as a way to explore all
>>>> the
>>>> ways that you would count and group the types of time and how they way
we
>>>> measure time can be pretty crazy and why it might be good if we could
get
>>>> computers to do the work of taking care of the crazy systems that we
have
>>>> set up. Where the class would take this in terms of topic is wide open,
>>>> as a
>>>> teacher you just make sure that as the core concepts arise they are
>>>> covered
>>>> accurately.
>>>>
>>>> Cheers, bob
>>>>
>>>> ps. The quickest way to get me to care about the age of your groundhog
is
>>>> to
>>>> have one of my classmates start trying to figure it out, but my
learning
>>>> is
>>>> usually socially motivated. :-)
>>>>
>>>> On Sep 20, 2014, at 9:35 AM, Joe Bogner <[email protected]> wrote:
>>>>
>>>>> Hi Linda
>>>>>
>>>>> The solution is quite simple and uses one built verb from an addon. I
>>>>> posted it with the solution masked so others can try it on their own
>>>>> without accidentally seeing mine
>>>>>
>>>>> The actual solution is the result of this:
>>>>>
>>>>> |. solution2
>>>>> On Sep 20, 2014 11:54 AM, "Linda Alvord" <[email protected]>
>>>>> wrote:
>>>>>
>>>>>> We are talking children here.
>>>>>>
>>>>>> Onyadot. emiTetaDot, ffiDst, onyadot, emiTetaDot, emitetad, sepyt
and
>>>>>> eriuqer are all denied!
>>>>>>
>>>>>> How about using +, -, *, ?, %: and that sort of thing.
>>>>>>
>>>>>> I must admit you did get the right answer!
>>>>>>
>>>>>> You can also get a second chance.
>>>>>>
>>>>>> Cheers, Linda
>>>>>>
>>>>>>
>>>>>>
>>>>>> -----Original Message-----
>>>>>> From: [email protected]
>>>>>> [mailto:[email protected]] On Behalf Of Joe
>>>>
>>>> Bogner
>>>>>>
>>>>>> Sent: Saturday, September 20, 2014 9:10 AM
>>>>>> To: [email protected]
>>>>>> Subject: Re: [Jprogramming] Weekend Puzzle - Age of Groundhog born
2002
>>>>>> 2
>>>>
>>>> 2
>>>>>>
>>>>>> solution...
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> 1
>>>>>> 2
>>>>>> 3
>>>>>> 4
>>>>>> 5
>>>>>>
>>>>>>
>>>>>> lightly obfuscated for someone who doesn't want the solution
>>>>>>
>>>>>>
>>>>>> solution1=: 0 : 0
>>>>>>
>>>>>> )2 2 2002 onyadot emiTetaDot( ffiDst )02 9 4102 onyadot emiTetaDot(
>>>>>>
>>>>>> 'emitetad/sepyt' eriuqer
>>>>>>
>>>>>> )
>>>>>>
>>>>>>
>>>>>>
>>>>>> to run:
>>>>>>
>>>>>>
>>>>>> 0!:1 |. solution1
>>>>>>
>>>>>>
>>>>>>
>>>>>> solution2 =: 0 : 0
>>>>>>
>>>>>> )2 2 2002( ffiDst )02 9 4102(
>>>>>>
>>>>>> 'emitetad/sepyt' eriuqer
>>>>>>
>>>>>> )
>>>>>>
>>>>>>
>>>>>> 0!:1 |. solution2
>>>>>>
>>>>>>
>>>>>>
>>>>>> note: both take advantage of a addon. solution1 uses todayno just
>>>>>> because
>>>>>> it was stated in the problem but solution2 is what I'd really use
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Sat, Sep 20, 2014 at 4:54 AM, Linda Alvord
<[email protected]>
>>>>>> wrote:
>>>>>>
>>>>>>> Using the verb todayno which provides the number of days since the
>>>>>>> beginning of 1800, write what you need to find the age today of a
>>>>>>> groundhog
>>>>>>> born on 2002 2 2.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> todayno 2014 9 2014
>>>>>>>
>>>>>>> 80418
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> 2014 9 20 age 2002 2 2
>>>>>>>
>>>>>>> 12 7 18
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> His age is 12 years, 7 months and 18 days. Use simple J. Check
that
>>>>>>
>>>>>> your
>>>>>>>
>>>>>>> solution provides a correct answer for you birthday.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Have a pleasant weekend.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Linda
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
----------------------------------------------------------------------
>>>>>>> For information about J forums see
http://www.jsoftware.com/forums.htm
>>>>>>>
>>>>>>
----------------------------------------------------------------------
>>>>>> For information about J forums see
http://www.jsoftware.com/forums.htm
>>>>>>
>>>>>>
----------------------------------------------------------------------
>>>>>> For information about J forums see
http://www.jsoftware.com/forums.htm
>>>>>>
>>>>> ----------------------------------------------------------------------
>>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>>
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>>
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>
>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm