|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Delphi разработчик, Москва, $3k
В команду центра программных разработок приглашается опытный и ответственный Delphi разработчик для поддержки и дальнейшего развития приложения инвестиционно-финансовой направленности.
================ Задачи: - Поддержка системы и разработка новой функциональности на Delphi. ================ Требования: - Высшее техническое образование - Опыт командной разработки ПО свыше 5 лет - Уверенные знания паттернов проектирования - Знание Object Pascal и Delphi (от Delphi7 и выше) - Знание SQL и MSSQL Server 2005(2008) Management Studio - Внимательность, склонность к анализу - Отношение к работе "Get thing done" ================ Компания предлагает: - Интересную и насыщенную работу в престижной компании, входящей в ТОП-3 игроков финансового рынка России. - Конкурентноспособную зарплату (по результатам собеседования). - Работу в комфортном офисе класса "А" в центре Москвы (станция метро Библиотека им. Ленина) - ДМС (полная страховка, включая стоматологию и госпитализацию). Возможность страхования близких родственников за свои средства по корпоративному тарифу. - Бонусы по результатам работы в финансовом году (финансовый год длится с октября по конец сентября, выплата в декабре) в размере до 6 окладов. ================ Резюме с указанием пожеланий по оплате принимаются на E-mail: daniil.starkov@gmail.com Справки по: ICQ: 327-106-730 Skype: daniil.starkov Моб. 8-927-650-70-49 |
#2
|
|||
|
|||
вот если предложишь $100K в год - тогда поговорим
|
#3
|
||||
|
||||
Я так понимаю предлагается 90тр в месяц?)
|
#4
|
|||
|
|||
Цитата:
Напиши функцию, которая принимает на вход байт и возвращает кол-во установленных в нем битов. Сделай несколько вариантов функции: а) Оптимизированной по скорости б) Оптимизированной по памяти в) Компромиссный вариант вот если напишешь эту функцию - тогда поговорим |
#5
|
||||
|
||||
Цитата:
по памяти это перебор по битам, а компромиссный это подстановки более мелких групп к заранее просчитанному массиву, но поменьше. на 30к рублей наработал? Последний раз редактировалось urahara, 22.04.2010 в 23:45. |
#6
|
|||
|
|||
Ну не знаю на счет оптимизации...
Код:
function BitCount(B : Byte) : Byte; const cMask = 1; begin Result := 0; While B <> 0 Do Begin Result := Result + (B And cMask); B := B SHR 1; End; end; Быстрее, разве только на асме переписать. Ну или совсем быстрый вариант - массив готовых значений и входной байт есть индекс. Извини, это писать просто лень (256 значений). Хотя можно сгенерить с использованием представленной функции. |
#7
|
|||
|
|||
Цитата:
Ага, это он самый. Тут компромиситься аж но 2 раза - по 2 или по 4 бита. Вопрос в том, что по скорости не больно то выиграешь - наверное, все-таки по 4 бита будет удобнее. Кстати, зря расписали. а то можно было бы сделать интересный конкурс с этим заданием |
#8
|
||||
|
||||
Цитата:
Последний раз редактировалось urahara, 23.04.2010 в 00:34. |
#9
|
|||
|
|||
Ну тут задача имеет строго 2 решения. Компромис не рассматриваем, т.к. он и есть компромис. Если бы не расписали, то можно было бы дать народу порешать - вот тогда бы таких велосипедов понаделали бы
|
#10
|
||||
|
||||
Разбиваем число на две части по 4 бит.
Первую часть по таблице [0..15], а вторую по этой же таблице: Код:
bx[0]=0; bx[1]=1; bx[2]=1; bx[3]=2; bx[4]=1; bx[5]=2; bx[6]=2; bx[7]=3; bx[8]=1; bx[9]=2; bx[10]=2; bx[11]=3; bx[12]=2; bx[13]=3; bx[14]=3; bx[15]=4; Код:
000=[00000000]; s1=0; s2=0; Rez=0 001=[10000000]; s1=1; s2=0; Rez=1 002=[01000000]; s1=1; s2=0; Rez=1 003=[11000000]; s1=2; s2=0; Rez=2 004=[00100000]; s1=1; s2=0; Rez=1 005=[10100000]; s1=2; s2=0; Rez=2 006=[01100000]; s1=2; s2=0; Rez=2 007=[11100000]; s1=3; s2=0; Rez=3 008=[00010000]; s1=1; s2=0; Rez=1 009=[10010000]; s1=2; s2=0; Rez=2 010=[01010000]; s1=2; s2=0; Rez=2 011=[11010000]; s1=3; s2=0; Rez=3 012=[00110000]; s1=2; s2=0; Rez=2 013=[10110000]; s1=3; s2=0; Rez=3 014=[01110000]; s1=3; s2=0; Rez=3 015=[11110000]; s1=4; s2=0; Rez=4 016=[00001000]; s1=0; s2=1; Rez=1 017=[10001000]; s1=1; s2=1; Rez=2 018=[01001000]; s1=1; s2=1; Rez=2 019=[11001000]; s1=2; s2=1; Rez=3 020=[00101000]; s1=1; s2=1; Rez=2 021=[10101000]; s1=2; s2=1; Rez=3 022=[01101000]; s1=2; s2=1; Rez=3 023=[11101000]; s1=3; s2=1; Rez=4 024=[00011000]; s1=1; s2=1; Rez=2 025=[10011000]; s1=2; s2=1; Rez=3 026=[01011000]; s1=2; s2=1; Rez=3 027=[11011000]; s1=3; s2=1; Rez=4 028=[00111000]; s1=2; s2=1; Rez=3 029=[10111000]; s1=3; s2=1; Rez=4 030=[01111000]; s1=3; s2=1; Rez=4 031=[11111000]; s1=4; s2=1; Rez=5 032=[00000100]; s1=0; s2=1; Rez=1 033=[10000100]; s1=1; s2=1; Rez=2 034=[01000100]; s1=1; s2=1; Rez=2 035=[11000100]; s1=2; s2=1; Rez=3 036=[00100100]; s1=1; s2=1; Rez=2 037=[10100100]; s1=2; s2=1; Rez=3 038=[01100100]; s1=2; s2=1; Rez=3 039=[11100100]; s1=3; s2=1; Rez=4 040=[00010100]; s1=1; s2=1; Rez=2 041=[10010100]; s1=2; s2=1; Rez=3 042=[01010100]; s1=2; s2=1; Rez=3 043=[11010100]; s1=3; s2=1; Rez=4 044=[00110100]; s1=2; s2=1; Rez=3 045=[10110100]; s1=3; s2=1; Rez=4 046=[01110100]; s1=3; s2=1; Rez=4 047=[11110100]; s1=4; s2=1; Rez=5 048=[00001100]; s1=0; s2=2; Rez=2 049=[10001100]; s1=1; s2=2; Rez=3 050=[01001100]; s1=1; s2=2; Rez=3 051=[11001100]; s1=2; s2=2; Rez=4 052=[00101100]; s1=1; s2=2; Rez=3 053=[10101100]; s1=2; s2=2; Rez=4 054=[01101100]; s1=2; s2=2; Rez=4 055=[11101100]; s1=3; s2=2; Rez=5 056=[00011100]; s1=1; s2=2; Rez=3 057=[10011100]; s1=2; s2=2; Rez=4 058=[01011100]; s1=2; s2=2; Rez=4 059=[11011100]; s1=3; s2=2; Rez=5 060=[00111100]; s1=2; s2=2; Rez=4 061=[10111100]; s1=3; s2=2; Rez=5 062=[01111100]; s1=3; s2=2; Rez=5 063=[11111100]; s1=4; s2=2; Rez=6 064=[00000010]; s1=0; s2=1; Rez=1 065=[10000010]; s1=1; s2=1; Rez=2 066=[01000010]; s1=1; s2=1; Rez=2 067=[11000010]; s1=2; s2=1; Rez=3 068=[00100010]; s1=1; s2=1; Rez=2 069=[10100010]; s1=2; s2=1; Rez=3 070=[01100010]; s1=2; s2=1; Rez=3 071=[11100010]; s1=3; s2=1; Rez=4 072=[00010010]; s1=1; s2=1; Rez=2 073=[10010010]; s1=2; s2=1; Rez=3 074=[01010010]; s1=2; s2=1; Rez=3 075=[11010010]; s1=3; s2=1; Rez=4 076=[00110010]; s1=2; s2=1; Rez=3 077=[10110010]; s1=3; s2=1; Rez=4 078=[01110010]; s1=3; s2=1; Rez=4 079=[11110010]; s1=4; s2=1; Rez=5 080=[00001010]; s1=0; s2=2; Rez=2 081=[10001010]; s1=1; s2=2; Rez=3 082=[01001010]; s1=1; s2=2; Rez=3 083=[11001010]; s1=2; s2=2; Rez=4 084=[00101010]; s1=1; s2=2; Rez=3 085=[10101010]; s1=2; s2=2; Rez=4 086=[01101010]; s1=2; s2=2; Rez=4 087=[11101010]; s1=3; s2=2; Rez=5 088=[00011010]; s1=1; s2=2; Rez=3 089=[10011010]; s1=2; s2=2; Rez=4 090=[01011010]; s1=2; s2=2; Rez=4 091=[11011010]; s1=3; s2=2; Rez=5 092=[00111010]; s1=2; s2=2; Rez=4 093=[10111010]; s1=3; s2=2; Rez=5 094=[01111010]; s1=3; s2=2; Rez=5 095=[11111010]; s1=4; s2=2; Rez=6 096=[00000110]; s1=0; s2=2; Rez=2 097=[10000110]; s1=1; s2=2; Rez=3 098=[01000110]; s1=1; s2=2; Rez=3 099=[11000110]; s1=2; s2=2; Rez=4 100=[00100110]; s1=1; s2=2; Rez=3 101=[10100110]; s1=2; s2=2; Rez=4 102=[01100110]; s1=2; s2=2; Rez=4 103=[11100110]; s1=3; s2=2; Rez=5 104=[00010110]; s1=1; s2=2; Rez=3 105=[10010110]; s1=2; s2=2; Rez=4 106=[01010110]; s1=2; s2=2; Rez=4 107=[11010110]; s1=3; s2=2; Rez=5 108=[00110110]; s1=2; s2=2; Rez=4 109=[10110110]; s1=3; s2=2; Rez=5 110=[01110110]; s1=3; s2=2; Rez=5 111=[11110110]; s1=4; s2=2; Rez=6 112=[00001110]; s1=0; s2=3; Rez=3 113=[10001110]; s1=1; s2=3; Rez=4 114=[01001110]; s1=1; s2=3; Rez=4 115=[11001110]; s1=2; s2=3; Rez=5 116=[00101110]; s1=1; s2=3; Rez=4 117=[10101110]; s1=2; s2=3; Rez=5 118=[01101110]; s1=2; s2=3; Rez=5 119=[11101110]; s1=3; s2=3; Rez=6 120=[00011110]; s1=1; s2=3; Rez=4 121=[10011110]; s1=2; s2=3; Rez=5 122=[01011110]; s1=2; s2=3; Rez=5 123=[11011110]; s1=3; s2=3; Rez=6 124=[00111110]; s1=2; s2=3; Rez=5 125=[10111110]; s1=3; s2=3; Rez=6 126=[01111110]; s1=3; s2=3; Rez=6 127=[11111110]; s1=4; s2=3; Rez=7 128=[00000001]; s1=0; s2=1; Rez=1 129=[10000001]; s1=1; s2=1; Rez=2 130=[01000001]; s1=1; s2=1; Rez=2 131=[11000001]; s1=2; s2=1; Rez=3 132=[00100001]; s1=1; s2=1; Rez=2 133=[10100001]; s1=2; s2=1; Rez=3 134=[01100001]; s1=2; s2=1; Rez=3 135=[11100001]; s1=3; s2=1; Rez=4 136=[00010001]; s1=1; s2=1; Rez=2 137=[10010001]; s1=2; s2=1; Rez=3 138=[01010001]; s1=2; s2=1; Rez=3 139=[11010001]; s1=3; s2=1; Rez=4 140=[00110001]; s1=2; s2=1; Rez=3 141=[10110001]; s1=3; s2=1; Rez=4 142=[01110001]; s1=3; s2=1; Rez=4 143=[11110001]; s1=4; s2=1; Rez=5 144=[00001001]; s1=0; s2=2; Rez=2 145=[10001001]; s1=1; s2=2; Rez=3 146=[01001001]; s1=1; s2=2; Rez=3 147=[11001001]; s1=2; s2=2; Rez=4 148=[00101001]; s1=1; s2=2; Rez=3 149=[10101001]; s1=2; s2=2; Rez=4 150=[01101001]; s1=2; s2=2; Rez=4 151=[11101001]; s1=3; s2=2; Rez=5 152=[00011001]; s1=1; s2=2; Rez=3 153=[10011001]; s1=2; s2=2; Rez=4 154=[01011001]; s1=2; s2=2; Rez=4 155=[11011001]; s1=3; s2=2; Rez=5 156=[00111001]; s1=2; s2=2; Rez=4 157=[10111001]; s1=3; s2=2; Rez=5 158=[01111001]; s1=3; s2=2; Rez=5 159=[11111001]; s1=4; s2=2; Rez=6 160=[00000101]; s1=0; s2=2; Rez=2 161=[10000101]; s1=1; s2=2; Rez=3 162=[01000101]; s1=1; s2=2; Rez=3 163=[11000101]; s1=2; s2=2; Rez=4 164=[00100101]; s1=1; s2=2; Rez=3 165=[10100101]; s1=2; s2=2; Rez=4 166=[01100101]; s1=2; s2=2; Rez=4 167=[11100101]; s1=3; s2=2; Rez=5 168=[00010101]; s1=1; s2=2; Rez=3 169=[10010101]; s1=2; s2=2; Rez=4 170=[01010101]; s1=2; s2=2; Rez=4 171=[11010101]; s1=3; s2=2; Rez=5 172=[00110101]; s1=2; s2=2; Rez=4 173=[10110101]; s1=3; s2=2; Rez=5 174=[01110101]; s1=3; s2=2; Rez=5 175=[11110101]; s1=4; s2=2; Rez=6 176=[00001101]; s1=0; s2=3; Rez=3 177=[10001101]; s1=1; s2=3; Rez=4 178=[01001101]; s1=1; s2=3; Rez=4 179=[11001101]; s1=2; s2=3; Rez=5 180=[00101101]; s1=1; s2=3; Rez=4 181=[10101101]; s1=2; s2=3; Rez=5 182=[01101101]; s1=2; s2=3; Rez=5 183=[11101101]; s1=3; s2=3; Rez=6 184=[00011101]; s1=1; s2=3; Rez=4 185=[10011101]; s1=2; s2=3; Rez=5 186=[01011101]; s1=2; s2=3; Rez=5 187=[11011101]; s1=3; s2=3; Rez=6 188=[00111101]; s1=2; s2=3; Rez=5 189=[10111101]; s1=3; s2=3; Rez=6 190=[01111101]; s1=3; s2=3; Rez=6 191=[11111101]; s1=4; s2=3; Rez=7 192=[00000011]; s1=0; s2=2; Rez=2 193=[10000011]; s1=1; s2=2; Rez=3 194=[01000011]; s1=1; s2=2; Rez=3 195=[11000011]; s1=2; s2=2; Rez=4 196=[00100011]; s1=1; s2=2; Rez=3 197=[10100011]; s1=2; s2=2; Rez=4 198=[01100011]; s1=2; s2=2; Rez=4 199=[11100011]; s1=3; s2=2; Rez=5 200=[00010011]; s1=1; s2=2; Rez=3 201=[10010011]; s1=2; s2=2; Rez=4 202=[01010011]; s1=2; s2=2; Rez=4 203=[11010011]; s1=3; s2=2; Rez=5 204=[00110011]; s1=2; s2=2; Rez=4 205=[10110011]; s1=3; s2=2; Rez=5 206=[01110011]; s1=3; s2=2; Rez=5 207=[11110011]; s1=4; s2=2; Rez=6 208=[00001011]; s1=0; s2=3; Rez=3 209=[10001011]; s1=1; s2=3; Rez=4 210=[01001011]; s1=1; s2=3; Rez=4 211=[11001011]; s1=2; s2=3; Rez=5 212=[00101011]; s1=1; s2=3; Rez=4 213=[10101011]; s1=2; s2=3; Rez=5 214=[01101011]; s1=2; s2=3; Rez=5 215=[11101011]; s1=3; s2=3; Rez=6 216=[00011011]; s1=1; s2=3; Rez=4 217=[10011011]; s1=2; s2=3; Rez=5 218=[01011011]; s1=2; s2=3; Rez=5 219=[11011011]; s1=3; s2=3; Rez=6 220=[00111011]; s1=2; s2=3; Rez=5 221=[10111011]; s1=3; s2=3; Rez=6 222=[01111011]; s1=3; s2=3; Rez=6 223=[11111011]; s1=4; s2=3; Rez=7 224=[00000111]; s1=0; s2=3; Rez=3 225=[10000111]; s1=1; s2=3; Rez=4 226=[01000111]; s1=1; s2=3; Rez=4 227=[11000111]; s1=2; s2=3; Rez=5 228=[00100111]; s1=1; s2=3; Rez=4 229=[10100111]; s1=2; s2=3; Rez=5 230=[01100111]; s1=2; s2=3; Rez=5 231=[11100111]; s1=3; s2=3; Rez=6 232=[00010111]; s1=1; s2=3; Rez=4 233=[10010111]; s1=2; s2=3; Rez=5 234=[01010111]; s1=2; s2=3; Rez=5 235=[11010111]; s1=3; s2=3; Rez=6 236=[00110111]; s1=2; s2=3; Rez=5 237=[10110111]; s1=3; s2=3; Rez=6 238=[01110111]; s1=3; s2=3; Rez=6 239=[11110111]; s1=4; s2=3; Rez=7 240=[00001111]; s1=0; s2=4; Rez=4 241=[10001111]; s1=1; s2=4; Rez=5 242=[01001111]; s1=1; s2=4; Rez=5 243=[11001111]; s1=2; s2=4; Rez=6 244=[00101111]; s1=1; s2=4; Rez=5 245=[10101111]; s1=2; s2=4; Rez=6 246=[01101111]; s1=2; s2=4; Rez=6 247=[11101111]; s1=3; s2=4; Rez=7 248=[00011111]; s1=1; s2=4; Rez=5 249=[10011111]; s1=2; s2=4; Rez=6 250=[01011111]; s1=2; s2=4; Rez=6 251=[11011111]; s1=3; s2=4; Rez=7 252=[00111111]; s1=2; s2=4; Rez=6 253=[10111111]; s1=3; s2=4; Rez=7 254=[01111111]; s1=3; s2=4; Rez=7 255=[11111111]; s1=4; s2=4; Rez=8 Код:
function SumBit(B : Byte) : Byte; const bx:array[0..15]of byte=(0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4); begin Result:=bx[B mod 16]+bx[B shr 4]; end; Правда память... Последний раз редактировалось Konrad, 23.04.2010 в 18:11. |
#11
|
|||
|
|||
Можно еще хитрее:
Код:
function BitCount(B : Byte) : Integer; const cMask : Array [1..8] Of Byte = (1,2,4,8,16,32,64,128); begin Result := (B And cMask[1]) + (B And cMask[2]) + (B And cMask[3]) + (B And cMask[4]) + (B And cMask[5]) + (B And cMask[6]) + (B And cMask[7]) + (B And cMask[8]); end; |
#12
|
||||
|
||||
lmikle, все это конечно хорошо, но...
Твой первый алгоритм - затраты на скорость (ибо цикл) Твой второй алгоритм - затраты на память (ибо константа) Но, весь вопрос в том во что это все будет скомпилировано, т.к. давно известно что у борланда оптимизирующий компилятор Некоторые программисты настолько ленивы, что сразу пишут рабочий код. Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты. |
#13
|
|||
|
|||
Аристарх, прочитай постановку задачи.
Т.е. там и надо несколько реализаций - по скорости, по памяти и компромис. В конце-концов, можно и POPCNT использовать напрямую (по моему, камень должен поддерживать SSE4). |
#14
|
||||
|
||||
Ну если не извращаться асмом....
По идее вторая реализация должна была бы быстрее, но оказываеться что первая реализация была медленнее моей в 3,11 раза, а вторая в 3. |