Thanks. That's the kind of thing I was looking for.
In the phrase e {~ a. i. ] a faster computation is possible
(factor of about 4) if it is known that e-: a.{~ c (d b.) i.256 .
But the detection of this last fact should not take more time
than the gain in speed resulting from exploiting the fact.
----- Original Message -----
From: Fred Bone <[EMAIL PROTECTED]>
Date: Wednesday, September 26, 2007 3:04
Subject: Re: Decoding (was: Re: [Jprogramming] ASCII bytes to string)
To: Programming forum <[email protected]>
> On 24 Sep 2007 at 21:06, Roger Hui said:
>
> > Suppose
> >
> > c=: ?256
> > d=: 16+?16
> > e=: a.{~ c (d b.) i.256
> > NB. e is used as: map=: e {~ a. i. ]
> >
> > Can you recover c and d given e? c and d are not
> > necessarily unique so it suffices to compute c1 and d1
> > such that e -: a.{~ c1 (d1 b.) i.256 .
>
> Using "c,d" to denote the original values and "C,D" to denote
> possible
> outputs from a "decode" function,
>
> If (d e. 16 19 28 31) then (#~.e = 1). A suitable (D,C) is then
> (19,
> a.i.{.e).
>
> If (d e. 21 22 25 26) then (#~.e = 256) (and e will be either a.
> or
> |.a.). A suitable (D,C) is (22, a.i.{.e).
>
> If (c e. 0 255), #~.e is again either 1 or 256 and the same
> solutions
> apply.
>
> Other values of d fall into pairs such that, in each pair, a
> given c with
> one d produces the same e as the bit-complement of that c with
> the other
> d. These pairs are (17,20),(18,24),(23,29) and (27,30).
> Examination of
> the bit patterns of these numbers will reveal the reason.
>
> Furthermore, c and d may be deduced from (({.,{:)e). One of
> these will be
> equal to (c{a.) (or to its bit-complement) and the other to
> either (0{a.)
> or (255{a.). The value of (0 255 i. a.i. ({.,{:)e) maps onto
> suitable d
> values as follows:
> 0 2 -> 17
> 2 0 -> 18
> 2 1 -> 23
> 1 2 -> 27
>
> Putting these together:
> ----
> decode =: 3 : 0
> NB. returns (d,c)
> select. # ~. y
> NB. (d e. 16 19 28 31): all items of e identical
> case. 1 do. 19, a. i. {.y
> NB. (d e. 21 22 25 26): all different
> case. 256 do. 22, a. i. {.y
> NB. (c e. 0 255) covered by one of the above
> NB. remaining cases
> case. do. cc =. a.i.({.,{:)y NB. candidates for c
> c =. cc -. 0 255
> NB. ghastly kludge coming up ...
> signature =. 0 255 i. cc
> d =. (3 #. signature) { _ _ 17 _ _ 27 18 23
> d,c
> end.
> )
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm