- 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;
Видимо, нужна какая-то мат. формула, но я в этом не силен.
Если на непрерывность кусков похрену - можешь рассеивать строки по файлам по кругу. Прочитал строку, засунул в первый файл, прочитал вторую - засунул во второй и т.п.
А если куски нужны непрерывные - придется первым проходом прочесть файл и посчитать строки. Затем поделить это количество на количество файлов. Ну и вторым проходом переписывать по столько строк в каждый файл (последнему может достаться до N-1 лишних строк).
Как-то так.
Берём размер файла, считаем размер блока ChunkSize = FileSize / N. Устанавливаем текущую позицию на 0.
Формируем список кусков: запоминаем текущую позицию, прыгаем на ChunkSize вперёд и ищем до первого '\n'. Так получаем очередной кусок, записываем его в отдельный файл.
Такой подход не особо хорошо работает в вырожденных случаях, но если типичный кейс - много строк примерно одинаковой длины, то самое оно. Дёшево и сердито.
выделяем узлы [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) в обе стороны
код на выброс
Я вот так сделал, правильно?
Безысходность...
Формула есть a/b
на брейнбенче даже нет
Ну а типичный junior level, если мне не изменяет память, это умение решать небольшие четко сформулированные задачи. Т.е. если тебе, к примеру, поставят задачку - прочитать конфиг, распарсить его и представить в виде таких-то ADT, и ты за разумное время справишься с этим с помощью гугла, коллег и какой-то матери - ты полноценный хаскелист-джуниор :P
Садись, два.
Прошел тест @ поднял ЧСВ.
ADT на моей памяти это еще alternating decision tree
я не господь, я только учусь