Hi,

I'm trying to come out with a few primitives for a 2048-like-game
operations.

I did the following

   first =: {.
   rest =. }.
   f =: ((dyad def 'x,y')"(0 1)`(dyad def '(x + first y) , rest y'"(0
1))@.=)

In words f should do the following
  - if x = first y the reduce it to x+y
  - if x not = first y then give back the sequence x,y


The intended use would be, for ex.

  f/ 4 4 4
4 8

  f/ 4 4 4 4
8 8

In the first case it works.


In the second case the result is the following:

   f/ 4 4 4 4
8 0
4 8

My idea was

  f/ x x x x

is equivalent to
  4 f 4 f 4 f 4

then, working right-to-left, 4 = first 4, so it simplify to
  4 f 4 f 8

now, 4 is not = first 8, so it should simplify to
  4 f 4 8

now, 4 is = first 4 8, so it should simplify to
  8 8


What could be a way to implement the behavior that I described?

MfG

Luca.

----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to