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

Reply via email to