Help me juice my avocados
Mathematica — 350 bytes

Not a very short solution, but better than no solution at all, right?

t[x_]:=Flatten@Table[x/@{G,S,R},{i,n},{j,n}];""&lt;&gt;Cases[StringReplace[(First@Solve[(Table[G[i,j]+G[i-1,j]+G[i+1,j]+S[i,j]+S[i,j-1]+S[i,j+1]+R[i,j]+R[i-1,j]+R[i+1,j]+R[i,j-1]+R[i,j+1],{i,n=Length@#},{j,n}]/.(G|S|R)[___,0|n+1,___]-&gt;0)==3-#&amp;&amp;And@@t[#[i,j]&gt;=0&amp;],t[#[i,j]&amp;],Integers])/.{(x_-&gt;m_):&gt;ToString[m x]},{"["-&gt;" ","]"-&gt;"\n",", "-&gt;","}],Except@"0"]&amp;


A more readable version (with extra spaces and indents and stuff):

t[x_] := Flatten@Table[x /@ {G, S, R}, {i, n}, {j, n}]; 
"" &lt;&gt; Cases[
   StringReplace[(First@
       Solve[(Table[
             G[i, j] + G[i - 1, j] + G[i + 1, j] + S[i, j] + 
              S[i, j - 1] + S[i, j + 1] + R[i, j] + R[i - 1, j] + 
              R[i + 1, j] + R[i, j - 1] + R[i, j + 1], {i, 
              n = Length@#}, {j, n}] /. (G | S | R)[___, 
              0 | n + 1, ___] -&gt; 0) == 3 - # &amp;&amp; 
         And @@ t[#[i, j] &gt;= 0 &amp;], t[#[i, j] &amp;], 
        Integers]) /. {(x_ -&gt; m_) :&gt; ToString[m x]}, {"[" -&gt; " ", 
     "]" -&gt; "\n", ", " -&gt; ","}], Except@"0"] &amp;


Input is an array (e.g. {{3,2,3},{2,2,2},{3,2,3}}), output is a string (with a trailing newline — if this is unacceptable, enclose the function in StringDrop[...,-1] for an extra 15 bytes). I used the coordinate system that says (1,1) is the top-left corner, (n,n) is the bottom right (where n is the dimension of the matrix). Sometimes, if the solution requires doing the same operation multiple times, the output includes things like 3 G 2,2 (for "use the grater at (2,2) three times") — since you didn't say what to do in this case, I hope that's OK.

Explanation:


Table[G[i,j]+G[i-1,j]+G[i+1,j]+S[i,j]+S[i,j-1]+S[i,j+1]+R[i,j]+R[i-1,j]+R[i+1,j]+R[i,j-1]+R[i,j+1],{i,n=Length@#},{j,n}] creates an array with the variables G[i,j] in each place that's affected by using the grater at (i,j), and similarly for S[i,j] and R[i,j]. These variables represent the number of times the tool is used at that position.
.../.(G|S|R)[___,0|n+1,___]-&gt;0 removes the effects of using tools at positions outside the avocado field.
...==3-# compares this to the difference between the input and a field of perfectly juiced avocados.
...&amp;&amp;And@@t[#[i,j]&gt;=0&amp;] says the variables G[i,j], S[i,j], R[i,j] must be non-negative (you can't un-juice the avocados!), using the shorthand t[x_]:=Flatten@Table[x/@{G,S,R},{i,n},{j,n}].
First@Solve[...,t[#[i,j]&amp;],Integers] finds the first integer solution to our equations in terms of the variables G[i,j], S[i,j], R[i,j].
/.{(x_-&gt;m_):&gt;ToString[m x]} hides the variables that equal zero, while also putting the solution in a nice string form.
StringReplace[...,{"["-&gt;" ","]"-&gt;"\n",", "-&gt;","}] turns strings like "2 G[1, 4]" into strings like "2 G 1,4", and adds a newline on the end.
""&lt;&gt;Cases[...,Except@"0"] removes all the leftover "0"s and joins all the strings together.