28, битовый крест
Вообще-то, вчера надо было это написать.
28-е, число кармы и воздаяния. Только для тех, кто способен выдержать преднамеренноcть или пусть даже злонамеренность бытия по отношению к себе, вместе с тем, понимая, что у бытия в этом нет ничего личного, просто бизнес карма.
"Я знаю, почему у меня такая карма, и я ценю, что я до сих пор жив и проповедую" - как сказал один знакомый :)
Итак, 1+2+3+4+5+6+7=28, (28/7+7)*7=77, совершенное число, карточная игра и многое другое, вот только отдельной статьи в "Лурке" пока нет, хоть и 28 + 28/2 же.
И сказал Господь Моисею, говоря: повели сынам Израилевым и скажи им: наблюдайте, чтобы приношение Мое, хлеб Мой в жертву Мне, в приятное благоухание Мне, приносимо было Мне в свое время.
Ну а "на самом деле" 28 похоже на битовый крест, вот такой:
28, битовый крест из 4 байт
Если игроки, например, ходят по очереди своими 2-байтовыми числами, то выиграет тот, кто после пары ходов занял центр большим количеством единичек?
Нет, очень примитивно тогда. Учитывая, что центр заполняется по принципу "исключающего ИЛИ" (1 на 1 и 0 на 0 дают 0, иначе 1), то первому игроку достаточно будет ходить, например, числом 0x1818 (6168, единички в позициях центра), а второму числом 0xe7e7 (59367, нули в позиции центра, чтобы сохранить единички первого игрока).
Так что пусть это будет просто способ изобразить слегка искажённые 4 байта. Консольная программа выполнялась в Studio 2019, вроде бы, всё так.
#include <iostream> #include <cstdint> using namespace std; class BitCross { unsigned char lines[4]; uint16_t uz (unsigned char c) { return (uint16_t)c == 0 ? 0 : 1; } public: BitCross(uint16_t first, uint16_t second) { lines[0] = (unsigned char)((first & 0xff00u) >> 8); lines[1] = (unsigned char)(first & 0x00ffu); lines[2] = (unsigned char)((second & 0xff00u) >> 8); lines[3] = (unsigned char)(second & 0x00ffu); } BitCross(unsigned char c[4]) { for (int i=0; i<4; i++) lines[i] = c[i]; } void show() { unsigned char place; unsigned int bit, num; //верх for (bit = 0, place = 0x01; bit < 3; bit++) { cout << " "; cout << uz(lines[0] & place); cout << uz(lines[1] & place); cout << " " << endl; place <<= 1; } unsigned char cross[2][2] = { { uz(lines[0] & 0x08u), uz(lines[1] & 0x08u) }, { uz(lines[0] & 0x10u), uz(lines[1] & 0x10u) } }; //горизонтали for (num = 2; num < 4; num++) { for (bit = 0, place = 0x80u; bit < 3; bit++) { cout << uz(lines[num] & place); place >>= 1; } cout << (cross[num - 2][0] ^ uz(lines[num] & 0x10u)); cout << (cross[num - 2][1] ^ uz(lines[num] & 0x08u)); for (bit = 5, place = 0x04u; bit < 8; bit++) { cout << uz(lines[num] & place); place >>= 1; } cout << endl; } //низ for (bit = 5, place = 0x20u; bit < 8; bit++) { cout << " "; cout << uz(lines[0] & place); cout << uz(lines[1] & place); cout << " " << endl; place <<= 1; } cout << endl; } }; int main() { BitCross b(0x1818u, 0xe7e7u); b.show(); unsigned char letters[4] = { 'P','e','r','S' }; BitCross c(letters); c.show(); return 0; }
00 00 00 11111111 11111111 00 00 00 01 00 01 01110010 01000011 01 11 00
29.06.2020, 20:10 [1296 просмотров]