So far these were simple tasks with clear algorithms, so it's interesting to play with the programs -- keep everything in verbs and be as lazy as possible (i.e. build one final function, that just gives the solution of the task being given the data; especially funny if the functions are tacit), or calculate whatever is possible as soon as possible.
NB. happy dinner http://adventofcode.com/day/13 m=: ' '&cut & > cutLF ('.',CR) -.~ fread {:ARGV NB. matrix of input u=: ~. {."1 m NB. noun: unique names = all the ppl s=: _1 1{~'gain'-: >@:(2&{) NB. _1 for 'lose', 1 for 'gain' n=: ". @ > @ (3&{) NB. numeric value g=: 4 : 'v=.0$~2##x for_e. y do. v=. ((s*n)e) (< x i. 0 10{e) }v end. v' NB. calc matrix v=: u g m NB. noun: 'happiness' matrix; all data are parsed now h=: {&v @ < @ , NB. get 'happiness' for x -> y r=: 2 h/\ ] NB. one way relations betrween ppl in one combination w=: +/@r + +/@r@|. NB. total happiness of one combination p=: ([ , {.)"1@(i.@! A. i.) NB. all permutation with first column appended on the right echo >./ w"1 p #u h=: ({&v @ < @ ,) :: 0: NB. all missing 'happiness' values will be 0 echo >./ w"1 p >:#u NB. repeat calculation for one more (virtual) person exit 0 On Sun, Dec 13, 2015 at 5:07 PM, 'Pascal Jasmin' via Programming < [email protected]> wrote: > with input on clipboard, > > version that works with both parts by returning 0 for index errors. t is > the lookup table that is maybe a tad sloppy. > > > in =. '.' -.~leaf(0 2 3 _1 { ])@;:@}:"1 a =. > cutLF wdclippaste '' > uni =. (~. {."1 in) , <'Me' > t =. (( (,~ -)@".@(2&{::) ({~ >@('gain' -: leaf ])) 1 { ]) ; 0 3&{) "1 in > calc =. (({."1 t) {~ (}."1 t) I.@:(-:"1) ]) :: 0: > calcr =. (({."1 t) {~ (}."1 t) I.@:(-:"1) |.) :: 0: > perm =: i.@! A. i. > > > parts 1 and 2, > > >./ +/@:;@(,/)@((2 (calc , calcr)\ ]))@( uni {~ ] , {.)"1 ] perm 8 > >./ +/@:;@(,/)@((2 (calc , calcr)\ ]))@( uni {~ ] , {.)"1 ] perm 9 > > > > ----- Original Message ----- > From: Joe Bogner <[email protected]> > To: [email protected] > Sent: Sunday, December 13, 2015 9:47 AM > Subject: [Jprogramming] advent 13 > > not pretty, but here is my solution > > pt2 was kind of hacky instead of rewriting the train to calculate, I > just reworked the input to add myself to it > > input =: fread 'c:/joe/lang-lab/j/advent2015/day13.txt' > parsed=: ' ' cut each cutLF input > > who =: {. every > sitBy =: ([: }: each {: every) > getScore=: [: (] -@]^:((<'lose') e. 0&{@[) ".@>@(1&{))"1 @: ((2,3)&{) > each ] > getChoices=: ([: (] A.~ i.@!@#) [: ~. who) > > getMax=: [: (>./)&:(+/"1) (>@getScore@] {~ (who,.sitBy) i. > (],|."1@])@((2]\ ])"1)@([: ({:,])"1 getChoices)) > > smoutput pt1=:getMax parsed > > addMe=: ((((;: 'would gain 0 happiness units sitting next to Me.') > (];[) ]) each) @ (~.&:who)) > addThem=: ((((;: 'Me would gain 0 happiness units sitting next to') > ([,<@]) ('.',~])) each) @ (~.&:who)) > > smoutput pt2=: getMax (] , (addMe,addThem)) parsed > > sample=: 0 : 0 > Alice would gain 54 happiness units by sitting next to Bob. > Alice would lose 79 happiness units by sitting next to Carol. > Alice would lose 2 happiness units by sitting next to David. > Bob would gain 83 happiness units by sitting next to Alice. > Bob would lose 7 happiness units by sitting next to Carol. > Bob would lose 63 happiness units by sitting next to David. > Carol would lose 62 happiness units by sitting next to Alice. > Carol would gain 60 happiness units by sitting next to Bob. > Carol would gain 55 happiness units by sitting next to David. > David would gain 46 happiness units by sitting next to Alice. > David would lose 7 happiness units by sitting next to Bob. > David would gain 41 happiness units by sitting next to Carol. > ) > ---------------------------------------------------------------------- > 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
