Zr3 Юнити - вообще не аргумент. Все зависит от того что в ней делать. То же с максом. Топ-игры - лучше системник или консоль. А так - я бы брал где памяти больше.
Андрей Дык я просто переписал ваш текст - решения я не привел ) По сути. Делаете интерфейс DataProvider. В нем - туча методов, которыми можно получить все данные для M и для M` - для обоих, это важно. Реализуете интерфейс в A. Далее - делаете интерфейс Generator. В нем - один метод Generate, который принимает в себя DataProvider. Ну и реализуете Generator в C_1 и C_2. Таким образом у вас нужные реализации будут запрашивать нужные данные из DataProvider, коим может являться ваш А. А может быть и кто то другой.
Роман, Просто Роман смотрите, немного рассуждений, просто мысли в слух. Вам нужно найти функцию (математическую), для которой y для любого верного кода >0, а для любого неверного кода - <0. Допустим что такая функция, описываемая конечным числом математических операций существует. Значит мы ее можем найти полным перебором или любой оптимизацией полного перебора. Но - скорее всего функция в итоге будет иметь вид "если А то 1, если Б то 2 иначе -1". С известными алгоритмами генерации - будет приблизительно то же самое - наверняка там есть какая то "соль", которую вам так же эмпирически придется подобрать, и на тестовой выборке ваша соль даст валидное значение, а на контрольной - сломается. Соответственно чтобы найти 100% тот алгоритм, который для всех вариантов даст 100% результат - в тестовой выборке должны быть все варианты.