To find the splitting point in the file, I used: split=. 2+I. LF2 E. y
To handle the moves, converted the part after the split to a rank 2 array of characters (one row per line), defined to=: , from=: , And used: ".parse sample and ".parse input This means that I had a (slightly) different 'move' verb for part 2 from what I had for part 1. FYI, -- Raul On Mon, Dec 5, 2022 at 10:59 AM Jaume <greenni...@gmail.com> wrote: > > Hello again. > > I managed to solve day 3 and 4, so maybe when I clean up my solutions I > will ask to review them. But right now I have a problem and some questions > on the first part of day 5. > > Main things I need in bold, mainly the last one. Feel free to code review > this message as much or as little as you want to. > > I can read and parse both the stacks and the instructions without problem, > but I have to manually choose where to separate them. > > ]p=:1!:1<'/home/deck/projects/adventofcode/2022/d05t1.input' > > [D] > > [N] [C] > > [Z] [M] [P] > > 1 2 3 > > > move 1 from 2 to 1 > > move 3 from 1 to 3 > > move 2 from 2 to 1 > > move 1 from 1 to 2 > > > ]lines=.|:>4{.cutopen p > > [[ > > NZ1 > > ]] > > [[[ > > DCM2 > > ]]] > > [ > > P3 > > ] > > ]textstacks=:(4,:1)<;.3 }.lines > > ┌────┬────┬────┐ > > │ NZ1│DCM2│ P3│ > > └────┴────┴────┘ > > ]wo=:}:each dltb each ,each textstacks > > ┌──┬───┬─┐ > > │NZ│DCM│P│ > > └──┴───┴─┘ > > ]pc=.cutopen toJ p > > ┌───────────┬───────────┬───────────┬───────────┬──────────────────┬──────────────────┬──────────────────┬──────────────────┐ > > │ [D] │[N] [C] │[Z] [M] [P]│ 1 2 3 │move 1 from 2 to 1│move 3 from 1 to > 3│move 2 from 2 to 1│move 1 from 1 to 2│ > > └───────────┴───────────┴───────────┴───────────┴──────────────────┴──────────────────┴──────────────────┴──────────────────┘ > > ins=: [: ". 'movefrt' -.~ ] > > ]moves =: ins each 4}. pc > > ┌─────┬─────┬─────┬─────┐ > > │1 2 1│3 1 3│2 2 1│1 1 2│ > > └─────┴─────┴─────┴─────┘ > > So I can separate the data, but I don't know how to find the line where to > separate them. I tried some things but to no avail. Some variations like > this one. > > 'm' i.&1@: sta pc > 1 > > > *So finding the first box that starts with 'm', or the first that is only > numbers would help. How could I find this kind of things?* > > Now onto the hard part, how to iterate through the whole array of moves. > > I can process the moves like this: > move=: 4 : 0 > > from=:(1{y)-1 > > to=:(2{y)-1 > > times=:0{y > > m2=:x > > for. i.times do. > > m1=:(<(({.>from{m2),>to{m2))to}m2 > > m2=:(<}.>from{m1)from}m1 > > end. > > m2 > > ) > > wo move 1 1 2 > > ┌─┬────┬─┐ > > │Z│NDCM│P│ > > └─┴────┴─┘ > > wo move 1 2 1 > > ┌───┬──┬─┐ > > │DNZ│CM│P│ > > └───┴──┴─┘ > > From here *I would like to change the for. but I don't trust myself to do > it well using the power conjunction*. And it brings me up to the last part > that I have problems with, applying this to the whole array of moves. > > I tried the \. \ /\. and /\ constructs, but none have worked for me. > > 1 (ww&move@>)\moves > ┌────┬────┬────┐ > │DNZ │CM │P │ > └────┴────┴────┘ > > ┌────┬────┬────┐ > │ │DCM │ ZNP│ > └────┴────┴────┘ > > ┌────┬────┬────┐ > │CDNZ│M │P │ > └────┴────┴────┘ > > ┌────┬────┬────┐ > │Z │NDCM│P │ > └────┴────┴────┘ > > 1 (ww&move@>)/\moves > ┌─────┬─────┬─────┬─────┐ > │1 2 1│3 1 3│2 2 1│1 1 2│ > └─────┴─────┴─────┴─────┘ > > And some more variations. *How do I execute the same function, with one > parameter being the result from the previous computation (except on the 1st > step)?* > > Thanks in advance. > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm