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