To modify acolumn:

97 98 99 (2})"0 1 i. 3 3

0 1 97

3 4 98

6 7 99


Henry Rich



On 12/23/2017 12:48 PM, Nick S wrote:
I have a 3d array that is the formatted output of a table. I capture
snapshots of it at different points in my processing, in a rank 3 array. I
want to flip between pages to see how the processing progresses.  I thought
I would clear the screen, then display the output, that being one of the
stacked sheets.  Can someone point me in the right direction?  I have
researched this for hours and just can't find the right manual or google.

Now, I manipulate this table column by column and row by row, Somewhere I
read that amend would update anything that from would fetch.  But I find
that to be wrong.

I was able to fetch a row of my table with

  buildline =: (<: | y){table


and a column with


buildline =: (y){"1 table


but


table =: bitvector (y)}"1 table


would not work.

I can update a row with

   table =: (accumand)(<: | y) } table


but the column is more difficult.  I came up with two approaches.  One way
was to transpose the table, update what was now a row, and then transpose
the result.


table =: |: (accumand) (y) } |:table


What I settled on was to build a boxed set of coordinates


table =: (accumand) (<(i.tsize);y) } table



it probably does not matter for my application, we are talking, at the
largest, 20x20 boolean arrays.  I am wondering if I need to throw around
more data.



(The above is the limit of my questions.)

(y can be a zero or positive scalar, indicating a column, or a scalar from
-tsize to _1 - (generated with }:i: tsize) which indicates a row.


For further information, the program solves one of those solitare games
where you have a series of numbers, and you get numbers for every row and
every column.  Suppose that the numbers for column 1 were 8,3,4, this
regular expression would have to match:




^0*1{8,8}0+1{3,3}0+1{4,4}0*$


Table size is fixed based on the puzzle, but can vary between 5 and 20.


Anyway, I did a lot of if. then. else. stuff because my first simple
version of the program took over 700 seconds to do one round of
calculations on a single row or column and the most rounds I have seen a
puzzle take is 17 iterations before it could place all the marks, and with
aggressive early pruning, I was able to get about 2 orders of magnitude
improvement.   I process 400 rows+columns in under 2 seconds.  If you have
a line where the numbers are, say, 1 1 1 1 1 1, it would generate thousands
of potential solutions, which would result in naught if there were no other
constraints - so I prune those cases - I don't process those lines until I
detect a constraint on that line because without a constraint I will not
learn anything.


On a personal note, I find that I can get obsessed with solitare games to
the exclusion of everything else I want to do.  It helps to break the
obsession if I write a solver.






---
This email has been checked for viruses by AVG.
http://www.avg.com
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to