- 1
- 2
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+138
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
+133
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
+132
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
+135
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
+133
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
+78
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
+133
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
Участник, прошу тебя: не поленись, пройди по анкетам и поставь всем минусы.
Минуисуя участников, ты помогаешш обществу снижать ЧСВ.
+133
ADMIN LOH
+128
static readonly Regex binary = new Regex("^[01]{1,32}$", RegexOptions.Compiled);
static void Main() {
Test("");
Test("01101");
Test("123");
Test("0110101101010110101010101010001010100011010100101010");
}
static void Test(string s) {
if (binary.IsMatch(s)) {
Console.WriteLine(Convert.ToInt32(s, 2));
} else {
Console.WriteLine("invalid: " + s);
}
}
http://stackoverflow.com/questions/1271562/binary-string-to-integer
Мучает вопрос. Зачем ставить регулярку? Почему бы просто не словить FormatExeption?
+97
{$APPTYPE CONSOLE} {$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
uses SysUtils, Classes, IniFiles, Variants;
type TGetToken = function(var p: pointer): LongInt;
procedure ParseData(var p: pointer; isKey: boolean); forward;
procedure AdvanceIndex(var i: LongInt); forward;
function GetIntegerToken(var p: pointer): LongInt;
var value: LongInt = 0;
negative: boolean;
begin
Inc(p);
negative := PByte(p)^ = ord('-');
if negative then Inc(p);
repeat
value := value * 10 + LongInt(PByte(p)^ - $30);
Inc(p)
until PChar(p)^ = 'e';
Inc(p);
if negative then value := - value;
Result := value
end;
function GetListToken(var p: pointer): LongInt;
var index: Integer = 0;
begin
Inc(p);
while PChar(p)^ <> 'e' do begin
AdvanceIndex(index);
ParseData(p, false);
end;
Inc(p);
Result := -1
end;
function GetDictToken(var p: pointer): LongInt;
begin
Inc(p);
while PChar(p)^ <> 'e' do begin
ParseData(p, true);
ParseData(p, false);
end;
Inc(p);
Result := -1
end;
function ParseError(var p: pointer): LongInt;
begin
Writeln('TYIIINTE CBET');
Result := -1;
Halt(Result)
end;
const FuncTable: array[0..3] of TGetToken = (ParseError, GetDictToken, GetIntegerToken, GetListToken);
function GetStringToken(var p: pointer): string;
var value: ShortString;
length: LongInt = 0;
begin
repeat
length := length * 10 + LongInt(PByte(p)^ - $30);
Inc(p)
until PChar(p)^ = ':';
if length in [1..255] then begin
PByte(p)^ := length;
Move(p^, value, length+1);
Result := value;
end else Result := 'BINARY DATA';
Inc(p, length + 1);
end;
var sl: TStringList;
outf: TIniFile;
procedure AdvanceIndex(var i: LongInt);
begin
sl.Add(IntToStr(i));
Inc(i);
end;
type TSaveData = procedure(value: Variant);
procedure SaveData(value: Variant);
var
key: string = '';
i: LongInt;
begin
for i := 0 to sl.Count - 1 do key := key + '.' + sl[i];
Delete(key, 1, 1);
outf.WriteString('Torrent', key, VarToStr(value));
if sl.Count > 0 then sl.Delete(sl.Count - 1);
end;
procedure PushKey(value: Variant);
begin
sl.Add(value)
end;
procedure PopKey(value: Variant);
begin
if sl.Count > 0 then sl.Delete(sl.Count - 1);
end;
procedure NOP(value: Variant);
begin
end;
const SaveDataTable: array[0..3] of TSaveData = (SaveData, PushKey, PopKey, NOP);
procedure ParseData(var p: pointer; isKey: boolean);
var
OpCode: ShortInt;
value: Variant;
begin
OpCode := PByte(p)^;
if OpCode >= $60 then value := FuncTable[OpCode shr 2 and 3](p)
else if Opcode in [$30..$39] then value := GetStringToken(p)
else ParseError(p);
SaveDataTable[ord(isKey) + 2*ord(chr(OpCode) in ['d', 'l'])](value);
end;
var f: TFileStream;
s: LongInt;
p, cp: pointer;
begin
if ParamCount <> 1 then Writeln('Usage: ', ParamStr(0), ' filename.torrent')
else
try
f := TFileStream.Create(ParamStr(1), fmOpenRead);
s:= f.Size;
GetMem(p, s + 1);
f.ReadBuffer(p^, s);
cp := p;
outf := TIniFile.Create(ChangeFileExt(ParamStr(1), '.ini'));
sl := TStringList.Create;
ParseData(cp, false);
finally
if sl <> nil then sl.Destroy();
if outf <> nil then outf.Destroy();
if p <> nil then FreeMem(p);
if f <> nil then f.Destroy()
end
end.