My version for day 8:
NB. read input
i =. a: -.~ <;._2 wd 'clippaste'
NB. Count number of excess characters for each line: one per unescaped
\, + 2 more if \x,
NB. + 2 for enclosing "
+/ ('\x'&E. (2 + (2 * +/@:*.) + +/@]) >/\.&.|.@('\'&=))@> i
NB. Count number of characters needed to encode: one per " or \, plus 2
for encllseing "
+/ (2 + +/@(e.&'"\'))@> i
Henry Rich
On 12/9/2015 5:21 PM, Joe Bogner wrote:
Here's my day 8 - again, abusing my byte code interpreter -- which
seems like a good fit because it can peek ahead in the stream
part 1 approach: generate COUNT instruction for each character. Skip
over characters if they are escaped
Only around 10 lines of new code written to support it - hooray for
reuse of fixed tacit code
https://gist.github.com/joebo/ac24022f7c20dbf745d4
Much shorter this time:
answer1=: (([: +/ (# every)) - (+/ @: ((getVAL @ run @ compile 0&{)
every (,:@}.@}:) each))) f.
smoutput ;"1 ,. _50<\ lr 'answer1'
([: +/ #&>) - +/@:(((2 {:: ])@((>:@:(1 {:: ]) (<@:
[ 1} ]) ])@:(((1 {:: ]) { 0 {:: ]) (>:@:(1 {:: ])
(<@:[ 1} ]) ])^:(0:`(1:`1:`3:@.(92 34 120 i. 1&{@(
(1 + 1 {:: ]) { 0 {:: ])))@.(92 = 1&{@((0 + 1 {::
]) { 0 {:: ])))@:(>:@(2 {:: ])&] (<@:[ 2} ]) ])`((
1:`1:`0:@.(92 34 i. 1&{@((0 + 1 {:: ]) { 0 {:: ]))
+ >:@((2 {:: ])&])) (<@:[ 2} ]) ])`(_&(<@:[ 1} ])
)@.(0 {:: [) ])^:(1 = (1 {:: ]) < <:@:#@:[)^:_ (]
;&(0;0;'';'')))@(2 0 ,~ a. (0 ,"0 ])@i. ]) 0&{)&>
,:@}.@}:&.>)
answer1 lines
1350
answer2 is included in the gist as well
On Tue, Dec 8, 2015 at 10:23 AM, David Lambert <b49p23t...@gmail.com> wrote:
Part 1, a chance to exercise the FSM. The states here are sufficient for
character count. Raul's annotated state table style is worth reiterating,
hence this post. Fixed width font aligns the columns.
mp=: +/ .*
S=: +. ". }. [;._2 noun define
bore hex \ " x LF
0j6 0j6 0j6 6j0 0j6 0j0 NB. 0 between strings j=_1
2j1 2j1 3j0 1j3 2j1 0j0 NB. 1 terminating "
2j0 2j0 3j3 1j3 2j0 0j6 NB. 2 amid string
0j6 0j6 2j1 2j1 4j0 0j6 NB. 3 allow \"x after leading \
0j6 5j0 2j1 2j1 5j0 0j6 NB. 4 first hex digit
0j6 2j1 0j6 0j6 0j6 0j6 NB. 5 second hex digit
2j1 2j1 3j0 1j0 2j1 0j6 NB. 6 first char of string
)
M=: a.(>:@i.@#@] mp (e.>)"1 0)'0123456789abcdef';;/'\"x',LF
----------------------------------------------------------------------
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