Ouch, I made the same mistake, but even worse.
This time I actually care about a possible
doublette at the very start.
And the code looks a little bit less messy this way.

But I’m done playing with this.
I think Ben’s version is okay.
Getting it done without looping may be interesting,
but I don’t want to further tidy this mess.

parity =: + #\

X =: 3 : 0
q =. 'X's'?' y
N =. i.@# q
where =. N >:@e. 0 -.~ (* 2| parity)@i@(2&(=/@|:@]\)) q
withX =. q (parity@(2 I.@:=]) ((i.@#@] e. [) {"0 1 'X',.~]) #~) where
'?'s'X' withX
)

res1 -: X data1
res2 -: X data2



Am 04.02.21 um 08:55 schrieb Hauke Rehr:
> I wanted to do it without looping.
> But my solution was incorrect.
> The error just didn’t show with
> the examples given.
> Maybe I’ll find a better way.
> Or at least refactor it a bit.
> 
> For now, this is at least correct:
> 
> i =: 0 -.~ (* i.@#)
> 
> s =: 2 : 0
> a =. i m=y
> n a} y
> )
> 
> NB. ugly, repetitive junk solution
> res1 -: '?'s'X' (] ((+ #\)@(2 I.@:=]) ((i.@#@] e. [) {"0 1 'X',.~]) #~)
> (i.@# >:@e. 0 -.~ (* 2 }.@:-.@:| 0 , (+ i.@#))@i@(2&(=/@|:@]\))))
> 'X's'?' data1
> res2 -: '?'s'X' (] ((+ #\)@(2 I.@:=]) ((i.@#@] e. [) {"0 1 'X',.~]) #~)
> (i.@# >:@e. 0 -.~ (* 2 }.@:-.@:| 0 , (+ i.@#))@i@(2&(=/@|:@]\))))
> 'X's'?' data2
> 
> 
> Am 04.02.21 um 08:48 schrieb Ben Gorte:
>> Think I've got it:
>>
>> data1 =: 'THEEQUICKBROWFFOX'
>>
>> data2 =: 'THEEQUICKBROWFOOX'
>>
>> {{ ((+where&<)#y) {. ({.&y ,'X', }.&y) where =. >: +: 1 i.~ _2 =/\
>> y,'XX',(2|#y){.'X' }}^:_ data1
>>
>> THEXEQUICKBROWFXFOX
>>
>> {{ ((+where&<)#y) {. ({.&y ,'X', }.&y) where =. >: +: 1 i.~ _2 =/\
>> y,'XX',(2|#y){.'X' }}^:_ data2
>>
>> THEXEQUICKBROWFOOX
>>
>>
>> Ben
>>
>> On Thu, 4 Feb 2021 at 17:02, Hauke Rehr <hauke.r...@uni-jena.de> wrote:
>>
>>> I show this only as a different way to deal with it.
>>> There’s much space for improvement.
>>> It works correctly with the two examples you gave.
>>>
>>> data1 =: 'THEEQUICKBROWFFOX'
>>> data2 =: 'THEEQUICKBROWFOOX'
>>> res1  =: 'THEXEQUICKBROWFXFOX'
>>> res2  =: 'THEXEQUICKBROWFOOX'
>>>
>>> s =: 2 : 0
>>> a =. 0 -.~ (* i.@#) m=y
>>> n a} y
>>> )
>>>
>>> NB. ugly, repetitive junk solution
>>> res1 = ('?'s'X') (] (>:@(+ i.@#)@(2 I.@:=]) (([e.~i.@#@]){"0 1'X',.~])
>>> #~) (i.@# >:@e. (* -.@(- (0 1 $~ $))@(2&|))@(-.&0@(*
>>> i.@#))@(2&(=/@|:@]\)))) ('X's'?') data1
>>> res2 = ('?'s'X') (] (>:@(+ i.@#)@(2 I.@:=]) (([e.~i.@#@]){"0 1'X',.~])
>>> #~) (i.@# >:@e. (* -.@(- (0 1 $~ $))@(2&|))@(-.&0@(*
>>> i.@#))@(2&(=/@|:@]\)))) ('X's'?') data2
>>>
>>>
>>> Am 04.02.21 um 05:02 schrieb Ric Sherlock:
>>>> I need to separate any digraphs in a string, that consist of 2 letters
>>> the
>>>> same, by inserting an 'X' between them.
>>>>    _2 ]\ 'THEEQUICKBROWFFOX'
>>>> TH
>>>> EE
>>>> QU
>>>> IC
>>>> KB
>>>> RO
>>>> WF
>>>> FO
>>>> X
>>>>
>>>> 'EE' is a digraph that needs an 'X' inserted. Doing so will result in:
>>>>
>>>> TH
>>>> EX
>>>> EQ
>>>> UI
>>>> CK
>>>> BR
>>>> OW
>>>> FF
>>>> OX
>>>>
>>>> So now we also need to separate the 'FF' digraph.
>>>>
>>>> I want to define a verb "dedouble" that will process a string so:
>>>>    dedouble 'THEEQUICKBROWFFOX'
>>>> THEXEQUICKBROWFXFOX
>>>> But:
>>>>    dedouble 'THEEQUICKBROWFOOX'
>>>> THEXEQUICKBROWFOOX
>>>>
>>>> I have implemented a solution at
>>>> https://rosettacode.org/wiki/Playfair_cipher#J but am interested in
>>>> alternative implementations.
>>>> ----------------------------------------------------------------------
>>>> 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
>>
> 

-- 
----------------------
mail written using NEO
neo-layout.org

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to