An example using /:@/: (rank), basically from Fractals, Visualization and J 4th ed. section 5.6
load '~addons/graphics/fvj4/raster.ijs' load '~addons/graphics/fvj4/povkit.ijs' cile $@] $ ((/:@/:@] <.@:* (% #)) ,) cile uses /:@/: replace a plus table with 5 levels: 5 cile +/~i.10 0 0 0 0 0 0 1 1 1 2 0 0 0 0 0 1 1 1 2 2 0 0 0 0 1 1 1 2 2 3 0 0 0 1 1 1 2 2 3 3 0 0 1 1 2 2 2 3 3 3 1 1 1 2 2 2 3 3 4 4 1 1 2 2 3 3 3 4 4 4 1 2 2 3 3 3 4 4 4 4 2 2 3 3 3 4 4 4 4 4 2 3 3 3 4 4 4 4 4 4 a small plasma cloud with 3 levels: 3 cile 0.6 plasma 3 2 1 1 0 1 1 1 1 2 1 1 0 1 1 0 1 2 2 1 1 2 0 0 0 0 0 1 1 2 2 1 0 0 0 0 0 2 1 1 2 2 1 1 0 0 1 2 2 2 2 1 1 0 0 2 2 2 1 2 0 1 0 0 2 2 2 2 0 1 2 0 0 2 2 2 2 1 0 0 0 0 5{.P256 255 0 0 255 5 0 255 10 0 255 15 0 255 20 0 P256 is a palette of 256 fully saturated colors View a plasma cloud (256 levels) with hurst exponent 0.6: view_image P256; 256 cile 0.6 plasma 9 Funny story: I wrote cile during a power outage (took about an hour). I wrote it on a scrap of paper that was used as a coffee coaster by a colleague and that stained it. I was stunned when power returned and cile did what I wanted and my colleague didn't share my amazement at the scrap of paper. Best: Cliff On Sun, Jan 8, 2023 at 10:56 PM Omar Antolín Camarena <o...@matem.unam.mx> wrote: > Let me start by saying I loved your interview on the Array Cast! > > One example of /: I coincidentally noticed today is the following > definition of lexicographic order for strings: > > lex_le =: 0 1 -: /:@(,&<) > > I was about to program it in a much more complicated way when I suddenly > remembered J aready knows how to sort everything if you just box it! Note > that its correctness in the case of equality depends on /: being a stable > sort. (Note also that it defines a total order on all nouns, of any rank > and data type, not just strings; J's "secret" total order on all nouns!) > > Another neat thing about grade up is that ({ /:) is a special combination: > x ({ /:) y gives you the x-th smallest item of y without fully sorting y. > The description in NuVoc stops short of saying that it uses the Quickselect > [1] algorithm with a random pivot, but it sure makes it sound like it does. > It seems to be limited to y that are 1-dimensional with numeric entries, > sadly (or maybe I'm misunderstanding the phrase "y is an integer or > floating-point list"). > > A third, somewhat tongue-in-cheek answer is that you can regard the dyadic > sort up case, namely x /: y, as just shorthand for (/: y) { x, so really > any example of grade up should count as a examples of using grade up (/:) > and indexing ({). > > A fourth, perhaps less essential example, that I've come across is while > using inverted tables: I sometimes need to sort several sets of columns by > one of the columns. Say I have one table of student grades with columns for > student_number, name, homework1, homework2, exam1 and exam2 (each column a > separate J variable, which I find is the most convenient way of working > with tabular data) and I want tables in order of student_number (because > that's the order the system where I enter the grades wants) of homeworks > and exams separately. I could of course do: > > homework =: (name ,. <"0 homework1,. homework2) /: student_number > exam =: (name ,. <"0 exam1,. exam2) /: student_number > > which sorts student_number twice but I sometimes just keep a few orders > around, to look at data various ways: > > by_student_number =: /: student_number > by_exam_total =: \: exam1 + exam2 > ... > homework =: by_student_number { name ,. <"0 homework1,. homework2 > exam =: by_student_number { name ,. <"0 exam1,. exam2 > > -- > Omar > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm