- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
procedure TRegistry.GetKeyNames(Strings: TStrings);
var
Len: DWORD;
I: Integer;
Info: TRegKeyInfo;
S: string;
begin
Strings.Clear; // Очистить список перед добавлением. Это пиздец, как важно!!! Программист не додумается сам очистить список.
if GetKeyInfo(Info) then
begin
SetString(S, nil, Info.MaxSubKeyLen + 1);
for I := 0 to Info.NumSubKeys - 1 do
begin
Len := Info.MaxSubKeyLen + 1;
RegEnumKeyEx(CurrentKey, I, PChar(S), Len, nil, nil, nil, nil);
Strings.Add(PChar(S));
end;
end;
end;
guest 21.07.2014 23:41 # −1
Видимо, нужна какая-то мат. формула, но я в этом не силен.
bormand 22.07.2014 05:14 # 0
Если на непрерывность кусков похрену - можешь рассеивать строки по файлам по кругу. Прочитал строку, засунул в первый файл, прочитал вторую - засунул во второй и т.п.
А если куски нужны непрерывные - придется первым проходом прочесть файл и посчитать строки. Затем поделить это количество на количество файлов. Ну и вторым проходом переписывать по столько строк в каждый файл (последнему может достаться до N-1 лишних строк).
Как-то так.
bormand 22.07.2014 05:23 # 0
kegdan 22.07.2014 06:06 # 0
roman-kashitsyn 22.07.2014 07:53 # 0
Берём размер файла, считаем размер блока ChunkSize = FileSize / N. Устанавливаем текущую позицию на 0.
Формируем список кусков: запоминаем текущую позицию, прыгаем на ChunkSize вперёд и ищем до первого '\n'. Так получаем очередной кусок, записываем его в отдельный файл.
Такой подход не особо хорошо работает в вырожденных случаях, но если типичный кейс - много строк примерно одинаковой длины, то самое оно. Дёшево и сердито.
kegdan 22.07.2014 08:42 # 0
roman-kashitsyn 22.07.2014 08:55 # +1
kegdan 22.07.2014 09:13 # 0
выделяем узлы [k] k>0, k in N, k*n<=l
-------*-------*-------*-------*-------*-------*-------*---
[r]= [l-k]
---#---*---#---*---#---*---#---*---#---*---#---*---#---*---
Область компромисса для k(i) = r(i)..r(i+1)
иначе разделение на n файлов будет хуевым. так что спокойно можно просматривать
(l div n)-(l mod n) в обе стороны
kegdan 22.07.2014 09:49 # 0
код на выброс
guest 22.07.2014 22:24 # 0
Я вот так сделал, правильно?
bormand 22.07.2014 22:56 # +1
Безысходность...
kegdan 23.07.2014 06:32 # +1
kegdan 22.07.2014 06:03 # 0
Формула есть a/b
bormand 22.07.2014 06:54 # 0
kegdan 22.07.2014 06:57 # 0
kegdan 22.07.2014 10:50 # 0
defecate-plusplus 22.07.2014 11:03 # 0
на брейнбенче даже нет
bormand 22.07.2014 12:50 # +1
Ну а типичный junior level, если мне не изменяет память, это умение решать небольшие четко сформулированные задачи. Т.е. если тебе, к примеру, поставят задачку - прочитать конфиг, распарсить его и представить в виде таких-то ADT, и ты за разумное время справишься с этим с помощью гугла, коллег и какой-то матери - ты полноценный хаскелист-джуниор :P
kegdan 22.07.2014 12:54 # 0
roman-kashitsyn 22.07.2014 12:55 # +2
Садись, два.
kegdan 22.07.2014 13:06 # 0
bormand 22.07.2014 13:27 # +1
Прошел тест @ поднял ЧСВ.
kegdan 22.07.2014 14:07 # 0
ADT на моей памяти это еще alternating decision tree
roman-kashitsyn 22.07.2014 14:09 # 0
kegdan 22.07.2014 14:14 # +1
roman-kashitsyn 22.07.2014 14:41 # +2
я не господь, я только учусь
kegdan 22.07.2014 14:43 # +2
eth0 22.07.2014 19:41 # 0
guest 22.07.2014 22:27 # 0
guest 22.07.2014 22:27 # 0
kegdan 23.07.2014 06:30 # 0
betking1 27.11.2014 15:46 # 0