42 lines
1.0 KiB
Zig
42 lines
1.0 KiB
Zig
const std = @import("std");
|
|
const print = std.debug.print;
|
|
|
|
const max_pairs = 256;
|
|
|
|
pub fn is_balanced(buf: []u8) bool {
|
|
var count: usize = 0;
|
|
for (buf) |ch| switch (ch) {
|
|
'[' => count += 1,
|
|
']' => {
|
|
if (count == 0) return false;
|
|
count -= 1;
|
|
},
|
|
else => return false,
|
|
};
|
|
return count == 0;
|
|
}
|
|
|
|
pub fn main() !void {
|
|
for (0..10) |n_pairs| {
|
|
if (n_pairs > max_pairs)
|
|
return error.MaximumNumberOfPairsExceded;
|
|
|
|
var buf: [2 * max_pairs]u8 = undefined;
|
|
for (0..n_pairs) |i| buf[i] = '[';
|
|
for (n_pairs..n_pairs * 2) |i| buf[i] = ']';
|
|
|
|
const rand = std.crypto.random;
|
|
const len = n_pairs * 2;
|
|
const reps = 2;
|
|
for (0..len * reps) |i_rep| {
|
|
const i = i_rep % len;
|
|
const j = rand.int(usize) % len;
|
|
const temp = buf[i];
|
|
buf[i] = buf[j];
|
|
buf[j] = temp;
|
|
}
|
|
const s = buf[0..len];
|
|
print("'{s}': {}\n", .{ s, is_balanced(s) });
|
|
}
|
|
}
|