Я делаю программу для лошадей. У меня лицо лошади, и я хочу применить небольшую маску. Только глаза лошади должны быть видны, когда на ней надета маска. Сначала я должен преобразовать морду лошади в цифровую форму. Для этого у меня есть набор битов, который включает 0, 0, 0 и 1 для лица лошади.
Я использую С# и разбил проблему на части:
- Превратите голову лошади в цифровой формат
- Создайте битовую маску для ношения
- Наденьте битовую маску на лошадь
- Преобразуйте цифровую лошадь в маске обратно в графику
На шаге 4 я ожидаю увидеть только глаза лошади, но я вижу только «0», который НЕ ЯВЛЯЕТСЯ ДАЖЕ ЛИЦОМ ЛОШАДИ.
Вот весь мой код, пожалуйста, не подвергайте сомнению мой ASCII-арт, он не имеет отношения к вопросу, кроме того, что это прототип, реальная программа будет иметь превосходную графику.
//the head of the horse
string head = "# #" +
"########" +
"#O O#" +
"# #" +
"# #" +
"#= =#" +
" #====# " +
" #### ";
//digitize the horse into bits of binary
string binaryHead = head.Replace('#', '0').Replace('=', '0').Replace(' ', '0').Replace('O', '1');
long face = Convert.ToInt64(binaryHead, 2);
//make a bit mask with holes for the eyes
string mask = "11111111" +
"11111111" +
"10111101" +
"11111111" +
"11111111" +
"11111111" +
"11111111" +
"11111111";
//apply the bit mask using C#
long maskBits = Convert.ToInt64(mask, 2);
string eyesOnly = Convert.ToString(face & maskBits, 2);
//eyesOnly is "0"....WHAT??? It should be more than that. WHERE IS THE HORSE??
//It should look like this:
// "00000000" +
// "00000000" +
// "01000010" +
// "00000000" +
// "00000000" +
// "00000000" +
// "00000000" +
// "00000000";
Я подозреваю, что что-то не так с преобразованием, я пробовал все, что угодно, например, преобразование в массив байтов и форматирование строки с пробелами, но безуспешно. Мне интересно, может ли эта проблема быть NP-сложной.