[Jprogramming] Challenge 11 Wave the Flag
Raul Miller
rauldmiller at gmail.com
Mon Jun 4 21:53:35 HKT 2012
13 :'(([: +/ [: *: -)"1& x)"1 y'
4 : '(([: +/ [: *: -)"1& x)"1 y'
13 : is not doing anything useful.
A f B is equivalent to
(([: +/ [: *: -)"1& A)"1 B
So this is building up a function based on A which is being applied to
each row of B. Note that it's first building up something based on
each row of A and that this something is being used on each row of B.
So we would expect the result to have a shape based on everything but
the last dimension of B followed by everything but the last dimension
of A followed by whatever the function itself produces. And, testing,
we can see that this is the case:
$A
3 2
$B
4 4 2
$(([: +/ [: *: -)"1& A)"1 B
4 4 3
So we get a number for each combination of row from A and row from B.
So, next, let's consider an arbitrary row from A (4 1) and an
arbitrary row from B (2 3):
(([: +/ [: *: -)"1& (4 1))"1 (2 3)
8
Note that in this simplified case, we do not need the rank specifications:
(([: +/ [: *: -)& 4 1)2 3
8
And, we can get rid of the & if we move the second argument to the
unoccupied side of the verb that & was modifying:
2 3 ([: +/ [: *: -) 4 1
8
And, we can replace the train with an equivalent noun phrase, putting
the left and right arguments on each odd verb (counting from the
right) and eliminating any instances of [:
+/ *: (2 3 - 4 1)
8
The parenthesis were not actually necessary here, but I included them
because the other odd verbs were all eliminated so I did not have any
place to show that parenthesis would be necessary.
So, anyways, we see that it's the sum of the squares of the difference
between the rows of A and the rows of B.
Here's an equivalent expression:
f=: +/@:*:@:-"1/~
Or, since you do not like @:
f=: [: +/"1 [: *: -"1/~
--
Raul
On Sun, Jun 3, 2012 at 10:03 PM, Linda Alvord <lindaalvord at verizon.net> wrote:
> Your result looks interesting and I am able to get a tree from 5!:4 <'waveR'.
>
> Here's a real issue for me! What is function f doing to product the result you get?
>
> A=:3 2$3 3 4 1 1 3
> B=:(i.4),."0 1 i.4
> f=: 13 :'(([: +/ [: *: -)"1& x)"1 y'
> A f B
> 18 17 10
> 13 16 5
> 10 17 2
> 9 20 1
>
> 13 10 9
> 8 9 4
> 5 10 1
> 4 13 0
>
> 10 5 10
> 5 4 5
> 2 5 2
> 1 8 1
>
> 9 2 13
> 4 1 8
> 1 2 5
> 0 5 4
>
> 5!:4 <'f'
> ┌─ 4
> ── : ─┴─ ,:'(([: +/ [: *: -)"1& x)"1 y'
>
> When there is some way to untangle this so I can figure out what is happening? I find the tree diagrams helpful but some code makes that impossible.
>
> Can you give a simple translation for this function.
>
> Thanks in advance.
>
> Linda
>
>
> -----Original Message-----
> From: programming-bounces at jsoftware.com [mailto:programming-bounces at jsoftware.com] On Behalf Of Raul Miller
> Sent: Sunday, June 03, 2012 11:23 AM
> To: Programming forum
> Subject: Re: [Jprogramming] Challenge 11 Wave the Flag
>
> If by simplification you mean "fewer tokens while avoiding text definitions and @ and @: then here is a variation on Jose's approach:
>
> waveR=: [:<"_1 [:|.&|:^:4 3 2 1 0 [:(|."_1~ [:>. +/ .=&' ' % _2:) [:> ;:
>
> I save 3 tokens by replacing (<5) with 4 3 2 1 0
>
> I save 2 tokens by replacing
> [: - [: <. [: -: ' '+/ .=~
> with
> [: >. +/ .=&' ' % _2:
>
> I save 2 tokens by replacing
> ([: |. |:)
> with
> |.&|:
>
> Note, however that if you are purely counting tokens, u at v and u@:v can be simpler than ([: u v).
>
> Also, if you count text as a single token, text definitions are automatically simpler than most everything. (But if you add to the token count the number of tokens represented in the text, this goes
> away.)
>
> --
> Raul
>
> On Sun, Jun 3, 2012 at 10:23 AM, Linda Alvord <lindaalvord at verizon.net> wrote:
>>
>> Viktor Cerovski and Jose Quintanta have provided solutions that are
>> simplifying the waves.
>>
>> B=:'a big arrow focused somewhere'
>> wave=: [: <"2 [: ([: |: |.)^:(<5) ([: > ;:)|."0 1~ [: - [: <. [: -: [:
>> +/"1 ' ' = [: > ;:
>> #;:'[: <"2 [: ([: |: |.)^:(<5) ([: > ;:) |."0 1~ [: - [: <. [: -: [:
>> +/"1 '' '' = [: > ;:'
>> 40
>> waveVC=:[: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ [: - [: <. [: -: [: +/"1 '
>> ' = ]) [: > ;:
>> #;:'[: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ [: - [: <. [: -: [: +/"1 '' ''
>> = ]) [: > ;'
>> 39
>> waveJQ=.[: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ [: - [: <. [: -: '
>> '+/ .=~
>> ]) [: > ;:
>> #;:'[: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ [: - [: <. [: -: '' ''+/
>> .=~
>> ]) [: > ;:'
>> 38
>> Any more simplifications waiting in thewings?
>>
>> Linda
>>
>> -----Original Message-----
>> From: programming-bounces at jsoftware.com
>> [mailto:programming-bounces at jsoftware.com] On Behalf Of Jose Quintana
>> Sent: Sunday, June 03, 2012 12:33 AM
>> To: programming at jsoftware.com
>> Subject: Re: [Jprogramming] Challenge 11 Wave the Flag
>>
>>
>> Cheating... wave1=. [: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ [: - [: <. [:
>> -: ' ' +/ .=~ ]) [: > ;:
>>
>> cheat=. (lr<'wave1')&apply f.
>> lr<'cheat'
>> '[: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ ([: - [: <. [: -: '' '' +/ .=~
>> ]))
>> [: > ;:'&(128!:2)
>> #;:lr<'cheat'
>> 7
>> ... and without cheating
>> wave1=. [: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ [: - [: <. [: -: ' '
>> +/ .=~ ]) [: > ;:
>> #;: '[: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ [: - [: <. [: -: ''
>> '' +/ .=~ ]) [: > ;:'
>> 38 > Date: Sat, 2 Jun 2012 02:38:40 -0700
>>> From: viktor.cerovski at gmail.com
>>> To: programming at jsoftware.com
>>> Subject: Re: [Jprogramming] Challenge 11 Wave the Flag
>>>
>>>
>>>
>>>
>>> Linda Alvord wrote:
>>> >
>>> >
>>> >
>>> > It was David Ward Lambert's idea to write a one line expression
>>> > with the fewest tokens. We worked together and got to 40 tokens.
>>> > Any ideas to make this any better.
>>> >
>>> >
>>> >
>>> > B=:'a big arrow focused somewhere'
>>> >
>>> > NB. center justify (Hint from DWL x |."0 1 y)
>>> >
>>> > cj=: 13 :'(-<.-:+/"1 '' ''=>;:y)|."0 1>;:y'
>>> >
>>> > cj
>>> >
>>> > ([: - [: <. [: -: [: +/"1 ' ' = [: > ;:) |."0 1 [: > ;:
>>> >
>>> > cj B
>>> >
>>> > a
>>> > big
>>> > arrow
>>> > focused
>>> > somewhere
>>> >
>>> > NB. quarter turns
>>> >
>>> > qtla=: 13 :'y;(|:|.y);(|.|:|.|:y);(|.|:y);y'
>>> >
>>> > qtla
>>> >
>>> > ] ; ([: |: |.) ; ([: |. [: |: [: |. |:) ; ] ;~ [: |. |:
>>> >
>>> > qtla cj B
>>> >
>>> > ----------T-----T---------T-----T---------┐
>>> > │ a │s │erehwemos│ e│ a │ │ big │of │
>>> > desucof │ dr│ big │ │ arrow │moa │ worra │ wee│ arrow
>>> > │ │ focused │ecrb │ gib │ gosh│ focused │ │somewhere│wuria│
>>> > a │airuw│somewhere│ │ │hsog │ │ brce│ │
>>> > │ │eew │ │ aom│ │ │ │rd │
>>> > │ fo│ │ │ │e │ │ s│ │
>>> > L---------+-----+---------+-----+----------
>>> >
>>> > NB. 5 quarter turns David Ward Lambert
>>> >
>>> > qtdwl=: 13 :'<"2 ([:|:|.)^:(<5)y'
>>> >
>>> > qtdwl cj B
>>> >
>>> > ----------T---------T---------T---------T---------┐
>>> > │ a │s │erehwemos│ e │ a │ │ big │of
>>> > │ desucof │ dr │ big │ │ arrow │moa │ worra │
>>> > wee │ arrow │ │ focused │ecrb │ gib │ gosh │
>>> > focused │ │somewhere│wuria │ a │airuw │somewhere│ │
>>> > │hsog │ │ brce │ │ │ │eew │
>>> > │ aom │ │ │ │rd │ │ fo │
>>> > │ │ │e │ │ s │ │
>>> > L---------+---------+---------+---------+----------
>>> >
>>> > qtdwl
>>> >
>>> > [: <"2 ([: |: |.)^:(<5)
>>> >
>>> >
>>> >
>>> > wave=: [: <"2 [: ([: |: |.)^:(<5) ([: > ;:)|."0 1~ [: - [: <. [: -:
>> [:
>>> > +/"1 ' ' = [: > ;:
>>> >
>>> >
>>> Here is a 39 token version:
>>>
>>> wave1=:[: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ [: - [: <. [: -: [:
>>> +/"1
>> '
>>> ' = ]) [: > ;:
>>>
>>> #;:'[: <"2 [: ([: |: |.)^:(<5) [: (|."0 1~ [: - [: <. [: -: [: +/"1 ''
>> ''
>>> = ]) [: > ;:'
>>> 39
>>>
>>>
>>>
>>> >
>>> > wave B
>>> >
>>> > ----------T---------T---------T---------T---------┐
>>> > │ a │s │erehwemos│ e │ a │ │ big │of
>>> > │ desucof │ dr │ big │ │ arrow │moa │ worra │
>>> > wee │ arrow │ │ focused │ecrb │ gib │ gosh │
>>> > focused │ │somewhere│wuria │ a │airuw │somewhere│ │
>>> > │hsog │ │ brce │ │ │ │eew │
>>> > │ aom │ │ │ │rd │ │ fo │
>>> > │ │ │e │ │ s │ │
>>> > L---------+---------+---------+---------+----------
>>> >
>>> > wave
>>> >
>>> > [: <"2 [: ([: |: |.)^:(<5) ([: > ;:) |."0 1~ [: - [: <. [: -: [: +/"1 '
>> '
>>> > =
>>> > [: > ;:
>>> >
>>> > #;:'[:<"2[:([:|:|.)^:(<5)([:>;:)|."0 1~[:-[:<.[:-:[:+/"1'' ''=[:>;:'
>>> >
>>> > 40
>>> >
>>> >
>>> >
>>> > Hopefully David will send his version of 39 tokens but not simple J.
>>> > Note also that you must paste the long line for wave together.
>>> >
>>> >
>>> >
>>> > Linda
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> >
>>> > From: Linda Alvord [mailto:lindaalvord at verizon.net]
>>> > Sent: Tuesday, May 01, 2012 3:17 AM
>>> > To: 'Linda Alvord'
>>> > Subject: Challenge 11 Wave the Flag
>>> >
>>> >
>>> >
>>> > Challenge 10 Wave the Flag PLEASE DO NOT RESPOND UNTIL 5/28/2012
>>> > 12
>> am
>>> > EST
>>> >
>>> >
>>> >
>>> > Here's a little preparation for Memorial Day.
>>> >
>>> >
>>> >
>>> > S=:10 16$(16$' '),176$(16$'* '),16$' * '
>>> >
>>> > T=:10 36$(36$'#'),72$' '
>>> >
>>> > U=:9 52$(104$' '),364$(52$'#'),104$' '
>>> >
>>> > <' ',"1(((S,"1 ' '),.T),U),"1 ' '
>>> >
>>> > --------------------------------------------------------┐
>>> > │ #################################### │ │ * * *
>>> > * * * │ │ * * * * *
>>> > │ │ * * * * * * #################################### │ │ * *
>>> > * * * │ │ * * * * * *
>>> > │ │ * * * * * #################################### │ │ * *
>>> > * * * * │ │ * * * * *
>>> > │ │ * * * * * * #################################### │ │
>>> > │ │ │ │
>>> > #################################################### │ │
>>> > │ │ │ │
>>> > #################################################### │ │
>>> > │ │ │ │
>>> > #################################################### │
>>> > L--------------------------------------------------------
>>> >
>>> >
>>> >
>>> > Part 1: Use viewmat and create a little flag. Next design a
>>> > function to rotate it clockwise 90 degrees successively until it is
>>> > in the original position.
>>> >
>>> >
>>> >
>>> > load viewmat
>>> >
>>> > flag=:
>>> >
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> >
>>> > wwwwwwwwwwwwww
>>> >
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> >
>>> > wwwwwwwwwwwwww
>>> >
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> >
>>> > wwwwwwwwwwwwww
>>> >
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> >
>>> > wwwwwwwwwwwwww
>>> >
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> > wwwwwwww
>>> >
>>> >
>>> >
>>> > Part 2:
>>> >
>>> >
>>> >
>>> > A=:'we celebrate Memorial Day on May the twenty eighth'
>>> >
>>> > wave=:
>>> >
>>> > ------------T-----------T-----------T-----------T-----------┐
>>> > │----------┐│----------┐│----------┐│----------┐│----------┐│
>>> > ││ we │││ Mc │││ hthgie │││ e │││ we ││
>>> > ││celebrate│││et ee │││ ytnewt │││ tl │││celebrate││
>>> > ││Memorial │││iw ml │││ eht │││ aa yh│││Memorial ││ ││
>>> > Day │││getMoDoew│││ yaM │││ riy yett│││ Day ││ ││ on
>>> > │││hnhanarbe│││ no │││ebranahnh│││ on ││ ││ May
>>> > │││ttey yir │││ yaD │││weoDoMteg│││ May ││ ││ the │││hy
>>> > aa │││ lairomeM│││ lm wi│││ the ││ ││ twenty │││ lt
>>> > │││etarbelec│││ ee te│││ twenty ││ ││ eighth │││ e │││
>>> > ew │││ cM │││ eighth ││
>>> > │L----------│L----------│L----------│L----------│L----------│
>>> > L-----------+-----------+-----------+-----------+------------
>>> >
>>> >
>>> >
>>> > Reshape A into a 9 9 square matrix. Justify all lines in the center.
>>> > If a line has an even number of letters put the extra letter on the
>>> > left. Now design a function to rotate the words in a similar
>>> > fashion to the flag above. Note the letters in "we" as they move
>>> > around clockwise. Your function should work for any square literal matrix.
>>> >
>>> >
>>> >
>>> > Happy Memorial Day!
>>> >
>>> >
>>> >
>>> > Linda
>>> >
>>> > -------------------------------------------------------------------
>>> > -
>>> > -- For information about J forums see
>>> > http://www.jsoftware.com/forums.htm
>>> >
>>>
>>> --
>>> View this message in context:
>>> http://old.nabble.com/Re%3A-Challenge-11-Wave-the-Flag-tp33948875s241
>>> 9 3p33948951.html Sent from the J Programming mailing list archive at
>>> Nabble.com.
>>>
>>> ---------------------------------------------------------------------
>>> - 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
More information about the Programming
mailing list