That is how it is supposed to work.

You might have intended to do this:

rottN=: 2 :0
 D=. m (|. ; 3 u: ])&.> boxopen n
 {&(; (0{::[)`(1{::[)`]}&.>/ D,<u:i.2^16)@(3&u:)
)
LC=: 7 u: 'aábcðdeéfghiíjklmnoópqrstuúvwxyýzþæö'
UC=: 7 u: 'AÁBCÐDEÉFGHIÍJKLMNOÓPQRSTUÚVWXYÝZÞÆÖ'

   13 rottN (LC;UC) 7 u: 'prófaþetta með íslenzkum stöfunum æÆöðÐþÞ'
þözqjhóááj xón uawóygvbx aáíqbybx iIínNhH

... but, you might have intended this:

lc=: e.&LC
uc=: e.&UC

   13 rottN ((#L:0~ lc;uc) u:i.2^16) 7 u: 'prófaþetta með íslenzkum
stöfunum æÆöðÐþÞ'
éðisnmröön zrh góyrácxúz óöjsúáúz eEjhHmM

Meanwhile, character literals are not filters and they get upset when
you treat them like filters.

Thanks,

-- 
Raul

2011/12/23 Björn Helgason <gos...@gmail.com>:
>   # 'aábcðdeéfghiíjklmnoópqrstuúvwxyýzþæö'
> 46
>   # 'AÁBCÐDEÉFGHIÍJKLMNOÓPQRSTUÚVWXYÝZÞÆÖ'
> 46
>   lc=.'aábcðdeéfghiíjklmnoópqrstuúvwxyýzþæö'
>   uc=.'AÁBCÐDEÉFGHIÍJKLMNOÓPQRSTUÚVWXYÝZÞÆÖ'
>   13 rottN ((#L:0~ lc;uc) u:i.2^16) 'prófaþetta með íslenzkum stöfunum 
> æÆöðÐþÞ'
> |domain error
> |   13 rottN((    #L:0~lc;uc)u:i.2^16)'prófaþetta með íslenzkum
> stöfunum æÆöðÐþÞ'
>
>
> 2011/12/23 Raul Miller <rauldmil...@gmail.com>
>
>> True.
>>
>> The underlying problem is that the algorithm itself is language specific.
>>
>> I do not know how to implement a consistent version of this mechanism
>> for German, for example.  The problem with German is that ß does not
>> have an "upper case" variant.  So rotation of lower case letters in
>> german would have to be different from rotation for upper case letter.
>>  Perhaps that's acceptable?
>>
>> If it makes sense to apply the same rotation to cycles of differing
>> lengths, here's  a version which works for the arbitrary cases
>> involving unicode characters which J can handle.
>>
>> NB. n: boxed character sequences to be rotated (must not overlap)
>> NB. m: how much to rotate them
>>
>> rottN=: 2 :0
>>  D=. m (|. ; 3 u: ])&.> boxopen n
>>  {&(; (0{::[)`(1{::[)`]}&.>/ D,<u:i.2^16)@(3&u:)
>> )
>>
>>   5 rottN '0123456789' '123'
>> 678
>>
>>   ;/a.{~65 97+/i.26
>> +--------------------------+--------------------------+
>> |ABCDEFGHIJKLMNOPQRSTUVWXYZ|abcdefghijklmnopqrstuvwxyz|
>> +--------------------------+--------------------------+
>>   13 rottN (;/a.{~65 97+/i.26) 'testing'
>> grfgvat
>>   13 rottN (;/a.{~65 97+/i.26)^:2 'testing'
>> testing
>>
>> Or, using character selectors instead of character sequences (and
>> living with unicode character ordering):
>>
>>  13 rottN ((#L:0~ lc;uc) u:i.2^16) 'prófaþetta með íslenzkum stöfunum
>> æÆöðÐþÞ'
>>
>> But it's up to you to define lc and uc
>>
>> FYI,
>>
>> --
>> Raul
>>
>>
>> 2011/12/23 Björn Helgason <gos...@gmail.com>:
>> > This is only english
>> >
>> >   _1 rottn 1 rottn 'testing'
>> > testing
>> >
>> > Does not work with my alpha
>> >
>> >   _1 rottn 1 rottn 'prófaþetta með íslenzkum stöfunum æÆöðÐþÞ'
>> > prófaþetta með íslenzkum stöfunum æÆöðà þÞ
>> >   3 u: 'prófaþetta með íslenzkum stöfunum æÆöðÐþÞ'
>> > 112 114 195 179 102 97 195 190 101 116 116 97 32 109 101 195 176 32
>> > 195 173 115 108 101 110 122 107 117 109 32 115 116 195 182 102 117 110
>> > 117 109 32 195 166 195 134 195 182 195 176 195 144 195 190 195 158
>> >
>> >   3 u:   7 u: 'prófaþetta með íslenzkum stöfunum æÆöðÐþÞ'
>> > 112 114 243 102 97 254 101 116 116 97 32 109 101 240 32 237 115 108
>> > 101 110 122 107 117 109 32 115 116 246 102 117 110 117 109 32 230 198
>> > 246 240 208 254 222
>> >   #   3 u: 'prófaþetta með íslenzkum stöfunum æÆöðÐþÞ'
>> > 53
>> >   # 3 u:   7 u: 'prófaþetta með íslenzkum stöfunum æÆöðÐþÞ'
>> > 41
>> >   8 u: 4 u: 3 u:   7 u: 'prófaþetta með íslenzkum stöfunum æÆöðÐþÞ'
>> > prófaþetta með íslenzkum stöfunum æÆöðÐþÞ
>> >
>> >   # 3 u:   7 u: 'aábcðdeéfghiíjklmnoópqrstuúvwxyýzþæö'
>> > 36
>> >   # 3 u:   7 u: 'AÁBCÐDEÉFGHIÍJKLMNOÓPQRSTUÚVWXYÝZÞÆÖ'
>> > 36
>> >
>> >
>> >
>> > 2011/12/23 Raul Miller <rauldmil...@gmail.com>
>> >
>> >> Here's another variation:
>> >>
>> >> rotn=: 1 :'{&((65 97 +/~ i.26) m&|.@[`[`]} i.256)&.(a.&i.)'
>> >>
>> >>   1 rotn 'testing'
>> >> uftujoh
>> >>   13 rotn 'testing'
>> >> grfgvat
>> >>   13 rotn 13 rotn 'testing'
>> >> testing
>> >>   _1 rotn 1 rotn 'testing'
>> >> testing
>> >>
>> >> In this expression, each arbitrary constant is used only once:
>> >>
>> >> 26:  letters in the alphabet
>> >> 65:  'A'
>> >> 97:  'a'
>> >> 256: the number of character codes
>> >>
>> >> I could replace 256 with #a. but I do not think that adds any clarity.
>> >>
>> >> That said...
>> >>  rottn=: 1 :'{&((65 97 +/~ i.26) m&|.@u:@[`[`]} a.)&(3&u:)'
>> >>
>> >> --
>> >> Raul
>> >> On Fri, Dec 23, 2011 at 11:27 AM, Raul Miller <rauldmil...@gmail.com>
>> >> wrote:
>> >> > Wait, bad idea... that rot13 only works because 13 is a factor of 26.
>> >> >
>> >> > Instead (and this is a fast bug fix, I have not thought much about
>> >> > more elegant forms, though several paths for rephrasing come to mind):
>> >> >
>> >> > rotN=: 1 :'{&((65 97 +/ m |. i.26) ((65 97 +/i.26)}) i.256)&.(a.&i.)'
>> >> >
>> >> > --
>> >> > Raul
>> >> >
>> >> > On Fri, Dec 23, 2011 at 11:21 AM, Raul Miller <rauldmil...@gmail.com>
>> >> wrote:
>> >> >> Here's what I use for rot13:
>> >> >>
>> >> >> rot13=: {&((65 97+/~i.2 13) |.@[} i.256)&.(a.&i.)
>> >> >>
>> >> >> If I wanted to generalize that, I would probably go with:
>> >> >>
>> >> >> rotN=: 1 :'rot13=: {&((65 97+/~i.2,m) |.@[} i.256)&.(a.&i.)'
>> >> >>
>> >> >>   13 rotN 'testing'
>> >> >> grfgvat
>> >> >>   13 rotN rot13 'testing'
>> >> >> testing
>> >> >>
>> >> >> --
>> >> >> Raul
>> >> >>
>> >> >> On Fri, Dec 23, 2011 at 11:00 AM, Lorenzo Costanzia di Costigliole
>> >> >> <lorenzo.costan...@gmail.com> wrote:
>> >> >>> NB. What is the most elegant way to rotate uppercase
>> >> >>> NB. and lowercase letters by n? ("rotation cipher")
>> >> >>>
>> >> >>> c2n=: a.&i.
>> >> >>>
>> >> >>> lc=: >&96 *. <&123
>> >> >>> uc=: >&64 *. <& 91
>> >> >>>
>> >> >>> s=: 'Btggn Rwgxhibph 2011 id iwt Y-Egdvgpbbxcv bpxaxcv axhi!'
>> >> >>>
>> >> >>>
>> >> >>>
>> >> >>> NB. I came up with those, but I think there’s still room for
>> >> improvement
>> >> >>> NB. (Isn't there something in the J-Phrases?)
>> >> >>>
>> >> >>> NB. uppercase -> 2, lowercase -> 1, else -> 0
>> >> >>> cl=: +:@uc + lc
>> >> >>> cl`(] , ([: 26&| +&n)&.(-&97) ,: ([: 26&| +&n)&.(-&65))}&.c2n s
>> >> >>>
>> >> >>> ((] + ] ]`([: 26&| n + ])@.((0~:[)"0) [ - ]) (97&*@lc +
>> 65&*@uc))&.c2n
>> >> s
>> >> >>>
>> >> >>> NB. Enumerate all possibilities
>> >> >>> |: ((] + ] (26 # ])`([: 26&| (i.26) + ])@.((0 ~: [)"0) [ - ])
>> (97&*@lc
>> >> >>> + 65&*@uc))&.c2n s
>> >> >>>
>> >> >>> NB. Thanks!
>> >> >>>
>> ----------------------------------------------------------------------
>> >> >>> 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
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to