I like your data_list_hash function. It makes your agenda nice and neat
compared to my agenda and power
On Dec 12, 2015 5:34 PM, "David Lambert" <[email protected]> wrote:
> read=: 1!:1@<
> require'~addons/convert/json/json.ijs'
> A=:dec_json read'/tmp/a'
>
>
> NB. intermediate step to visualize the structure
> NB. (in emacs M-x toggle-truncate-lines)
> NB. python pprint.pprint(dictionary) is also a great way to view the
> structure
> NB. sort of the transpose of the j display.
>
> boxdraw_j_ 1
> (,LF,.~":A)1!:2<'/tmp/z'
>
>
> to_num=: (+ _&<) ::0: NB. to_num returns y for numeric y else 0
>
> NB. solution: +/ to_num S:0 A
>
>
> rank=:#@:$
> data_list_hash =: rank * *@:L. NB. return 0 1 or 2 respectively
> assert 0 0 1 2 -: data_list_hash&> 3 ; 'abc' ; (;/i.3) ; <2 1$a:
>
> Note 'agenda for data, list, and hash.'
> data: return numeric value (or 0) to_num
> list: sum of recursion on each item ([: +/ $:&>)
> hash: 0 iff 'red', else treat tail as list.
> hash: My version works too hard, Boolean multiply rather than "if"
> hash: (((<'red')&(-.@:e.) * $:)@:{:)
> )
>
> f=:to_num`([:+/$:&>)`(((<'red')&(-.@:e.)*$:)@:{:)@.data_list_hash
>
> NB. solution: f A
>
>
>
> NB. another part 1 solution, yet another state table
> NB. sequential machine to extract numbers, ignore structure
> mp=: +/ .*
>
> MAP =: (>:@i.@# mp a.&e.&>)(Num_j_;'-')
>
> STATE =: +. "."1 }. ];._2 noun define
> separator digit - NB. character class
> [0] 0j0 2j1 1j1 NB. between numbers
> [1] 0j1 2j0 1j1 NB. negative number
> [2] 0j3 2j0 1j1 NB. remainder of number
> )
>
> +/".&>(0;STATE;MAP);:read'/tmp/a'
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm