Better handling for empty string (also from JforC Programmers) would be: ifany=: {{ u^:(*@#@]) }} dedouble=: splitDigraph/&.|. ifany
On Sat, Feb 6, 2021 at 3:45 PM Ric Sherlock <tikk...@gmail.com> wrote: > 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