-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
10 changed files
with
5,555 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,129 @@ | ||
const std = @import("std"); | ||
const testing = std.testing; | ||
const print = std.debug.print; | ||
const mem = std.mem; | ||
const Allocator = mem.Allocator; | ||
|
||
fn range(comptime n: usize) [n]void { | ||
return [_]void{{}} ** n; | ||
} | ||
|
||
const inf = std.math.maxInt(usize); | ||
|
||
const Node = struct { | ||
name: []const u8, | ||
flow_rate: usize, | ||
tunnels: [][]const u8, | ||
allocator: Allocator, | ||
|
||
pub fn deinit(self: *Node) void { | ||
self.allocator.free(self.tunnels); | ||
} | ||
}; | ||
|
||
const Edge = struct { | ||
from: []const u8, | ||
to: []const u8, | ||
}; | ||
|
||
const Network = struct {}; | ||
|
||
fn parse(input: []const u8, allocator: Allocator) !Network { | ||
var flow_rates = std.ArrayList([]const u8).init(allocator); | ||
var node_index = std.StringHashMap(usize).init(allocator); | ||
var edge_list = std.ArrayList(Edge).init(allocator); | ||
|
||
var lines = mem.tokenize(u8, input, "\n"); | ||
while (lines.next()) |line| { | ||
var parts = mem.tokenize(u8, line, " =;,"); | ||
for (range(1)) |_| _ = parts.next(); | ||
const from = parts.next().?; | ||
for (range(3)) |_| _ = parts.next(); | ||
const flow_rate = try std.fmt.parseInt(usize, parts.next().?, 10); | ||
for (range(4)) |_| _ = parts.next(); | ||
const index = flow_rates.items.len; | ||
try flow_rates.append(flow_rate); | ||
try node_index.put(from, index); | ||
while (parts.next()) |to| try edge_list.put(.{ .from = from, .to = to }); | ||
} | ||
|
||
// Create the adjacency matrix | ||
const size = flow_rates.items.len; | ||
var dist = allocator.alloc([]usize, size); | ||
|
||
{ | ||
var i: usize = 0; | ||
while (i < size) : (i += 1) { | ||
dist[i] = allocator.alloc(usize, size); | ||
var j: usize = 0; | ||
while (j < size) : (j += 1) { | ||
dist[i][j] = inf; | ||
} | ||
} | ||
} | ||
|
||
// Set the initial weights | ||
for (edge_list.items) |edge| { | ||
const i = node_index.get(edge.from).?; | ||
const j = node_index.get(edge.to).?; | ||
dist[i][j] = 1; | ||
} | ||
|
||
// Floyd-Warshall | ||
{ | ||
var k: usize = 0; | ||
while (k < size) : (k += 1) { | ||
var i: usize = 0; | ||
while (i < size) : (i += 1) { | ||
var j: usize = 0; | ||
while (j < size) : (j += 1) { | ||
if (dist[i][j] > dist[i][k] + dist[k][j]) { | ||
dist[i][j] = dist[i][k] + dist[k][j]; | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
{ | ||
var k: usize = 0; | ||
while (k < size) : (k += 1) { | ||
var i: usize = 0; | ||
while (i < size) : (i += 1) { | ||
var j: usize = 0; | ||
var a = node_index.get() | ||
var | ||
_ = j; | ||
} | ||
} | ||
} | ||
|
||
return .{}; | ||
} | ||
|
||
fn part1(input: []const u8, allocator: Allocator) !usize { | ||
var arena = std.heap.ArenaAllocator.init(allocator); | ||
defer arena.deinit(); | ||
|
||
_ = try parse(input, arena.allocator()); | ||
|
||
return 0; | ||
} | ||
|
||
fn part2(input: []const u8, allocator: Allocator) !usize { | ||
_ = allocator; | ||
_ = input; | ||
return 0; | ||
} | ||
|
||
test "examples" { | ||
const example = @embedFile("example.txt"); | ||
try testing.expectEqual(part1(example, testing.allocator), 0); | ||
try testing.expectEqual(part2(example, testing.allocator), 0); | ||
} | ||
|
||
test "inputs" { | ||
//const input = @embedFile("input.txt"); | ||
//try testing.expectEqual(part1(input, testing.allocator), 0); | ||
//try testing.expectEqual(part2(input, testing.allocator), 0); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
# Day 17 | ||
|
||
After getting truly defeated by day 16, I have returned to carry on with the other puzzles. Tetris is a new one for advent of code, but it's a nice extension from the falling sand day. | ||
|
||
My favourite novelty way to implement tetris is with nothing but big integers and bitwise operations (or regular integers if your grid dimensions will allow). That didn't feel like a good option here, because we don't have a bounded grid, and Zig doesn't natively support anything above `u128`. | ||
|
||
Instead, I decided to use the next best thing. Static bit sets. This also runs into a problem with needing a bounded grid size, but I can tweak the bitset size if it overflows. | ||
|
||
The actual implementation isn't all that interesting, but I would like to spend a moment appreciating Zig's facilities for compile time programming. We've are given a set of tetrominoes and turning them into bitsets imperatively would be awkward and error prone. Instead, I implemented a `blockFromStr` function. | ||
|
||
```zig | ||
const Block = std.bit_set.IntegerBitSet(16); | ||
fn blockFromStr(str: []const u8) Block { | ||
var block = Block.initEmpty(); | ||
var index: usize = 0; | ||
for (str) |c| { | ||
if (c == '\n') continue; | ||
if (c == '#') block.set(index); | ||
index += 1; | ||
} | ||
return block; | ||
} | ||
``` | ||
|
||
There's nothing obvious that signifies that this function is designed to be run at compile time, which is part of what makes the whole `comptime` model great. We could enforce this restriction by using `comptime str: []const u8` but there's no real need to. | ||
|
||
If we call this function from any `comptime` scope (top level const/var assignments are automatically comptime) then the compiler (technically an interpreter inside the compiler) is going to execute this code and embed the result directly into the binary. | ||
|
||
```zig | ||
const block_2 = blockFromStr( | ||
\\.#.. | ||
\\###. | ||
\\.#.. | ||
\\.... | ||
); | ||
``` | ||
|
||
So instead of shipping with a 19 byte string and calling this function on startup, `block_2` begins runtime as a bitset with the appropriate bits set. This isn't a revolutionary use of compile time programming, but it is something I find myself wanting surprisingly often, when I want to express ideas in ways that are friendly for humans, but would involve doing redundant work at runtime | ||
|
||
## Part 2 | ||
I hate these kinds of extrapolation extensions in Advent of Code. I do these puzzles because I enjoy learning to program in different programming languages, and most of the fun is learning. These kinds of puzzles take all of the interest away from the implementation and force you to spend more of your time doing abstract thinking instead. | ||
|
||
For what it's worth, it's got to be |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
main.zig:251:9: error: expected type 'void', found '@typeInfo(@typeInfo(@TypeOf(main.part2)).Fn.return_type.?).ErrorUnion.error_set' | ||
_ = try part2(example); | ||
^~~~~~~~~~~~~~~~~~ | ||
main.zig:249:15: note: function cannot return an error | ||
pub fn main() void { | ||
^~~~ | ||
referenced by: | ||
comptime_0: /opt/homebrew/Cellar/zig/HEAD-f68bfe2/lib/zig/std/start.zig:59:50 | ||
remaining reference traces hidden; use '-freference-trace' to see all reference traces | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
>>><<><>><<<>><>>><<<>>><<<><<<>><>><<>> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
>><<<>>>><<<>><>>>><<>>><<<<>><<<<><<<><<<>><<>>><<<<><>>>><<<>>><<>>>><<>>>><>>>><<><<<>><>><<<<>><<<<>>><<>><<>>>><<<<>>>><<>><<<>>><<<<>><><>>><<<<><<>>>><<>>><><<>><<<<>>><<<<>>><<<<><>>><<<>>>><<>>>><<>><<<>><<<><<<>><<>><<><<<><<>>>><<<<><<<<>>>><>><<<><>><<>>><<<<>><><<>><<<>>><<>>>><>>>><<>><><<<>><<<<><<<>><<<><<<<>><<>>>><<><<<>>>><<<<>>>><<><<<<>><>>>><>><<<>>>><<<>><>>><>>><<>>>><<<<>>>><<<<>>><<>>>><<<<>>><<>>>><<<>>>><<><<><>><>><<<<><<<<>><><>><<<<><>><<<>><<<>>><>>>><<<<>>><<>>><<<>><<<><>>>><<>>><<<<>>>><><<<>><>><<><<<<><><<<><<<<>>>><>>>><><<>>>><>>>><<<<>>><<<>><<<>>><<<<>>>><<<<>>><<<>>>><<<<><<>>>><<><<<<>><<<><<>>><<<>>><<>>>><>>>><>>><><>>><>>>><>>>><><>>>><>><>>>><<<>><<<<><<><<<<><<>><<>><<>>><<>><>>><>><<<>>><<<>>>><>>><>><<<<><<<>>><>>><><<>><>><<<<>>>><><<<>><<<<>><<>>><<>>><>>>><<<<>><<><><<>>>><<<>>>><<>>><<><<><<>>><<><<<><<>><<>><<><<<<>>><<>>>><<>>><<<>><<<<>><<<>><<>><<>><<<><>><<><<<>>>><<<<>>><>><>>>><<<<><<>>>><><<<><<>><<>>>><>><<<>>><<><<>>><>>>><<>>><>>><<<<>>><<<>><<<<><<<><<<<><<<<>><<<<>>><<<<>>><<<<><>>>><<<>>><<><<>>>><<>>><>><<>><><<<>>>><<>><>>>><<<><>>><<<<>><<<<>>>><<<<>><<<<>><>><<<<>>><<<>>><<<>>>><<>><<<<>><<<<>>><<><<<><<<<>>><<<<>>><><<><<>>><<<<>><>>><>>><<<><<<>>><<<>>>><<>>><><<>>><<<>><<>><<<<><<><<<<>><<<<>><><<<>>><<>><<<<><<<>>><>>>><<>>>><>>>><<<<>><>>><>><<>><<<><<>><<><<<<>><<<<>>><<<><<<<>>><<<<>>><<<>><<>>><<<>><<<<><<<>>><<>>><<><>>>><<<><<<>>><<<<>>><<<<>><<><<<<><<<>>><<>>>><<<>>><<>>>><>>>><<><<><>>><<<>>><<<<>>><<>>><<<<><>>>><<<<><<<>><<<<>>><>>><<<>>>><<<<><>><>>><<<<>>><<<><<<>>><>><<><<<<><<>>>><<<<>>><>>>><<<>>>><<<>>>><>>><>>><<<>>>><<<>>>><<<>><<>><<>>>><<<>><<>><><>><>>>><<<><<<<>>><<<<>><<>><<>>><<<>><<<<>>>><<<<>>>><>>>><<>>>><<<<><<<>><<><>>>><>><<<>>><<<>>>><<<<>>>><<>><<<<>>>><<>>>><<<<>><<<>>>><<<><<<><<<<>>>><>><<<><<<<><<<<>>>><<>><<<<>>>><<<>>>><<<><>>>><<<>><<<><<>>>><<<<>><<>><<<>><<<>>>><<<>>><>>><<>>>><<<><>>><<<<>><<<><<<><<<<><<>>>><>>><>>>><>><<<><<<><<<>>>><><<><>>>><<<><<>>>><<<>><<<<>>>><<<>>>><>>><>><<<<>>><>><<><<<<>>>><<><><<<><>><<>>>><>>>><<<>>>><<>><<<<><<<><<><<<<>><><<<<><<<>><>><<<<><<<<>><<<>>><<>>>><<>><<<>>>><<>>><<><>>>><<<<><<><<>>>><<<>>>><<><<<>>><>><<<<><>><>><>>><<<<>><<<><<<>>>><<>>>><<>>><<<<>>>><<><<<<>>><<<><><>>><<<<>>><<<<>>>><<<<>>><><<<<><<<><<<<>>>><>>>><>>>><<<<>>><>>>><<<><<<>>><<><<<<><<<>>><<><<<>>>><<>><<><<<>>>><<<>>><<<<><<<>><<<<>>>><>>><<<<><>>><<<<>><<<<>>>><>><<<>>><>><<<<><<<><<<>>>><<<>>>><<<>>>><<<<><>><<<<><<<<><<>>><<<<>>><<<>>>><<<>>>><<>>><<<<><<<<>>>><<<>>>><<<>>>><>>><<<><<<<><>><<>>><<<>>>><<><>>><<<<><<><<>>><<>>>><>>><>>>><<>>>><<>>>><<<<>><<>>><<>>><<<><<>>>><<>>>><<<>>>><>>>><<>>><><<>>><<<>><<<>><<<><<<<>><<<><<<<><>><>>>><<>><<<>><>>><<>>>><<>>><><<<>>>><<<><>>>><<<<>><<<>>>><<<<>>><<<>>>><<>><<>><<>>>><<>>>><><<<><<<<>><<>>>><<<<>><>>>><<>>><<<>>><<>><>>>><<<>>><<<><<><<<<><><<><<<<>><<>><<>>>><><>>>><>>>><<<<>><<<>>><<<<>>>><<>><<<<>>>><<<<><<<><<<<>><>><><<<<><<<>>><<><>>><><<<<>>><<>><><<<<>>><<<<><><<<<><<<>>><><>>>><<<>><<<<>>>><<<>>>><<>>><>>>><>><>><><<<>>>><<><><>><<>><<<<>>><<<<>>><<<>>>><<<<>><<>><<<<><>>><>>><>><<>>>><>>>><<<<>><<>>><<<<><<<>>><<<<>><>>><<>>>><<<>>><>>><<>><<<>>>><<<>>><<><><<<>>>><<<>>>><<<<>>>><<<>>><<<>>>><<>>>><<>><<<>>><<<<>><<<>>>><<>><<<>>>><<<>><><<<>><<><>>>><<<<>><>>>><>><>><<>>><><<><>><<<<>><<<>><<>>>><<<<>><><<>>><<<<><<<><>>><<<>>>><<><<>><>>><<<<>>>><<><<<>><<<><<>>><<<<><<<<>><<<<>>>><><<>>>><<<>>><<<>>><>><>>><<<>>><>>><><<<<>>><<<<>>>><<><>><><<><<<<>>><<<<>>>><<<<>>>><<<<>><<<><>>><<<>><<<<>>>><>>><<<>><>>>><<<><<>>><<<<><<<>>><<>>>><<><<<>>>><<<>><>>>><<>>>><>>><<<<>><<><<<>><<<>>>><<><>><<>>>><<<<>>><<<<>>><<<<>><>>>><<<<>>><<>><<<<>>><<<>>>><>>><<>>><<<<>><<<><<<<>>>><<<><<><>>>><>>>><<<<>><<<>>><>><<<<>>><><<>>>><<>>><><<>>><><<>><<><<>><<<<><<<<>>><<>><<>>><>><>><<>>><<><<>><<>><<<>>><<>>><<>><<>>>><><<<<>><<<<>>>><<<>><>><<<><<><>>>><<<<>>>><>><<<<>><><>>><<><<<<><<<>>><<<>><<>>><>>><<>>>><<<>><<<><<>>>><<<>>><<<<>>>><<<<>>>><<<>><<<<><>>><<<<>>><>>>><<<<>>><<<>>><<<>><<>>>><<>><<<<>>><<>><<<>>><<<<>><<<><<>>>><<<>><<<<><>>><<<>>>><<>>><<>><<><<<>>>><<<>>><<>><<<>>><<<<>>><<<>><><<<<>><><<<>>>><><<<>>><<>>><<>><<>><<<<><<<<>>>><<><<<>>>><<<>><<>>><<<>>>><><<<>><<>>>><<<<><<<>><<>><<<<>><<><<>>><>>><<<><<<<>>><<<>><<<<>><>><<<>>><<<<><<<<><<<>>><<<<>>><<>>>><<>><<<<><<>><>>><<>>>><>>>><<><<<>>>><<<>>><><<>>>><<<<>><<<>>><><<>>>><<><<<>>>><<<>><<<>>>><><<<><<>>>><<<>><>>><><><<<<>><<>><>>><<<<>>><<><<><<<><<<>>><<<>><<<>><<<>><<>>><>>><<<<><<<<>>>><<><<<><<<<><<<<><<<>><>>><<<>>><<<><<<>>><>>>><<>>>><>>><<<<><<<<>>><<<>><<<>><>>>><<<>><<<<>>>><<<<><>>><>>>><<<<>>>><<<<>><<<>>>><<<>>><<<<>><<<><<<>>>><<>>><<>>><>>>><><>>><<<<>>><<<>>>><>>><<<<>><>>>><<<<>><>>>><>>><><>><<>>>><<><><<><<<>>>><<<<>>><<>>><<<<>><><<<>><>><<<><<>>><<<>>>><<>><<<>>>><<<<>><<>><<<>><<<>>>><<<<>><>><<<><<<<>>>><<>>>><<><<<<><<<><<<<><<<<>><><>>>><<<<><>>>><<<><<<><>>>><<<<>>>><>>>><<<<>>>><<<>><>>>><<>>>><<<>>><>><<>>>><<<<>><<<><<<>><<>>>><<>>><<<<>>><<><<<>>><<<>><<<<>>>><<<<>><<>><>>>><><><>>>><<>>><>>>><<>>>><<<>>>><><<>>><<><><<<><<<><<<>><><<>>><<>>><<<<>>>><>>>><<>><<<<>><<<>>>><<<<>>><<>>><<>><>>><<<<><>>>><<<>>>><<<>>><>>><<><<<>>><>>><<><<<<>><<<>>>><<<>>>><<<<>>><<<<><<<>>>><><><<<<>>>><<<>>>><<<<>>><<<>><<<<><<>><<>><>><>><>><<>><<<><<<<>>><<>>><<>>>><>>>><>>>><<<<>><<<>>>><<<>>><<<<>>><>>>><<<>>><><<><<<<>><<<>>><<>><>><<><<<>><<<<>>>><<<>>><<<<>>><>>>><<<>>><<>><<>><<<<>><<<><<<>>>><<<<>><<<><>>>><<<<>>>><>><>><<>><<<<>>><>>><<>>><<<>>>><<<<>><<<>>>><>>><<<<>>>><>>><<<><<<><<<>>>><>>>><>><<<<><<<>><<<<>><<>><<<>>><<<>>>><<<<><<<>><<>><>><<<>>>><<>>><<><<<<><<<>>>><<<<>>>><<>>>><<<<>>><<<<>><<>><<<<>>>><><<<><<><>>><<<><<<<>>>><><<><>>>><<>><>>><><<<>>><<><<>>><<<<>>><><><<<>>><>><<<><<<<><<<>>>><>>>><>>>><<<>>>><<><<<>>><><><<<<>><<<>>>><<<<>>>><<<<><<>><<<><><>>><>>>><<<>>><<<>><<>><<<>><>><<><>>>><>><<<<><<<<>>>><<<<><<<><<>><>>>><><<<><<<>><<><<>>><<<<>>>><<<>>>><>><>><<>>><<<>><<>>>><>>><<>><<>>>><<>>>><<>>><<<><<<<>>>><>><>>>><<>>><><<<>><>><>>>><<<<>>><<><<<><>><><>>>><<>>><<>>>><<>>><<>>><<<><<<>><<<>><<<><<<>>><><<<>>>><<>><<<><<<<>><<<><>>>><>>><<<><<<<><>>>><<<>>><>>>><<<>>>><<<<>>><>>><<<>>>><<>><><<><<<<>>>><<>><<<<>>>><><>>>><>>><><<<<>>><<><<<<>>><<<<>>>><<<<>><<<<>>>><>><<<<><>>><><<<<>>><<>><>>><<<>><<<<>>><<<<><<>><<>><>>>><<<<>><<<<><<>><>>>><<<>><<<<>>><<>>><<<<>>><<<<><<<<><>>>><<<<>>><<>><<<<>>>><<<<>>>><<<<>>>><<<>>>><<<>>><<<>>>><<<><>><><<<<><<<>>>><>>><<<<><<<<>>><<<<>>>><<<<>><>><<>>><>>>><<>>>><<<><<<>>>><<<>>>><<><>>>><<>><>>>><<>>><<<>>>><<<>><<><>>>><<<<>>>><><<>><<><<<<>>><<<<>>><<<<>>><>>>><<<>><<><<>><<><<<>>><<<<><<<<><<<<><>><<<<>>>><<>>>><<<<><<<>><<>>><><<>><<<>>>><<<<>>><<>>>><>>><<<<><<<<>>>><<>>>><>><><<<<>>><>><<<<>><<<<>><<<>><<>>>><<<>><<<>><<<><<>><<<<>>>><<<<>><<<<><<<<><<>>><<>>><<<<>>>><><>>>><<<><<<>>><>><<<<>>>><<>>>><<>>>><<>><<<><>><<<><<>>>><>><<<<>><>>>><<>><<>>>><>><>>>><><<<<>>><<>>>><<<<>>><>><<>>>><>>><<<><>>><<<><>>>><>>>><<<>><<>>><>><<<<><<<<>><<<>>><<<<>>><<<>><<<>><>><<<<>><<>>>><<>>><<<>>><<<><>>>><<>><>>><<<>>>><<<<>><<<>>>><<<>>>><><<><<<>>><<<<><<>><>>><<>>><<<>>><<>><<<><<<<>><<<<><<>>>><<<<>>>><<<<>>><<<><>>><<>><>><<<><<<>>>><<<>>><<>><<>><<<>>><>>><<<>>>><<<>>><<<>><<<>><>>><<>>><<>>>><<<><<<>>>><<>>><<<<>>>><<<>><>><<<<>>>><<<<>>><<<>><<<><<<>>>><>>><<<>><><<>><<<<>>>><<<><<<><<<>>>><><>>>><<<>><<<>>><<>>>><<><<<>>>><<<<><<>>><<<<>>>><<><>>><<<>>><<<>>>><<<<><<>>><<<<>>>><>>>><<<>><<<<><>>>><<>><<>><<<<><>>><<<><<<<><<<>>>><<<<>>><<>>><>><><>>><<<<><<><<<<>>>><<<<>>><<<><<<><<<><><<>><<<>><<>><>>><<>>><<>><<<>><<<<>>>><<<<>><>>>><<<<><<>>>><>><<<>>><<<>>>><>>><<<><<<<><<<>><<<>><<<<>>>><<>>><<<>>>><<>>>><<<<>>>><<>>>><<>><<<>>>><<<<>>><<<<><<<<>>><<>>>><<<>>>><<>>>><>>><<>>><<<<>><<<<>>><>>><<<<>>><><<<<>>><<<<>>><><><<>>>><<<<>>><<<<>>><>><<<<>><<>>><<<<>><>><<>><<<>>>><<<<>>>><><<>>>><<<<>>><<<>>><>>>><<<<>>><<<>>><<>><<<<>>>><>><>><<<>>><<<>>>><<><<>><<<<><>>><><<<><>>>><>>>><<<>>><<<>>>><<>>>><<<>>><<<>><<><>>>><<<>>>><<><<><>>><<<<><>><<>><><<>>>><<<<>>><>>><>>><<>>><<<<><>>><>>><>><<<<>><><<<<>>>><<<>>><<>>>><<>>><<<<><<><<<><<<>>>><<<>>>><<<<>>><<<>>><<<<>><>>><<>><>>>><<<<><>><<>>>><<>>>><<<>>><<<<>>>><<>>>><<><<<><<<<>>>><<>>>><<<><<<>>>><<<>>><<<<>><<<>>><<<>><<>><<<<>><<<>>>><<>>>><<<<>>>><<><>>><<>><<<>>><<<>>>><<<<>><<><<<<>><>>>><<>>>><>><<><<>>><><<>><<<<>>><<>>>><<<>>><<>><<>><>><><<><<<><<<<>>><<>>><<><<>>>><<<>><<>><<<>><<>><<<<>><<>>><<>><>>><<>><<>>>><<<<>>>><>><><>>>><>><<>>>><>>><>>>><<<><<<<>><>><>>>><<>>><<<<>>>><<<<>>><<<<>><<>>>><<<<>>><<<>><<<>>>><>>>><<>>><<>>>><>><<<<>>><><<<>>>><<<>><>>><<<<><><<>><<>>>><>>>><<>><><<<>>><>>><<<<>><<>><<<<>><>>><<>>>><<<<>>>><<<<><<<<>>><><<<>>><>><<<>><<<<>><<>>><<<<><<<>>>><<>>><<<<>><>>>><<>>>><<<<>><<<<>><<<>><<<<>>><>>>><<>><<><>><>>><<>>>><<<>>><<<>>><>>><>>><<<>><<<><<><<<<>><<><>>><>>><<<>>><<<>>><>>><<<<>>><<>><<<>>>><<<>>><<<<>>>><<<<>>><><<<>><>>><<<>>>><<>>>><<><>><<>><<<>>><><<<>><<>>><<<<>>><>><<<<><><>>><>><>>><>>><<>>>><<<><<<<>>><>>>><<>><>><<<<>><<<>>><<>>>><<>>>><><<>>><<<><<<<>><<>>>><>>>><<<>>><<>>><<>><<>>>><<<>>>><<<<>><<<><<<>>>><<<<>>>><<<<>>><><<>>><>><><<<<>>>><<<<><<>>>><>>>><<<<>><<<>><<<>>><><<<<><<<<><<<<><<<>>><<<<><<<<>>>><<><<><<<>>>><>>>><>><<<<>>><>>><<<<>>>><>>><<<<>><<><<<<>>>><<<<><<<<>>>><<<>>><><<<<>>>><<<<><<><<<<>><><<><>>><>><<<<>>><<<<>>><<<<><>>>><<>>>><<<<>>>><<<>><<><<>><<>>><<>>>><<<>><>>><<><<<<><<<><<<>><<><>>><>>><<<>>>><<<<>>><>>><<>>><>><<<<><<<>>><<>>>><<<>><<<>>>><<<<>>>><<<<>>>><<<>><>>><<<>><<><<<<>><<>><<>><<>>><><<<>><<<<>>>><<>>><<>>>><<><<>>>><>>><<<><><<>>>><>>><>>><><<><<><<<>><<<>><<<<>><><<<<>>>><<>><<>>><<>>><>>><>><<<<>>><>><>><<<><<<>>>><<<<>><<<>>><<<><<<><<<<>>><>>><>>>><<><<<<>><<><<>><>>><<<>><<>>>><<<<>>><<>>>><<><<<<>><>>>><<<<>><>>>><<<<><<>>><<<>>>><<<><<<>>>><<><<<>><<>><<>><<<>><<<>><>>>><<<>>>><>>><<<<>>>><<><><<>><<<<><>>><<<<>><<<><>>>><><<<<>>><<<><<<>>>><<<<>>><<<<>>><<<>>><<<<>><><<<>>><<>>><><<<<>>><<>>><<<<><<<<>><<>>><>>>><<<><<>><<<<>>>><<<<>>><<<<>><><<>>><<<<>>>><<>>><<<<><<><>>>><<<<>>>> |
Oops, something went wrong.