Thanks for that reference. It helped me understand what was going on here
and a good reminder for me to revisit JfoC Programmers more often.
A great solution guys! My new preferred version of dedouble:

splitDigraph=: ,`([,'X',])@.((= {.) *. 2 | #@])
dedouble=: splitDigraph/&.|.

I can live with it not working for empty strings too, but if that were a
deal-breaker I could define as:

dedouble=: splitDigraph/&.|. :: ]

On Sat, Feb 6, 2021 at 3:25 AM R.E. Boss <r.e.b...@outlook.com> wrote:

> "It took me a little to understand why this works (I first didn’t get
> /&.|. actually works front-to-back) I like this approach."
>
>
>
> See the brilliant story in 25. Loopless Code VI: Temporary Variables<
> https://www.jsoftware.com/help/jforc/loopless_code_vi_temporary_v.htm>
> where I learned it.
>
>
>
>
>
> R.E. Boss
>
>
>
>
>
> -----Original Message-----
> From: Programming <programming-boun...@forums.jsoftware.com> On Behalf Of
> Hauke Rehr
> Sent: vrijdag 5 februari 2021 12:50
> To: programm...@jsoftware.com
> Subject: Re: [Jprogramming] Progressive insertion into a string
>
>
>
> It took me a little to understand why this works (I first didn’t get /&.|.
> actually works front-to-back) I like this approach. I only wonder why you
> didn’t
>
>
>
> v1a=:4 : '(,`(,`([,x,])@.(={.))@.(2|#@]))/&.|<mailto:2|#@]))/&.|>. y'
>
>
>
> and now you see it’s actually
>
>
>
> v2a=:4 : '(,`([,x,])@.((={.)*.2|#@]))/&.|<mailto:*.2|#@]))/&.|>. y'
>
>
>
> it’s a matter of taste, mostly
>
> but I think it’s more readable;
>
> and I developed a disgust to
>
> @.(0=<test>) and @.(1=<test>)
>
> just like with some people
>
> writing nonsense like
>
> if (myBool == true)
>
>
>
> Am 05.02.21 um 12:34 schrieb R.E. Boss:
>
> > Better is
>
> >
>
> >    v0a=:4 : '((,`([,x,])@.(={.))`,@.(0=2|#@]))/&.|<mailto:0=2|#@]))/&.|>.
> y'
>
> >
>
> >    X v0a L:0 }:data
>
> >
> +-------------------+------------------+---------------------+----------------------+
>
> >
> |THEαEQUICKBROWFαFOX|THEαEQUICKBROWFOOX|TαTHEαEQUICKBROWFαFOX|TαTHEαEQUICKBROWFOOαOX|
>
> >
> +-------------------+------------------+---------------------+----------------------+
>
> >
>
> > Then
>
> >
>
> >    soln (-: 'X' v0a L:0 ])&}:data
>
> > 1
>
> >
>
> >
>
> > R.E. Boss
>
> >
>
> >
>
> > -----Original Message-----
>
> > From: Programming <programming-boun...@forums.jsoftware.com<mailto:
> programming-boun...@forums.jsoftware.com>> On Behalf
>
> > Of R.E. Boss
>
> > Sent: vrijdag 5 februari 2021 10:33
>
> > To: programm...@jsoftware.com<mailto:programm...@jsoftware.com>
>
> > Subject: Re: [Jprogramming] Progressive insertion into a string
>
> >
>
> >    v0=:((,`([,X,])@.(={.))`,@.(0=2|#@]))/&.|<mailto:0=2|#@]))/&.|>.
>                    NB. My solution
>
> >    v1=:3 : '(([:*./ ~:/"1)-: ([:I.2=/\{.)-:X I.@:={:)|<mailto:I.@:=%7b:)|>:
> _2[\ y'   NB. Check on correctness
>
> >
>
> >   v0 data5                         NB. Does not work on empty string,
> it's OK with me
>
> > |domain error: v0
>
> > |       v0 data5
>
> >
>
> >    soln (,:~ v0 L:0)&}:data                            NB.
> data=:data1;data2;data3;data4;data5
>
> >
>    NB. Same solution with α  instead of X
>
> >
> +-------------------+------------------+---------------------+----------------------+
>
> >
> |THEαEQUICKBROWFαFOX|THEαEQUICKBROWFOOX|TαTHEαEQUICKBROWFαFOX|TαTHEαEQUICKBROWFOOαOX|
>
> >
> +-------------------+------------------+---------------------+----------------------+
>
> >
> |THEXEQUICKBROWFXFOX|THEXEQUICKBROWFOOX|TXTHEXEQUICKBROWFXFOX|TXTHEXEQUICKBROWFOOXOX|
>
> >
> +-------------------+------------------+---------------------+----------------------+
>
> >
>
> >    v1 S:0 v0 L:0 }:data                   NB. All (but last) solutions
> are correct
>
> > 1 1 1 1
>
> >
>
> >
>
> > R.E. Boss
>
> >
>
> >
>
> > -----Original Message-----
>
> > From: Programming <programming-boun...@forums.jsoftware.com<mailto:
> programming-boun...@forums.jsoftware.com>> On Behalf
>
> > Of Ric Sherlock
>
> > Sent: vrijdag 5 februari 2021 02:35
>
> > To: Programming JForum <programm...@jsoftware.com<mailto:
> programm...@jsoftware.com>>
>
> > Subject: Re: [Jprogramming] Progressive insertion into a string
>
> >
>
> > Yes as Hauke has previously identified, we need some more test cases to
> fully test whether the spec is correctly implemented or not.
>
> > I'm thinking that the example outputs you've shown in your email aren't
> correct, but I agree that your approach and Raul's generate different
> solutions for that input and that your one (and Ben's and the current
> solution on Rosetta code) generate the "correct" output as I understand it.
> Here is an updated set of test cases:
>
> >
>
> > 'data1 soln1'=: 'THEEQUICKBROWFFOX';'THEXEQUICKBROWFXFOX'
>
> > 'data2 soln2'=: 'THEEQUICKBROWFOOX';'THEXEQUICKBROWFOOX'
>
> > 'data3 soln3'=: 'TTHEEQUICKBROWFFOX';'TXTHEXEQUICKBROWFXFOX'
>
> > 'data4 soln4'=: 'TTHEEQUICKBROWFOOOX';'TXTHEXEQUICKBROWFOOXOX'
>
> > 'data5 soln5'=: '';''
>
> >
>
> > showDigraphs=: dquote@(',' joinstring _2 <\ ])
>
> >
>
> > dd_bg=: {{ ((+ idx&<)#y) {. y ({. ,'X', }.)~ idx =. >:+: 1 i.~ (=/"1)
>
> > _2 ]\y }}^:_
>
> > dd_md=: dtb@:((] ({.~ , 'X' , }.~) 1 (1 + 2 * i.)~ _2 =/\ ]) {.~ >:@#)
>
> > ::($:@:,&' ')
>
> > digra=: * 2 | i.@#<mailto:i.@#> + +/\
>
> > dd_rm=: #!.'X'~ 1 j. [: digra # {. }. = }:
>
> > dd_pj=: ;@:(_2&(,`([,'X',])@.=/each@<\))^:_
>
> >
>
> > Raul's approach looks as though with some more refinement of how to
> calculate which sets of repeat letters need to be split, it should be
> possible. At the moment it produces the incorrect result for data4.
>
> >
>
> >    ([: showDigraphs dd_rm)&> data1;data2;data3;data4;data5
> "TH,EX,EQ,UI,CK,BR,OW,FX,FO,X"
>
> > "TH,EX,EQ,UI,CK,BR,OW,FO,OX"
>
> > "TX,TH,EX,EQ,UI,CK,BR,OW,FX,FO,X"
>
> > "TX,TH,EX,EQ,UI,CK,BR,OW,FO,OO,X"
>
> > ""
>
> > Iteratively applying Pascal's approaches do result in all digraphs being
> split, but some pairs of letters are split unnecessarily.
>
> >
>
> >
>
> > On Fri, Feb 5, 2021 at 5:04 AM 'Michael Day' via Programming <
> programm...@jsoftware.com<mailto:programm...@jsoftware.com>> wrote:
>
> >
>
> >> Just before I venture into updating to the correct beta d...
>
> >>
>
> >> Raul's is elegant, single-pass and pretty spare.  Here's a verbose,
>
> >> inelegant, multi-pass one,  but it seems to work,  except perhaps for
>
> >> the last example, below.
>
> >>
>
> >> I stuck with _2 which means that with odd length strings an error is
>
> >> thrown on the last pair which is actually not a pair,  so needs to be
> catered for.
>
> >>
>
> >> anyway,  (it should appear on one line):
>
> >>     dedouble =: dtb@:((] ({.~ , 'X' , }.~) 1 (1 + 2 * i.)~ _2 =/\ ])
>
> >> {.~
>
> >>  >:@#) ::($:@:,&' ')
>
> >>
>
> >> dtb is delete trailing blanks,  in strings,  I think.
>
> >>
>
> >>     dedouble^:_'THEEQUICKBROWFFOOX'
>
> >> THEXEQUICKBROWFXFOOX
>
> >>     dedouble^:_'THEEQUICKBROWFOOX'
>
> >> THEXEQUICKBROWFOOX
>
> >>
>
> >> This next example is a bit unlikely to occur,  but is this what's
> required?
>
> >>     dedouble 'THEEQUICKBROWFOOOX'
>
> >> THEXEQUICKBROWFOOOX
>
> >>
>
> >> Raul's version doesn't agree with mine here!  Is this result prederred?
>
> >>     rmdedouble 'THEEQUICKBROWFOOOX'
>
> >> THEXEQUICKBROWFOOOX
>
> >>
>
> >> Cheers,
>
> >>
>
> >> Mike
>
> >>
>
> >>
>
> >> On 04/02/2021 14:46, Raul Miller wrote:
>
> >>> Ah, I see it now -- I should have looked closer at your digraphs.
>
> >>>
>
> >>> Here's a fixed version:
>
> >>>
>
> >>> digra=: * 2 | i.@#<mailto:i.@#> + +/\
>
> >>> dedouble=: #!.'X'~ 1 j. [: digra #{.}.=}:
>
> >>>
>
> >>> (I could not think of a good name for the "compress out splits of
>
> >>> non-digraphs" mechanism.)
>
> >>>
>
> >>> The moral of the story here is that numeric calculations can often
>
> >>> replace simple recursive processes. (Because numbers can be defined
>
> >>> recursively.)
>
> >>>
>
> >>> I hope this helps,
>
> >>>
>
> >>
>
> >>
>
> >> --
>
> >> This email has been checked for viruses by Avast antivirus software.
>
> >> https://www.avast.com/antivirus
>
> >>
>
> >> ---------------------------------------------------------------------
>
> >> - 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
>
> >
>
>
>
> --
>
> ----------------------
>
> mail written using NEO
>
> neo-layout.org
>
>
>
> ----------------------------------------------------------------------
>
> 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