Well... That's actually a pretty big flaw in my implementation -- once there's a letter pair which is not in a digraph, my rewrite completely fails.
It's certainly fixable, but with significant added complexity. For example, this almost works: lookup=: {&((8#2),8$0 3) digrap=: # {. {. , 2|[:]F:.(lookup@(+4*])) (+ 2 * 2 | +/\) dedouble=: #!.'X'~ 1 j. [: digrap #{.}.=}: To make it actually work, I need to work around an error thrown from F:. which I do not understand: digrap=: #{.{.,2|[:]F:.(lookup@(+4*])) ::0: (+2*2|+/\) This can probably be simplified... Thanks, -- Raul On Thu, Feb 4, 2021 at 8:35 PM Ric Sherlock <tikk...@gmail.com> wrote: > > 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.@# + +/\ > 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> 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.@# + +/\ > > > 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