- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
#include <array>
#include <iostream>
using namespace std;
int main() {
::array arr {1, 2, 3};
int a, b, c;
::tie(a, b, c) = arr;
printf("%d %d %d",a,b,c);
return 0;
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+1
#include <array>
#include <iostream>
using namespace std;
int main() {
::array arr {1, 2, 3};
int a, b, c;
::tie(a, b, c) = arr;
printf("%d %d %d",a,b,c);
return 0;
}
https://godbolt.org/z/RRmruC
+1
#include <iostream>
#include <map>
std::map<std::string, int> get_map()
{
return {
{ "hello", 1 },
{ "world", 2 },
{ "it's", 3 },
{ "me", 4 },
};
}
int main()
{
for (auto&& [ k, v ] : get_map())
std::cout << "k=" << k << " v=" << v << '\n';
return 0;
}
+1
template <typename function_type, typename vector_type>
function_type read_memory(HANDLE hProcess, function_type base_address, std::vector< vector_type >&& offsets) {
function_type tmp = base_address;
for (function_type i : **reinterpret_cast< vector_type** >( &offsets )) {
ReadProcessMemory(hProcess, reinterpret_cast< PBYTE* >( tmp + i ), &tmp, sizeof(function_type), nullptr);
}
return tmp;
}
int main() {
std::vector< DWORD > offset = {
0x10,
0x14,
0x158
};
auto buffer = read_memory< DWORD, DWORD >(hProcess, base_address, std::move(offset));
}
Полуговнокодер читает память чужого процесса...
+2
// https://www.linux.org.ru/forum/development/15496357
// Нужен нормальный способ сказать компилятору что type aliasing невозможен на некотором участке кода. Минимальный пример:
template<typename T> struct f final {
void bad(T v) noexcept { while (b != e) *b++=v; }
void good(T v) noexcept {
auto tb(b), te(e);
while (tb != te) *tb++=v;
b=tb;
e=te;
}
T* b, * e;
};
template struct f<char>;
/*
Выхлоп gcc-8:
$ g++ -xc++ -std=c++14 -pedantic-errors -Os -c -of.o f.cc
$ objdump -Cd f.o
f.o: file format elf64-x86-64
Disassembly of section .text._ZN1fIcE3badEc:
0000000000000000 <f<char>::bad(char)>:
0: 48 8b 07 mov (%rdi),%rax
3: 48 3b 47 08 cmp 0x8(%rdi),%rax
7: 74 0c je 15 <f<char>::bad(char)+0x15>
9: 48 8d 50 01 lea 0x1(%rax),%rdx
d: 48 89 17 mov %rdx,(%rdi)
10: 40 88 30 mov %sil,(%rax)
13: eb eb jmp 0 <f<char>::bad(char)>
15: c3 retq
Disassembly of section .text._ZN1fIcE4goodEc:
0000000000000000 <f<char>::good(char)>:
0: 48 8b 07 mov (%rdi),%rax
3: 48 8b 57 08 mov 0x8(%rdi),%rdx
7: 48 39 d0 cmp %rdx,%rax
a: 74 09 je 15 <f<char>::good(char)+0x15>
c: 48 ff c0 inc %rax
f: 40 88 70 ff mov %sil,-0x1(%rax)
13: eb f2 jmp 7 <f<char>::good(char)+0x7>
15: 48 89 07 mov %rax,(%rdi)
18: 48 89 47 08 mov %rax,0x8(%rdi)
1c: c3 retq
*/
f<char>::bad(char)+0, f<char>::bad(char)+3 и f<char>::bad(char)+d - три раза за итерацию лезет в память. Разумеется, подобный код сливает в тестах производительности. Есть решение лучше, чем локальные переменные заводить каждый раз?
+2
#include <iostream>
using namespace std;
bool check(int a, int b){
int ass[10] = {0}, bass[10] = {0};
while(a){
ass[a % 10]++;
bass[b % 10]++;
a /= 10;
b /= 10;
}
for(int i = 0; i < 10; i++){
if(ass[i] != bass[i]) return false;
}
return true;
}
int main() {
for(int i = 1; i < 10; i++){
for(int j = 0; j < 10; j++){
for(int k = 0; k < 10; k++){
for(int l = 0; l < 10; l++){
for(int m = 0; m < 10; m++){
for(int n = 0; n < 10; n++){
for(int o = 0; o < 10; o++){
for(int p = 0; p < 10; p++){
for(int r = 1; r < 10; r++){
long long a =
i * 100000000
+ j * 10000000
+ k * 1000000
+ l * 100000
+ m * 10000
+ n * 1000
+ o * 100
+ p * 10
+ 3;
long long z = r * 10000000
+ r * 1000000
+ r * 100000
+ r * 10000
+ r * 1000
+ r * 100
+ r * 10
+ r;
if(check(a, a + z)){
cout << a << " " << z << endl;
}
}
}
}
}
}
}
}
}
}
}
Коротко о переборах.
+1
У людей картина мира в значительной степени определяется системой языка, на котором они говорят.
Грамматические и семантические категории языка являются не только инструментами для передачи мыслей говорящего, но и управляют мыслительной деятельностью формируя идеи человека.
Таким образом, предполагается, что люди, которые говорят на разных языках, будут иметь и разные представления о мире, а в случае значительных структурных расхождений между их языками при обсуждении некоторых тем у собеседников могут возникать трудности с пониманием.
Хайнлайн писал: "Нормальные языки родились во времена невежества и предрассудков, и генетически содержат закрепленные в структурах неверные представления о мироздании"
А фантастичесикй язык, созданный Хайнлайном "не содержит тех ошибок, которым изобилует английский, ибо он структурирован так же, как реальный мир".
Спидток был языком, полностью основанным на логике. Количество слов в нём было минимальным, зато грамматические связи были очень сложными.
В спидтоке существовало несколько сотен звуков, при этом каждое двухбуквенное сочетание означало определенное слово.
В итоге, одно слово на спидтоке соответствовало длинному предложению обычного языка, настолько ёмок и точен был его смысл. Люди, научившиеся этому языку, считали себя следующей ступенью эволюции человека - homo novus.
Они хотели захватить власть над Землей и рассматривали, а современных людей вида homo sapiens считали чем-то наподобие домашних животных.
Поскольку идея языка описана, но не развита в работе Хайнлайна, многие попытались создать подобный язык.
Многие из идей спидтока были включены в ифкуиль.
Ифкуиль признаётся одним из самых сложных языков.
Сам автор языка признаётся, что говорить на нём – за пределами даже его возможностей.
Цель Ифкуиля - объединение всех знаний, которые накопило человечество, для того, чтобы достигнуть максимальной выразительности и эффективности использования.
https://old.computerra.ru/205383/
+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