Code Golf: Mix the nuts so that none of the same kind are touching
GolfScript, 42 41 37 38 characters
~.`{\`{=}+%1-,}+$.,)2//zip[]*.2<..&=*p
The code expects input on STDIN and prints result to STDOUT, e.g.:
> ["walnut" "walnut" "walnut" "macadamia" "pistachio"]
["walnut" "macadamia" "walnut" "pistachio" "walnut"]
> ["walnut" "walnut" "walnut" "macadamia" "walnut"]
[]
The script became longer than expected but I suppose there is room for improvement.
Edit: The case of a list with a single item costs me 1 character (the best comparison I could come up with is the same as Peter's).
GolfScript, 32 chars
~:x{]x\-,}$.,)2//zip[]*.2<..&=*`
Same input and output format as Howard's solution.
Brachylog v2, 10 bytes
p.¬{s₂=}∨Ė
Try it online!
Brute-force solution. (This is a function, allowed because the challenge does not say "full program".) It's also mostly a direct translation of the spec (the only real subtlety is that I managed to arrange things so that all the implicit constraints arrived in exactly the right places, thus not needing any extra characters to disambiguate them).
Note that this is a generic algorithm for rearranging any sort of list so that it does not have two touching elements; it can handle string representations of the elements, and it can handle integer codes just as well. So it doesn't really matter how the "Your program must have a way of representing each kind of nut, such as an integer code." requirement from the question is interpreted.
Explanation
p.¬{s₂=}∨Ė
p Find a permutation of {the input}
¬{ } which does not have the following property:
s₂ it contains a pair of adjacent elements
= that are equal
∨ {no constraint on what value the equal elements can have}
. If you find such a permutation, output it.
∨ If no permutation is found, ignore the input and
Ė {output} an empty list