master
1const std = @import("std");
2const io = std.io;
3const fmt = std.fmt;
4
5const BitCount = struct {
6 zeros: u16,
7 ones: u16,
8};
9
10const rll = 12;
11
12pub fn main() !void {
13 const stdin = io.getStdIn().reader();
14
15 var buf: [128]u8 = undefined;
16 var sum: [rll]BitCount = undefined;
17 for (sum) |_,i| {
18 sum[i] = BitCount{
19 .zeros = 0,
20 .ones = 0,
21 };
22 }
23
24 // Read from stdin, line by line
25 // TODO: sense rll to work with example or source input
26 while (try stdin.readUntilDelimiterOrEof(&buf, '\n')) |line| {
27 for (line) |char, i| {
28 if (char == '1') {
29 sum[i].ones += 1;
30 } else if (char == '0') {
31 sum[i].zeros += 1;
32 } else {
33 std.debug.print("PARSING ERROR: 0x{d}", .{char});
34 }
35 }
36 }
37 var gamma_binary: [rll]u8 = undefined;
38 var epsilon_binary: [rll]u8 = undefined;
39 for (sum) |_,i| {
40 if (sum[i].zeros > sum[i].ones){
41 gamma_binary[i] = '0';
42 epsilon_binary[i] = '1';
43 } else {
44 gamma_binary[i] = '1';
45 epsilon_binary[i] = '0';
46 }
47 }
48 const gamma = fmt.parseUnsigned(u32, gamma_binary[0..gamma_binary.len], 2) catch |err| {
49 std.debug.print("PARSE ERR: {} {s}\n", .{ err, gamma_binary });
50 return err;
51 };
52 const epsilon = fmt.parseUnsigned(u32, epsilon_binary[0..epsilon_binary.len], 2) catch |err| {
53 std.debug.print("PARSE ERR: {} {s}\n", .{ err, gamma_binary });
54 return err;
55 };
56 std.debug.print("gamma: 0b{s} {d}\n", .{gamma_binary, gamma});
57 std.debug.print("epsilon: 0b{s} {d}\n", .{epsilon_binary, epsilon});
58 std.debug.print("power: {d}\n", .{epsilon * gamma});
59}