55 lines
991 B
ObjectPascal
55 lines
991 B
ObjectPascal
|
PROGRAM diagnostics;
|
||
|
|
||
|
TYPE
|
||
|
vector = array [0..11] of integer;
|
||
|
|
||
|
VAR
|
||
|
filein : text;
|
||
|
mychar : char;
|
||
|
column, rows, i, gamma, epsilon : integer;
|
||
|
counts : vector;
|
||
|
|
||
|
BEGIN
|
||
|
column := 0;
|
||
|
rows := 0;
|
||
|
gamma := 0;
|
||
|
epsilon := 0;
|
||
|
|
||
|
for i := 0 to 11 do
|
||
|
counts[i] := 0;
|
||
|
|
||
|
assign(filein, 'input');
|
||
|
reset(filein);
|
||
|
repeat
|
||
|
begin
|
||
|
(* Keeping track of the total number of lines in the file *)
|
||
|
if(column = 0) then
|
||
|
rows := rows + 1;
|
||
|
|
||
|
read(filein, mychar);
|
||
|
|
||
|
if(mychar = '1') then
|
||
|
counts[column] := counts[column] + 1;
|
||
|
|
||
|
(* The mod 13 is not mod 12 because the newline
|
||
|
characher is also getting looped over. *)
|
||
|
column := (column + 1) mod 13;
|
||
|
end;
|
||
|
until eof(filein);
|
||
|
close(filein);
|
||
|
|
||
|
for i := 0 to 11 do begin
|
||
|
gamma := gamma shl 1;
|
||
|
epsilon := epsilon shl 1;
|
||
|
|
||
|
if(counts[i] > rows - counts[i]) then
|
||
|
gamma := gamma or 1
|
||
|
else
|
||
|
epsilon := epsilon or 1;
|
||
|
end;
|
||
|
|
||
|
writeln('gamma: ', gamma, ', epsilon: ', epsilon, ', power consumption: ', gamma * epsilon);
|
||
|
END.
|
||
|
|
||
|
|