Start with "STAIN":
"S" is in the solution but in a different spot. "T", "A", "I", and "N" are not in the solution.
$ grep -P '(?=^[^stain][^tain]{4}$)(?=.*s.*)(?!.*[[:punct:]].*)' /usr/share/dict/words
Guess with "YOURS":
"Y" and "R" are not in the solution. "O" and "U" are in the solution and in the correct spots. "S" is in the solution but in a different spot.
$ grep -P '(?=^[^yrstain]ou[^yrtain][^tainyrs]$)(?=.*s.*)(?!.*[[:punct:]].*)' /usr/share/dict/words
Guess with "HOUSE":
"H" is not in the solution. "O", "U", "S", and "E" are in the solution and in the correct spots.
$ grep -P '(?=^[^hyrstain]ouse$)(?!.*[[:punct:]].*)' /usr/share/dict/words
Guess with "MOUSE":
"M" is not in the solution. "O", "U", "S", and "E" are in the solution and in the correct spots.
$ grep -P '(?=^[^mhyrstain]ouse$)(?!.*[[:punct:]].*)' /usr/share/dict/words
Guess with "DOUSE":
"D" is not in the solution. "O", "U", "S", and "E" are in the solution and in the correct spots.
$ grep -P '(?=^[^dmhyrstain]ouse$)(?!.*[[:punct:]].*)' /usr/share/dict/words
Guess with "LOUSE":
We win. "LOUSE" is the solution.