- 1
https://www.linux.org.ru/forum/development/15475716?cid=15478711
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
https://www.linux.org.ru/forum/development/15475716?cid=15478711
> Система типов в С++ куда мощнее любой скриптухи, особенно хаскеля. Там уже есть завтипы. А значит какая угодно суперкомпиляция. Да и сам С++ состоит из суперкомпиляции на 99%.
Царь
+3
// https://habr.com/ru/post/451830/ Кратко с реализацией о AES 128 ECB
// ...
byte_t hex(char ch) { return (ch - '0') % 39; }
byte_t sbox(byte_t x, bool decrypt = false) {
std::string s = (decrypt ? INV_SBOX : SBOX)[x >> 4][x & 15];
return hex(s[0]) << 4 | hex(s[1]);
}
byte_t mult_by_2(byte_t x) { return (x < 128) ? x << 1 : (x << 1 & 0xff) ^ 0x1b; }
byte_t mult_by_8(byte_t x) { return mult_by_2(mult_by_2(mult_by_2(x))); }
const std::unordered_map<byte_t, std::function<byte_t(byte_t)>> mapper = {
{0x1, [](byte_t x) { return x; }},
{0x2, mult_by_2},
{0x3, [](byte_t x) { return mult_by_2(x) ^ x; }},
{0x9, [](byte_t x) { return mult_by_8(x) ^ x; }},
{0xb, [](byte_t x) { return mult_by_8(x) ^ mult_by_2(x) ^ x; }},
{0xd, [](byte_t x) { return mult_by_8(x) ^ mult_by_2(mult_by_2(x)) ^ x; }},
{0xe, [](byte_t x) { return mult_by_8(x) ^ mult_by_2(mult_by_2(x)) ^ mult_by_2(x); }},
};
byte_t vector_mult(const std::array<byte_t, 4>& v1, std::array<byte_t, 4>&& v2) {
std::transform(begin(v1), end(v1), begin(v2), begin(v2),
[](byte_t x, byte_t y) { return mapper.at(y)(x); });
return std::accumulate(begin(v2), end(v2), byte_t(0), std::bit_xor<byte_t>());
}
const std::vector<std::vector<std::string>> SBOX = { // блядь сука долбоеб нахуя это так делать?
{ "63", "7c", "77", "7b", "f2", "6b", "6f", "c5", "30", "01", "67", "2b", "fe", "d7", "ab", "76" },
{ "ca", "82", "c9", "7d", "fa", "59", "47", "f0", "ad", "d4", "a2", "af", "9c", "a4", "72", "c0" },
{ "b7", "fd", "93", "26", "36", "3f", "f7", "cc", "34", "a5", "e5", "f1", "71", "d8", "31", "15" },
{ "04", "c7", "23", "c3", "18", "96", "05", "9a", "07", "12", "80", "e2", "eb", "27", "b2", "75" },
{ "09", "83", "2c", "1a", "1b", "6e", "5a", "a0", "52", "3b", "d6", "b3", "29", "e3", "2f", "84" },
// ...
пиздец нахуй
0
void main(void)
{
int a1,a2,a3,a4,a5,a6,a7,a8,a9;
int b1,b2,b3,b4,b5,b6,b7,b8,b9;
int c1,c2,c3,c4,c5,c6,c7,c8,c9;
int d1,d2,d3,d4,d5,d6,d7,d8,d9;
int e1,e2,e3,e4,e5,e6,e7,e8,e9;
int f1,f2,f3,f4,f5,f6,f7,f8,f9;
int g1,g2,g3,g4,g5,g6,g7,g8,g9;
int h1,h2,h3,h4,h5,h6,h7,h8,h9;
int i1,i2,i3,i4,i5,i6,i7,i8,i9;
....
}
Когда-то когда я еще не знал о существовании массивов.... это начало программы для решения судоку.
В продолжении этого были определены еще 729 переменных для вариантов решения.
0
t = rx + (ry * 100);
std::vector<std::string> tmap;
coin = 0;
rcol = 0;
roomname = "Untitled room ["+UtilityClass::String(rx) + "," + UtilityClass::String(ry)+"]";
switch(t)
{
case rn(50,50):
tmap.push_back("283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,284,444,444,444,444,444,444,444,444,444,285,283,284,444,444,444,444,444,444,444,444,444,444,444,444,285,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,363,364,365,0,0,0,403,283,405,0,0,0,363,364,365,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,403,283,405,0,0,0,443,444,445,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("444,444,444,444,444,444,285,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,403,283,324,364,364,364,364,364,364,364,364,364,325,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,403,283,283,283,283,283,283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,443,444,444,444,444,444,444,444,444,444,444,444,285,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("364,364,365,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,405,0,0,0,403,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,405,0,0,0,403,283,324,364,364,364,364,364,364,364,364,364,364,364,365,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,405,0,0,0,403,283,283,283,283,283,283,283,283,283,283,283,283,283,405,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,405,0,0,0,443,444,444,444,444,444,444,444,444,444,444,444,444,444,445,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,403,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,324,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,364,325,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
tmap.push_back("283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,283,405,0,0,0,0,0,0,403,283,283,283,283,283,283");
obj.createentity(game, 232, 24, 10, 0, 250500); // (savepoint)
if(game.intimetrial)
{
obj.createblock(0, 0, 0, 8, 240);
}
rcol=1;
roomname = "Get Ready To Bounce";
break;
Именно поэтому я за «std::embed».
https://github.com/TerryCavanagh/VVVVVV/blob/master/desktop_version/src/Labclass.cpp
+2
// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1371r1.pdf#section.4
// Pattern Matching P1371R1
// before
auto&& [x, y] = p;
if (x == 0 && y == 0) {
std::cout << "on origin";
} else if (x == 0) {
std::cout << "on y-axis";
} else if (y == 0) {
std::cout << "on x-axis";
} else {
std::cout << x << ',' << y;
}
// after
inspect (p) {
[0, 0]: std::cout << "on origin";
[0, y]: std::cout << "on y-axis";
[x, 0]: std::cout << "on x-axis";
[x, y]: std::cout << x << ',' << y;
}
Говностандартизаторы очередную хуйню изобретают. Нет чтоб нормальную гомоиконность сделать, чтоб через нее любую такую поебень синтезировать можно было, не изменяя говностандарт, не добавляя всяких новых statement. И почему они не хотят эту херню прикрутить тупо к switch? Что если у меня переменная называется inspect, мне ее что, переименовывать?
Давайте пропосал напишем, чтоб для стейтментов отдельные неймспейсы были, и чтоб можно было свои самопальные стейтменты написать на каком-то отдельном говноязыке (шаблоны под эту хуйню, как я понял, не подходят)? Ну чтоб у всех окончательно сорвало крышу от обилия хуйни.
+3
while ( port->available() )
{
au8Buffer[ u8BufferSize ] = port->read();
u8BufferSize ++;
if (u8BufferSize >= MAX_BUFFER) bBuffOverflow = true;
}
Если буфер переполнился – попробуем это запомнить и... продолжим затирать память! Реальный кусок из библиотеки работы с RS485 – протоколом, применяющимся в промышленных контроллерах и все такое.
+3
template <typename T>
void f() {
if constexpr (std::is_arithmetic_v<T>)
// ...
else
static_assert(false, "Must be arithmetic"); // ill-formed: invalid for every T
}
// The common workaround for such a catch-all statement is a type-dependent expression that is always false:
template<class T> struct dependent_false : std::false_type {};
template <typename T>
void f() {
if constexpr (std::is_arithmetic_v<T>)
// ...
else
static_assert(dependent_false<T>::value, "Must be arithmetic"); // ok
}
То есть «static_assert(false)» в шаблоне — это UB. Чтобы оно было не UB и можно было спокойно отключать ненужные специализации — надо городить ёбанный костыль. Пиздец. Почему стандартизаторы не могут просто взять и сделать что-то удобное? Что-то, для чего не требуется городить по десятку костылешаблонов, заставляющих его работать? Что-то без ёбанной явной специализации для bool? Почему любой высер крестокомитета обязательно должен быть максимально сложным, вербозным, неочевидным говном с кучей подводных камней и UB?
0
std::tuple<int, int, int, bool> cock;
std::get<bool>(cock)
Сначала не понимал нахуй нужен геттер по типу, но при очередном добавлении нового int и забытии поменять индекс у була, заюзал его.
Бтв, почему нету cock.get<0>?
−1
#include <boost/hana.hpp>
#include <boost/hana/ext/std/tuple.hpp>
#include <cstdint>
namespace hana = boost::hana;
using namespace hana::literals;
using hana::transform, hana::decltype_, hana::to_set, hana::type_c;
auto copy = [](uint8_t * in, uint8_t * out, auto n, auto s) {
n.times.with_index([&](auto x) {
if constexpr(x == s) {
++in;
} else {
*(uint16_t *)out = *(uint16_t *)in;
out +=2; in += 2;
}
});
return in;
};
auto f(uint8_t * in, uint8_t * out) {
return copy(in, out, 33_c, 15_c);
}
https://habr.com/ru/post/482834/#comment_21094618
> Простая задача, самый базовый вариант https://godbolt.org/z/5F5mt9 — повторите.
Очередные набросы крестоговна на хабр от царя.
Найдите UB.
0
class Display
{
public:
//pin 10_CS_LOAD pin 11_DIN pin 13_CLK
const int CS = 10;//CS на 10 пине
void R1_R2 (char x,char y)//метод вывода чисел 0-99 в разряды 1,2 c гашением нуля
{
char k1,k2;
if(x<10)
{
if(y==1) //если включена точка
{ SPI_out(2, arr_seg[x]+128);} //вывести число во второй разряд с точкой
else//выключена точка
{ SPI_out(2, arr_seg[x]);} //вывести число во второй разряд без точки
SPI_out(1, 0 );//в первый записать все нули ,и погасить его
return; //завершить метод
}
else
{
k1=0;
k2=x; while (k2>=10) {k1++; k2=k2-10;}
SPI_out(1,arr_seg[k1]); //вывести число в первый разряд
if(y==1) //если включена точка
{SPI_out(2,arr_seg[k2]+128);} //вывести число во второй разряд c точкой
else{SPI_out(2,arr_seg[k2]);} //без точки
}
}
void R2_R3 (char x)//метод вывода чисел 0-99 в разряды 2,3 (темепература)
{
char k1,k2;
if(x<10)
{
SPI_out(2,0); //пробел во второй разряд
SPI_out(3,arr_seg[x]); //вывести число в третьий разряд
}
else {
k1=0;
k2=x; while (k2>=10) {k1++; k2=k2-10;}
SPI_out(2,arr_seg[k1]); //вывести число во второй разряд без точки
SPI_out(3,arr_seg[k2]); //вывести число в третьий разряд
}
}
void R3_R4 (char x,char y)//метод вывода чисел 0-99 в разряды 3,4
{
char k1,k2;
k1=0;
k2=x; while (k2>=10) {k1++; k2=k2-10;}
if(y==1) //если включена точка
{ SPI_out(3,arr_seg[k1]);} //вывести число в третьий разряд без точки
else
{SPI_out(3,arr_seg[k1]+128); }//вывести число в третьий разряд с точкой
SPI_out(4,arr_seg[k2]); //вывести число в четвертый разряд
}
void R1 (unsigned char x,boolean p) //метод для отрисовки в первом разряде
{
if(p==true) //если активированна точка
{ SPI_out(1, arr_seg[x]+128 );} //вывести в первый разряд число по № из массива
else {SPI_out(1, arr_seg[x]);}
}
void R2 (unsigned char x,boolean p) //метод для отрисовки во втором разряде
{
if(p==true) //если активированна точка
{ SPI_out(2, arr_seg[x]+128 );} //вывести в первый разряд число по № из массива
else {SPI_out(2, arr_seg[x]);}
}
void R3 (unsigned char x,boolean p) //метод для отрисовки в третьем разряде
{
if(p==true) //если активированна точка
{ SPI_out(3, arr_seg[x]+128 );} //вывести в первый разряд число по № из массива
else {SPI_out(3, arr_seg[x]);}
}
void R4 (unsigned char x,boolean p) //метод для отрисовки в четвертом разряде
{
if(p==true) //если активированна точка
{ SPI_out(4, arr_seg[x]+128 );} //вывести в первый разряд число по № из массива
else {SPI_out(4, arr_seg[x]);}
}
//метод отрисовки во всех разрядах сразу
void allraz (unsigned char a,unsigned char b,unsigned char c,unsigned char d)
{
SPI_out(1, arr_seg[a]);
SPI_out(2, arr_seg[b]);
SPI_out(3, arr_seg[c]);
}
автору 40 лет, на секундочку