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