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 <[email protected]>:
> # '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 <[email protected]>
>
>> 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 <[email protected]>:
>> > 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 <[email protected]>
>> >
>> >> 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 <[email protected]>
>> >> 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 <[email protected]>
>> >> 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
>> >> >> <[email protected]> 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