Consider A’s statement. If he is honest, then so is D. If he is dishonest, then D is of a different type; that is, honest. So, D must be honest.
His statement confirms that he eats fish, and that all of the others are dishonest.From C’s statement, it can be deduced that he eats chicken, and so A or B is vegetarian.
B cannot be honest; no honest person would claim to be a dishonest vegetarian. Since he is dishonest, he cannot be a dishonest vegetarian either, or he would be telling the truth. Therefore, he must be a dishonest mutton-eater.
Therefore, the final answer is that A is the vegetarian, B eats mutton, C eats chicken and D eats fish.