Ну, это не так сложно:
- Выберите целое число, возможно, случайным образом.
- Проверьте ваши условия
- Если одно из условий не выполняется, вернитесь к шагу 1.
Если у вас несколько целых чисел, таких как x и y в вашем примере, замените "целое число" на "целые числа".
Этот метод также известен как выборка отклонения .
Вы можете реализовать это, например, с помощью серии цепочек итераторов. И некоторые ограничения работают довольно хорошо в качестве генераторов, например, «положительные целые числа меньше 100», так что вы, вероятно, начнете с одного из них, прежде чем отфильтровать все остальные ограничения.
Единственный другой вариант, который я вижу, применимый к общим ограничениям, - анализировать ваши ограничения и генерировать числа, не угадывая, а зная, как их генерировать. Это тривиально для таких ограничений, как «0