Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Alexander G:
[quote=1]Интересно посмотреть этот код в асме. 🙂 [/quote]
MSVC8, x68:
00401000: movsx eax,al
00401003: add eax,0FFFFFFBFh
00401006: cmp eax,39h
00401009: ja $LN53+3 (401015h) ; меньше 'A' или больше 'z'
0040100B: jmp dword ptr (401018h)[eax*4] ; таблица адресов, все элементы 00401015 или 00401015
00401012: mov al,1
00401014: ret
00401015: xor al,al
00401017: ret
форич на несколько милисекунд дольше работает, обычно не заметно, а вот в тяжелых циклах лучше фор юзать. Однако все равно <= блабла-1 на < блабла заменить
неа, такое кеширование наоборот убъет производительность
jit увидит что мы бегаем по циклу и вынесет проверку на выход за границы из тела цикла, а если кешировать длину массива, в каждой итерации цикла будет происходить та самая проверка
>jit увидит что мы бегаем по циклу и вынесет проверку на выход за границы из тела цикла
Совершенно непонятно как введение временной переменной мешает увидеть jitу что мы бегаем по циклу.
>а если кешировать длину массива, в каждой итерации цикла будет происходить та самая проверка
Пруфы?
Тесты на jsperf показывали обратное. Жава тоже дуплит и выпиливает условия, если может на входе в цикл доказать что он проходит в границах массива.
Нихуя!:
[quote=Звездочет]Да, в школе не учились, с неравенствами не знакомы и ASCI кодами тоже)) Но то, что после return стоит break(!!!???) - это убойно!)[/quote]
Какие в жопу ASCII коды?
А оптимизация. Метод половинного деления. число операций около 5.
Ещё можно расставить буквы в грамотном порядке, с учётом вероятности их использования(с учётом перебора методом ПД).
> Метод половинного деления
> символы могут быть разбросаны по всей таблице, если это не ASCII
is there logic?
P.S.
1. #include <ctype>
2. int isalpha(int c);
3. ...
4. PROFIT!
Да, они такие. Куры весьма всеядные животные. Они едят мясо. У них даже клюв хищно согнут и когти на ногах, как у орла. Если по двору пробегает лягушка или жаба - они непременно её атакуют и съедят. Существуют даже дикие куры.
Это было бы смешно, если бы отрезание старших битов не встречалось в реальных программах. В 1980-х и в 1990-х в англоязычных программах это было повсеместно (и даже в 2000-х, когда стали переходить на «Unicode», это встречалось).
Осторожнее, путник, ты вступаешь на тонкий лёд «Юникода»!
>>> def is_latin(c): return ord(c.upper()) in range(b'A'[0], b'Z'[0] + 1)
...
>>> is_latin('ß')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in is_latin
TypeError: ord() expected a character, but string of length 2 found
Фу, у тебя хоть и коротко, но много действий:
1. Создание ренджа
2. Создание ренджа
3. Создание массива
4. Создание лямды
5. Вызов метода any
6. Итереция по массиву и вызов лямды на каждой итереции
Если кто проходил по ссылке на оригинал, обратите внимание, там ещё есть подобный аналог функции toLowerCase() для перевода в нижний регистр, и тоже на свитче ))
Царский анролл же. Только для пирфоманса нужно упорядочить условия по убыванию вероятности их выполнения. Для этого нужно взять таблицу частот букв (которая используется в частотном криптоанализе). Эта таблица будет зависеть от языка. Например, если преобладают фразы на английском, то будет так:
У «gcc» нет никаких букв. В «Си» вообще нет типа данных для символа. Это в «Паскале» есть «char» для символов и «byte» для однобайтовых чисел. А в «Си» char — это число.
Во что превратится буква «Ё», зависит от того как она представлена в исходнике. Если прямо вот так буквой, результат зависит от кодировки исходника и от параметров, с которыми вызван компилятор (ему нужно указать какую кодировку ты используешь). Например, для «UTF-8» нужно вызывать «gcc» с параметром -finput-charset=UTF-8 (при этом из исходника нужно удалить BOM). Да, при использовании «Unicode» придётся перейти с char на wchar_t.
Есть ещё безопасный способ записи нелатинских символов. Например, "Ё" можно записать как "\u0401", тогда будет плевать на то, в какой кодировке исходник.
Кстати, в «Паскале» при использовании диапазонов (например, 'A'..'Z') тоже будет «анролл».
11 июня сообщалось, что в московском районе Ясенево коммунальщики при укладке асфальта использовали «передовые технологии». Рабочие, в процессе заделывания дыры на проезжей части, после укладки смеси набрасывали на участок картонку и ходили по ней, утрамбовывая покрытие.
Обезглавленное тело священномученика Дионисия встало, взяло в руки свою голову и пошло к тому месту, где была христианская церковь (около шести километров до поселения, которое впоследствии стало носить имя Сен-Дени).
Там, отдав главу одной благочестивой женщине по имени Катулла, из римской знати, оно пало на землю
Мощьно. Интересно посмотреть этот код в асме. 🙂
мощно*
уахахахах
А если надо проверить, является ли символ иероглифом, также будут писать?
в чар иероглиф не лезет, так что всё нормально 🙂
[quote=1]Интересно посмотреть этот код в асме. 🙂 [/quote]
MSVC8, x68:
Честно говоря ожидал лучше (без таблицы).
он не женский, он китайский.7
len = input.length();
for (i=0;i<len;i++)
а вообще чемпион по скорости:
len = input.length();
while(lin--)
while(input++)
{
...
}
jit увидит что мы бегаем по циклу и вынесет проверку на выход за границы из тела цикла, а если кешировать длину массива, в каждой итерации цикла будет происходить та самая проверка
Совершенно непонятно как введение временной переменной мешает увидеть jitу что мы бегаем по циклу.
>а если кешировать длину массива, в каждой итерации цикла будет происходить та самая проверка
Пруфы?
Тесты на jsperf показывали обратное. Жава тоже дуплит и выпиливает условия, если может на входе в цикл доказать что он проходит в границах массива.
Мне кажется тут не то что джит -- тут компилятор их примерно в одно склеет
блядь, ты там поисковую машину гугла пишешь чтоли? или движок AAA игры?
> в тяжелых циклах
Он написал "приложения". Очевидно, что от сахара пострадают в первую очередь легкие циклы.
Ну что за даун?..
А где break после default'а? Выбивается из общего стиля!
Регулярочку например на email-проверку в подобном стиле представьте)))
Помнится на первом курсе у нас не только прекрасная часть группы так выкручивалась
В дестве такое писал ....
Это скорее ява, или до диез, чар двухбайтовый, лезут туда иероглифы
Обидно блин. чо сразу женский то? протестую!
Да, в школе не учились, с неравенствами не знакомы и ASCI кодами тоже)) Но то, что после return стоит break(!!!???) - это убойно!)
[quote=Звездочет]Да, в школе не учились, с неравенствами не знакомы и ASCI кодами тоже)) Но то, что после return стоит break(!!!???) - это убойно!)[/quote]
Какие в жопу ASCII коды?
=~ /[A-Zaz]/
=~ /[A-Za-z]/
дефисенг пропустил.
парам-пам-пам
(ессно это кучек,даже не до конца строки)
так моя жена не первая?
Нет, даже так:
char alphabet[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z' };
int count = sizeof(alphabet);
char * p = alphabet;
for (int i = 0; i < count; i++, p++)
{
if (symbol == *p)
return 1;
}
Мозг у некоторых интересно работает: человек может знать всего страуструпа, уметь всем этим пользоваться и при этом вот такие алкоритмы выдавать.
Ещё можно расставить буквы в грамотном порядке, с учётом вероятности их использования(с учётом перебора методом ПД).
Золотой костыль получается
> символы могут быть разбросаны по всей таблице, если это не ASCII
is there logic?
P.S.
1. #include <ctype>
2. int isalpha(int c);
3. ...
4. PROFIT!
1. #include <locale>
2. use template <class charT> bool isalpha (charT c, const locale& loc);
3. ...
4. PROFIT^2!
—– Я некропедозооорнитотаксидермист.
if (bukva==0) {return 0;}
else if (bukva==1) {return 0;}
...
else if (bukva==97) {return 1;}
...
...
...
Откуда в людях столько трудолюбия и упорства берется? Мне проще написать прогу, которая сгенерирует такую хрень, чем писать это. Код улыбнул.
чувак написал что скоппиздил этот "код" у одногруппницы, которая его написала
позор ему!!
Вор должен сидеть в тюрьме.
чуть не помер, ахахахахаха
Задолбали уже! Хватит дискриминации по половому признаку!
Или требую под каждым говнокодом писать "Мужской вариант бла-бла-бла!"
*Ушла кодить, ненавижу мужиков, люблю кампутеры!*
ну тогда все понятно
bool is_latin(char symbol)
{
if (symbol >= 'A' && symbol <= 'Z')
return true;
return false;
}
А так -
bool is_latin(char symbol)
{
if ((symbol >= 'a' && symbol <= 'z') || (symbol >= 'A' && symbol <= 'Z'))
return true;
return false;
}
ну или на крайний,
bool is_letter (char symbol)
{
return !isdigit((int)symbol);
}
bool is_letter (char symbol)
{
return !isdigit(symbol);
}
bool char_IsLatin(wchar_t c)
{
return (c >= L'a' && c <= L'z') || (c >= L'A' && c <= L'Z');
}
bool char_IsDigit(wchar_t c)
{
return (c >= L'0' && c <= L'9');
}
if (...) return true;
return false;
🙂
всё-таки тип bool и придумали, чтобы сразу писать
return (...);
😉
На самом же деле первый вариант никакой опасности не таит, он просто длиннее.
Именно поэтому я пасцал.
isLatinW('ф') == 1;
зачем ты байтстроку потрогал?
почемуне
кстати
в рубя можно и без ссаного ретурно и ренджи можно
Именно поэтому я против «Юникода».
В Швейцарии нету никаких лигатур, именно потому я за
Питух ты анскильный, матчасть иди учи. Твой говно интерпретатор и не такую питушню может выдать, питух ты глупенький.
Не один вменяемый человек этим говном не воспользуется.
царь вернулся
Чо четверово ноября делать будишь?
1. Создание ренджа
2. Создание ренджа
3. Создание массива
4. Создание лямды
5. Вызов метода any
6. Итереция по массиву и вызов лямды на каждой итереции
ин
?
ин
bool isZifra(char c) {return false;}
вот как надо
Для заглавных аналогично.
На правах офтопика:
http://bibla.ru/files/book_covers/9696.jpg
>dil
блядь, надо современный асемблер учить.
в реальном режиме не было никаких дилд и сетбее
А, это как АH и АЛ это лапапамки AX?
А вот дилда доступна только в длинном 64-битном режиме.
Юникодовская "Ё" даже в чар не влезет. Хотя может и есть платформы где sizeof(char) >= 2...
А с однобитовыми кодировками особой разницы нет, какой там символ.
ты точно стертор судя по непроходимой тупости
Во что превратится буква «Ё», зависит от того как она представлена в исходнике. Если прямо вот так буквой, результат зависит от кодировки исходника и от параметров, с которыми вызван компилятор (ему нужно указать какую кодировку ты используешь). Например, для «UTF-8» нужно вызывать «gcc» с параметром -finput-charset=UTF-8 (при этом из исходника нужно удалить BOM). Да, при использовании «Unicode» придётся перейти с char на wchar_t.
Есть ещё безопасный способ записи нелатинских символов. Например, "Ё" можно записать как "\u0401", тогда будет плевать на то, в какой кодировке исходник.
Кстати, в «Паскале» при использовании диапазонов (например, 'A'..'Z') тоже будет «анролл».
Важно не забыть включить локаль на прыщах
какой сиплюсплюс
?
какой сексизм
Там, отдав главу одной благочестивой женщине по имени Катулла, из римской знати, оно пало на землю