- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
#include <fstream>
#include <string.h>
#include <stdlib.h>
#include <iostream>
typedef unsigned int uint;
std::string sMsg;
int GetShift()
{
int iResult = 0;
for(uint i = 0; i < sMsg.size(); i++)
{
if(!isalpha(sMsg[i])) continue;
if(isupper(sMsg[i]))
{
iResult = int(sMsg[i]) - int('A');
break;
}
else if(islower(sMsg[i]))
{
iResult = int(sMsg[i]) - int('a');
break;
}
}
return iResult;
}
int Pos(const char* _Str, char _Ch)
{
int i = 0;
while(*_Str)
{
if(*_Str == _Ch)
{
return i;
}
_Str++;
i++;
}
return -1;
}
int main()
{
std::ifstream fin("input.txt");
std::ofstream fout("output.txt");
std::getline(fin, sMsg);
int iShift = GetShift();
if(iShift == 0)
{
fout << sMsg;
}
else
{
char* szOriginal = (char*)malloc(100);
strcpy(szOriginal, "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
char* szShift = (char*)malloc(100);
strcpy(szShift, "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZ");
szShift += iShift;
char* szOriginalL = (char*)malloc(100);
strcpy(szOriginalL, "abcdefghijklmnopqrstuvwxyz");
char* szShiftL = (char*)malloc(100);
strcpy(szShiftL, "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz");
szShiftL += iShift;
for(int i = 0; i < sMsg.size(); i++)
{
if(!isalpha(sMsg[i]))
fout << sMsg[i];
else
{
if(isupper(sMsg[i]))
{
int iPos = Pos(szShift, sMsg[i]);
fout << *(szOriginal + iPos);
}
else if(islower(sMsg[i]))
{
int iPos = Pos(szShiftL, sMsg[i]);
fout << *(szOriginalL + iPos);
}
}
}
free(szOriginal);
free(szShift);
free(szOriginalL);
free(szShiftL);
}
fin.close();
fout.close();
return 0;
}
В рамках подготовки к прошедшей областной олимпиаде по информатике среди школьников Минской области решал задачи. Данный говнокод решение задачи про шифр цезаря (данная задача была на областной олимпиаде в 2013 - 2014 учебном году).
Задача: расшифровать строку, которая зашифрована шифром Цезаря, так, чтобы полученная расшифровка была минимальна лексикографически.
Зашифрованная строка находится в файле input.txt, результат надо было вывести output.txt
> szShift += iShift;
> free(szShift);
Пиздец.
Всего лишь UB.
Хранил я какую-то метаинформацию, а после неё начиналось что-то полезное. Я сдвигал указатель туда, где полезное, хранил и передавал его нужным функциям, потом удалял как честный человек.
И долго думал, почему программа умирает.
Хорошо напверное пользоваться только тем куском памяти, который ты сам создал. Создал -- передал куда надо -- там его заполнили --- ты его прочитал -- очистил. И всё.
Функция, противоположная его запиливанию же. Инкапсуляция, все дела:
this?
P.S. А, блин, /RTC cannot be used with compiler optimizations ;(
Вообще было бы офигенно, если из одного потока в другой поток нельзя было указатели передавать на объекты в стеке и система била сразу в глаз с разворота.
Ну и может все что ниже в стеке - заполнять на какую-то длину каким-нибудь специальным значением 4 кб например до цикла не создающего временные объекты, а после этого цикла проверять, что они не изменились.
Потом между временными объектами вставлять объекты упакованные с выравниванием 1 байт, забитые специальным значением например на 1 кб, а в деструкторе которых сверять не потерли ли их.
Как проверить целостность фреймов в стеке? Возвратных адресов из функций? Адресов обработчиков SEH?
Не спасёт от переполненного буфера, т.к. все эти параметры окажутся незадетыми, запорются только данные да адрес возврата. Вот вторая идея, про объекты, заполненные специальным значением, вроде бы поинтересней.
> из одного потока в другой поток нельзя было указатели передавать
А вот от соседнего треда, продолжающего насиловать труп, увы, ничего не спасёт. Он же это может сделать намного позже. Походу придётся искать все места, где берутся адреса локальных переменных, и читать код тех функций, куда их передают... Ибо сохранение указателя на локальную переменную - однозначное ССЗБ.
Ну может какие анализаторы кода заюзать? Какие есть годные? Желательно чтобы без возни и "по русски"-бесплатно или бесплатно.
Неужели нет ни у кого кулстори как он побеждал порчи памяти?
http://www.gamedev.ru/flame/forum/?id=197490
И как, выиграл?
Кресты, это же как игра с шулером UBшными картами — без шансов.
Это как?
А какая она, крестологика? В каком аспекте они близки:?
Шаблоны, шаблоны шаблонов, конструкторы типов, универсальность, подставим в параметры абстрактную питушню и получим генератор генераторов для нашего массива, параметризованного множеством интов и царской керосиновой лампой. template<T> class X: public T {}; Таинственные символы << и >> возможность >=> их ++ переопределения. Всё гениальное уже придумано до нас. std::vector std::transform Data.List.permutations boost::spirit Prelude.flip. Универсальность и красота, универсальность и красота, универсальность и где мой мозг?
... разочаруюсь в крестах и хаскеле, сопьюсь, захиккую и буду смотреть аниме, в котором милые девочки делают милые вещи.
Шутка (но в каждой шутке есть доля правды).
Лучше D покури. Там метапрограмминг поинтересней замутили. Минус - D для продакшена пока рискованно юзать (но тебе ведь не для продакшена, а для души?).
Уже. Вот например я сейчас смотрю Блич. Говно, а что делать. Милых девочек нет. Не в этом аниме, не так, да и не нужны.
Блин, как вы вообще смотрите эти длинносенёны? Мне 64 серии алхимика казались чем-то заоблачным, еле-еле решился на него, хоть и годнота...
Тоже верно. Кстати хотел об этом сказать, уж лучше читать хаскел чем втыкать аниме или сраться в интернете за политику, например...
Да, я просто его не осилил.
Неси свой крест, бро... А у нас контора последние годы перекатывается в веб, причём пыховский и пёрловский, что меня печалит. Если планируемый проектик на QML не получит зелёный свет - уйду искать счастья в больших городах, надоело всё.
Он всех пропагандирует. Прямо церковь у него
В больших городах все также. Если у тебя опыт на крестах, то и будешь ты нести свой крест.
а кмл каким боком к вебу? так что зеленого не будет
В нашем усть-зажопинске одна годная программерская контора. Во всех остальных местах придётся работать вспомогательным персоналом, на досуге заправляя картриджи. Сам понимаешь, без запасного аэродрома крест, плавно превращающийся в пых, нести не комильфо. Если бы не тёплая ламповая атмосфера и более-менее интересные проекты - давно бы свалил.
> кмл каким боком к вебу
Никаким, там планировался линух и C++/QML прога. Сейчас всё от заказчика зависит - если хуй окончательно не положат из-за крымнаша и его последствий, то будем пилить.
Так я и сказал ;)
хе-хе
ну это уж как устроиться
на днях приходил собеседоваться парень, который всё собеседование жутко гордился тем, что 6 лет назад при институте писал ненужно на MFC, и т.к. у него аж 4 года крестоопыта, ему раз плюнуть сделать ынтерпрайз как на asp.net mvc, так и на j2ee.. ну или на ассемблере, если вдруг надо
Взяли?
нельзя делать публичные ложные выводы о своей компетентности и потенциале из своего сомнительного опыта на крестах,
нельзя претендовать на позицию сеньора-архитектора, плавая в ответах, связанных с архитектурой, не понюхав большей половины базовых ынтерпрайзных вещей,
нельзя хвалиться тем, что за последние 4 месяца без работы он вместо того, чтобы читать книжки по программированию, читал книжки про торговлю на форексе
да и в 31 год его учить уже новому бессмысленно, врядли будут горящие глаза и осознание, что до потолка компетенции ещё далеко, с таким настроением-то
в общем, скорее всего не MFC же виновато
или...
- Конечно, я на этом MFC 6 лет назад при институте кодил!
Ну появилась же потреблядская шняга типа Siri
https://www.youtube.com/watch?v=B3ygkiXEurY
Чтоб всякую херню проще покупать.
>И вообще разработка компов 5го поколения загнулась и искусственного интеллекта не будет.
>И даже надежда ИИ: закон мура и масштабируемость многоядерности соснула пополной
А в 60х-70х была эйфория, когда появились нейронные сети, думали если построить достаточно большую сеть, с мириадами перцептронов, она станет разумной (ну по аналогии с мозгом).
Закон Амдала неумолим...
> и вообще плохо внедряются новые технологии
Да что тут удивительного? Они всё существование человечества плохо внедрялись, если не требовались для выживания, войны или получения удовольствия.
это правда
Уж лучше царское аниме смотреть, чем быть заедушным питушком.
> но тебе ведь не для продакшена, а для души?
Это да. Вот только лень что-то новое изучать.
Вот-вот, разве LispGovno запомнил из хаскеля только боль и страдания? Явно что-то хорошее в его жизни было.
Кстати концепты хачкеля можно смело красть, не изучая при этом ебанутого языка.
А вы чё думаете, я троллил всё это время?
Га-га-га. Бляяяяяяя.
[успокаивается]
Уважаю за честность.
Вот так оно в жизни и бывает: учил Haskell, а в суровой реальности платят за MFC.Ну ничё концепты идеи еще пригодятся.
Ну что-то тебя совсем накрыло в этом году... Ты для себя реши, нужна ли тян тебе или же она нужна окружающим, которые тебя доябывают в духе "28 лет, а не женился" и т.п. Если тебе - ставь цель и добивайся. Если только окружающим - смело ложи на их разговоры хуй и не принимай близко к сердцу. А самокопания и сожаления о прошлом, имхо, ни к чему.
Окружающим вроде, но посмеиваются, да. А родители так вообще негодуют. Старик, а не женат.
Я всегда говорил что это блядство. Пока я не смогу нормально это >=> гуглить, толку не будет.
>получим генератор генераторов для нашего массива
Вообще в 90% слишком повышенная абстрактность вредна. Люди начинают сходить с ума, городят слишком обобщённые и слишком непонятные говнорешения, забывают о KISS.
Я понимаю что иногда это надо, но кресты провоцируют писать заумь.
https://www.haskell.org/hoogle/ - нормально ищет по доке. Лучше, чем ничего.
А для крестов такого нету? А. Я совсем забыл что там ебанутые значки еще и контекстозависимы.
> контекстозависимы
... а как раз вот в этом. Так что поиск по значку не особо поможет. Там нужно добывать маны по типам аргументов, и искать в них смысл этих значков...
А есть свежая? С [] лямбдами и прочей херней.
Просто почти все значки сишки/крестов уже стандарт де-факто и так или иначе юзаются в других языках.
А в хаскеле видимо чего-то посуровее курили.
А там кроме лямбды ([](){} и []{}) и initializer list (std::vector<int> a {1,2,3,4,5}) никаких значков и не добавляли. Ну разве что сделали синтаксис еще более контекстнозависимым, и теперь можно писать std::vector<std::vector<int>> вместо std::vector<std::vector<int> > (раньше с оператором путало, если пробел забыть).
А ну так то всё известные вещи. Спрашиваю мож проебал чего, кресты они ведь не перестают удивлять (скорее безумными комбинациями существующих синтаксических элементов).