If I have like
{a,b}
and I want to get
{{a+1,b},{a-1,b},{a,b+1},{a,b-1}}
We don't care about the ordering of the list.Such as the {{a-1,b},{a+1,b},{a,b+1},{a,b-1}} also is a valid list.
This is current method
MapAt[Reverse,
Transpose[{Distribute[Unevaluated@Plus[{1, -1}, {a, b}], List],
Riffle[{b, b}, {a, a}]}], {{2}, {4}}]
{{1+a,b},{a,1+b},{-1+a,b},{a,-1+b}}
Or this
Catenate@({Tuples[{Plus[#, {1, -1}], {#2}}],
Tuples[{{#}, Plus[#2, {1, -1}]}]} & @@ {a, b})
{{1+a,b},{-1+a,b},{a,1+b},{a,-1+b}}
Very ugly code.Are there more beautiful solution can do this?
lis = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; {a, b} + # & /@ lis– RunnyKine Apr 03 '16 at 10:38{a, b} + # & /@ Join[#, -#] &[IdentityMatrix[2]]. ReplaceJoin[]withRiffle[]if desired. – J. M.'s missing motivation Apr 03 '16 at 10:39Table[{a, b}, 4] + Join[#, -#] &[IdentityMatrix[2]]– RunnyKine Apr 03 '16 at 10:48