A few years ago, I came up with this verb to find palindromic integers in a
list of integers:

pal=.]#~(=|.&.":&>)


Test:

pal 12321 12322 345 343 789987 9878

12321 343 789987


Is there a more efficient approach?



Skip Cave
Cave Consulting LLC


On Tue, May 9, 2023 at 12:56 PM 'Michael Day' via Programming <
programm...@jsoftware.com> wrote:

> I realise this thread is about experimenting with AI coding in J, so
> forgive me for
> merely suggesting just another function  for a shortest derived
> palindrome formed
> by prepending a string to a given string:
>
> NB. Test palindrome-ness with a hook:
> ispal =: -:|.
>
> NB. Form palindrome given character string (or numeric vector) y
> mdpal =: {{
>     y,~ |.y}.~ (>:@i:&1) ispal \ y
> }}
>
>     mdpal 'abcd'
> dcbabcd
>     mdpal 'aacecaaa'
> aaacecaaa
>
> Appending a string might be better:
>     mdpal 'abcbadefg'
> gfedabcbadefg
>
>     mdpal&.|. 'abcbadefg'  NB. simulate appending by working on reverse...
> abcbadefgfedabcba
> ... though not in this case!
>
> Just for fun,
>
> Mike
> PS - I am not  a Robot !?
>
>
>
> On 07/05/2023 10:30, Thomas McGuire wrote:
> > Forgive me for keeping my own thread alive.
> >
> > This article at Hackernoon put together a comparison of Coding AI bots
> using Leetcode questions as the stem:
> >
> https://hackernoon.com/how-ai-bots-code-comparing-bing-claude-co-pilot-gpt-4-and-bard
> 
> > How AI Bots Code: Comparing Bing, Claude+, Co-Pilot, GPT-4 and Bard
> > hackernoon.com
> >
> > Co-pilot was the easiest one for me to access so that’s why I chose it.
> >
> > So following hackernoon’s lead here are the results on Leetcode question
> 214:
> >
> > STEM:
> > NB. find the shortest palindrome for a string by adding letters to the
> front of it
> > shortpal =: 3 : 0
> >
> > Copilot code:
> > NB. find the shortest palindrome for a string by adding letters to the
> front of it
> > shortpal =: 3 : 0
> >    's'=.y
> >    n=. #s
> >    for_i. n do.
> >      if. (s i.~ |. s) = s do.
> >        return. s
> >      end.
> >      s=. (i{a.) , s
> >    end.
> > )
> >
> > Now the copilot code doesn’t work but the structure of this very
> un-J-like code is workable. I made some changes and got it working:
> > Copilot code fixed to work:
> > shortpal1 =: 3 : 0
> >    's'=.y
> >    n=. #s
> >    for_i. s do.
> >      if. s -: |. s do.
> >        return. s
> >      end.
> >      s=. (|.(_1-i_index){.s) , y
> >    end.
> > )
> >
> > the changes were
> > - fixed the palindrome test to exit the function.
> > - fixed the building of the palindrome alway starting from the original
> string, catenating the reverse of the next increment of letters from the
> end of the string.
> >
> >
> >
> > My J way of handling this problem is as follows:
> > NB. fpal - filter for palindromes, return the palindrome else return
> > NB.        empty atom if not a palindrome
> > fpal=: 0&$`]@.(] -: |.)
> >
> > NB. mkpalindrome - make palindrome by catenating reversed suffixes
> > NB.                filter out the palindromes, remove empty boxed
> > NB.                elements. Then get the shortest one created which
> > NB.                is the tail of the boxed list. unbox the answer
> > mkpalindrome =: {{>@{:@-.&(<'') <@fpal@(,&y)@|.\.y}}
> >
> > Running this on the leetcode simple examples:
> >     mkpalindrome 'abcd'
> > dcbabcd
> >     mkpalindrome 'aacecaaa'
> > aaacecaaa
> >
> > Interestingly, in my previous email ,Copilot was able to discern the
> fork for average. In the palindrome case the fairly well known fork for
> palindrome testing was not discovered by Copilot.  Yet when I was
> developing my 'improved 'J example. I happened to type the following:
> > NB. test if string is a palindrome
> >
> > Copilot responded:
> > pal =: 3 : 0
> >    s=.y
> >    s -: |. s
> > )
> >
> > This is close to the fork implementation.
> >
> > I won’t post the code, but by using the {{}} method of function calls
> Copilot produced a child like attempt at a J one liner. When I used an open
> paren ‘(' to see if I could force a fork implementation it again gave a
> child like response for a J fork. Neither of the answers were working code.
> >
> > Copilot is supposed to be pair programming with an AI bot. The github
> site indicates that in Python about 40% of the Copilot suggested Python
> code gets used. In other languages it is about 20%-25%.  In my limited use,
> I find that, rather than peers. I am the Senior programmer and Copilot is
> the High School intern just learning J. Still it’s a fun toy to play with
> when your programming.
> >
> > The major question at this point is will these AI bots ever write good J
> code (or any array language code for that matter) or is the terseness of an
> array language too abstracted for AI to become proficient in it?
> >
> >
> >> On May 5, 2023, at 12:07 AM, Thomas McGuire <tmcguir...@gmail.com>
> wrote:
> >>
> >> GitHub Copilot works under Visual Studio Code
> >>
> >> GitHub user tikkanz published an extension for VS Code to edit and run
> J. Fairly easy to install.
> >>
> >> VSCode then needs to have the Copilot extensions installed. It will ask
> you to login into your account and then you are all set.
> >>
> >> I typed in the following into a new .ijs file:
> >> NB. average list of numbers in language-j
> >> ave =:
> >>
> >> copilot then finished the line with and offered an example run of the
> function, so after I pressed the tab key I had the following:
> >> NB. average list of numbers in language-j
> >> ave =: +/ % #
> >>     ave 1 2 3 4 5
> >>
> >> Now I know the fork for average is in about 20 different electronic
> documents. Still I was surprised that Copilot worked for J at all and more
> surprised that it picked up the fork paradigm from the language. I was
> expecting more of a functional approach such as:
> >> ave1 =: 3 : 0
> >> (+/ y) % #y
> >> )
> >>
> >> It costs 100 bucks per year unless you are a student or educator (then
> it’s free). I don’t actively program for a living so I don’t know how many
> developers are actively using AI tools for coding. But from a beginner
> perspective having a tool that produces relatively good J code with a
> prompt and a function header would be a great way to come up to speed in
> the language in a short period of time.
> >>
> >> Is it enough just to have J code examples on GitHub or is there a more
> direct way to curate the AI tool so that it produces better J code?
> >>
> >> Throwing it out there to see if anyone else has played with this.
> >>
> >> Tom McGuire
> > ----------------------------------------------------------------------
> > 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

Reply via email to