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|#@]))/&.|. y'

and now you see it’s actually

v2a=:4 : '(,`([,x,])@.((={.)*.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|#@]))/&.|. 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> On Behalf Of 
> R.E. Boss
> Sent: vrijdag 5 februari 2021 10:33
> To: programm...@jsoftware.com
> Subject: Re: [Jprogramming] Progressive insertion into a string
> 
>    v0=:((,`([,X,])@.(={.))`,@.(0=2|#@]))/&.|.                 NB. My solution
>    v1=:3 : '(([:*./ ~:/"1)-: ([:I.2=/\{.)-:X I.@:={:)|: _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> On Behalf Of Ric 
> Sherlock
> Sent: vrijdag 5 februari 2021 02:35
> To: Programming JForum <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.@# + +/\
> 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
> ----------------------------------------------------------------------
> 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

Reply via email to