Накрымлся
Пример: «Ваш проект накрымлся кремлевской звездой!»
Накрымлось
Пример: «Всё общество поддержки Путина на Западе полностью накрымлось после нового расследования Bellingcat.»
Накрымлся
Пример: «Ваш проект накрымлся кремлевской звездой!»
Накрымлось
Пример: «Всё общество поддержки Путина на Западе полностью накрымлось после нового расследования Bellingcat.»
В локальной сети
Стоит старинный комп,
Закрыт весь доступ,
Пароль висит большой на нем.
Сказать я пытался
Троянов нет на компе,
Но тут же раздался,
Ужасный голос в винде
Голос в Винде…
[Визг свиньи Касперского]
Мне больно видеть Интернет,
Скорей бы отключить вас всех.
Я очень много много лет
Мечтаю о крутом компе
Мне слишком тесно на XP
И я мечтаю об одном,
Скорей пароль свой поломать,
Проникнуть в какдый каждый комп!
Будь проклят каждый комп!
Был вирус в БИОС,
Крутой и жутко злой
Админ не понял
Как комп спасти от заразы той.
Админы не стали
Тогда харддиск форматить
Пароли поставив, решили пива попить,
И забухали…
Мне больно видеть Интернет,
Скорей бы отключить вас всех.
Я очень много много лет
Мечтаю о крутом компе
Мне слишком тесно на XP
И я мечтаю об одном,
Скорей пароль свой поломать,
Проникнуть в какдый каждый комп!
Будь проклят каждый комп!
И это место стороной
Обходит нетский люд,
И антивирусы твердят —
Там вирусы живут!
Задача опять же учебная, но может пригодиться и в реальной программе. Итак, нам даны числа, скажем, от 1
до 1000
, необходимо вывести их на экран или в файл последовательно, добавив лидирующие ноли, исходя из максимального числа. Если максимум 1000
, то числа должны быть выведены так:
0001
0002
0003
...
0100
0101
0102
...
1000
Если максимум 100
, то:
001
002
...
099
100
Нам понадобится максимальное число, в тестовом примере мы его жестко зададим:
int maxnumber = 1998;
Далее, понадобится получить количество цифр числа. Это мы уже делали, причем разными способами (копия), выбираем подходящий.
Создаем отдельный класс (в примере AddLZ
) и добавляем туда функцию:
public static int CountDigitsRec(int n) { n = (int)Math.Abs(n); if (n <= 9) { return 1; } else { return CountDigitsRec(n / 10) + 1; } }
В основной программе получаем количество цифр числа:
int maxdigits = AddLZ.CountDigitsRec(maxnumber);
Далее в цикле перебираем все числа, и скармливаем их функции, которая будет добавлять лидирующие ноли (AddLZ.AddLeaderZeroString(maxdigits, i)
);
for (int i = 0; i <= maxnumber ; i++) { string Result = AddLZ.AddLeaderZeroString(maxdigits, i); //... }
На вход функции подается два параметра — максимальное количество цифр и текущее число.
Получаем строковое представление текущего числа:
string scurnum = ((int)Math.Abs(curnum)).ToString();
Получаем длину строки из лидирующих нолей, которая должна быть равна количеству цифр максимального числа, минус длина (количество цифр) текущего числа. Оно получено выше.
int LenLZ = maxnum - scurnum.Length;
Далее, надо сформировать строку нужной длины из одного символа ('0'
) (копия):
StringBuilder sb = new StringBuilder(maxnum); for (int i = 0; i < LenLZ; i++) { sb.Append('0'); }
Далее добавляем строковое представление текущего числа:
sb.Append(scurnum);
И возвращаем значение:
return sb.ToString();
public static string AddLeaderZeroString(int maxnum, int curnum) { string scurnum = ((int)Math.Abs(curnum)).ToString(); int LenLZ = maxnum - scurnum.Length; StringBuilder sb = new StringBuilder(maxnum); for (int i = 0; i < LenLZ; i++) { sb.Append('0'); } sb.Append(scurnum); return sb.ToString(); }
Завтра приедет котокурьер из милой котокомпании и доставит книжку заказчику и котам из ЮВА. Котокомпанию нам рекламировать нельзя, т.к. права такого не имею. Но доставляют быстро, 15 рабочих дней максимум по всему миру. Карельские коты им делали сайт, так что у них кроме гонорара еще три промокода на бесплатную доставку по всей планете. Уже два.
Продолжаем задачки по генерации всяких паттернов. Недавно мы генерировали массив, заполненный одним значением (копия). Теперь будем генерировать строку из одного символа, но нужной длины. Строку из случайных символов мы уже делали
Теперь будем делать строку-паттерн из одного заранее заданного символа.
Заведем три переменных:
int strlen = 100000; // длинна строки
string symbol = "a"; // символ заполнения
string Result = ""; // результирующая строка
Т.е. в цикле for, используя конструкцию s=s+"a"
:
for (int i = 0; i < strlen; i++) { Result = Result + symbol; }
StringBuilder sb = new StringBuilder(strlen); for (int i = 0; i < strlen; i++) { sb.Append(symbol); } Result = sb.ToString();
For + standart string concatenation: | 00:00:05.7493288 |
Test For + StringBuilder.Append: | 00:00:00.0030001 |
Даже на 10000 символов видна разница, здесь показана на 100000, а 500000 для for
я вообще не дождался.
Примечание: Тут мы делали строку заданной длины из одного паттерна, поэтому StringBuilder
был уместен, т.к. он напрямую работает с памятью, и не использует механизм .NET, которому нужно строку скопировать, а потом добавить символ. См. ссылку ниже.