This commit is contained in:
jonathan santis
2024-12-24 13:22:11 +01:00
commit 2de218f9c2
44 changed files with 5398 additions and 0 deletions

171
src/day2.zig Normal file
View File

@@ -0,0 +1,171 @@
const std = @import("std");
const print = std.debug.print;
var data : [1024][20]i32 = undefined;
var data_len : [1024]u32 = undefined;
var res:u32=0;
var res2:u32=0;
const dir = enum {zero,up,down};
var data_size : u32 = 0;
var direction = dir.zero;
var safe : bool = true;
var safe_rep : u32 = 0;
var safe_no_dump : u32 = 0;
//const e_data = data[0..data_size];
var temp : i32 = 0;
var legit : bool = false;
var instance_unsafe : u32 = 0;
pub fn main() !void {
_ = try readFile();
const e_data = data[0..data_size];
const e_data_len = data_len[0..data_size];
for(e_data,e_data_len) | row,len |
{
print("[main]len:{}\n",.{len});
const row2 = row[0..len];
if(checkLevel(row2) > 0)
{
safe_no_dump += 1;
for(1..len) | i |
{
print("\x1B[0m",.{});
const row1 = try rmNum(&row,len,i);
print("rmRow: {d}\n",.{row1});
print("remove level {}\n",.{i-1});
if(checkLevel(row1)>0)
{
print("still unsafe ",.{});
}
else
{
print("now safe ",.{});
safe_rep += 1;
break;
}
}
}
else
{
safe_rep += 1;
}
}
print("Data_size: {}\n",.{data_size});
std.debug.print("safe reports: {}\nsafe rep without dump:{}\n",.{safe_rep,safe_no_dump});
}
fn rmNum(slice : [] const i32,len : u32,pos : usize) ![]i32
{
var str = try std.heap.page_allocator.alloc(i32,len);
print("len rm: {}, slicelen: {}\n",.{len,slice.len});
for(slice,0..) | num, i |
{
if(i > len-1)
{
break;
}
if(num == 0) break;
if(i < pos)
{
str[i] = num;
}
else
{
str[i-1] = num;
}
}
const sl2 = str[0..len-1];
return sl2;
}
fn checkLevel(slice : [] const i32) u8
{
direction = dir.zero;
legit = false;
print("slice: {d}, len {}\n",.{slice,slice.len});
for(slice,0..) | num,ii |
{
if(ii < slice.len-1 )
{
if(num == slice[ii+1])
{
std.debug.print("\x1B[31mequal1\n",.{});
return 1;
}
if(direction == dir.zero and num > slice[ii+1])
{
direction = dir.down;
}
if(direction == dir.zero and num < slice[ii+1])
{
direction = dir.up;
}
if(direction == dir.down and num < slice[ii+1])
{
std.debug.print("\x1B[31mexit2\n",.{});
return 2;
}
if(direction == dir.up and num > slice[ii+1])
{
std.debug.print("\x1B[31mexit3\n direction : {}\n num :{} > {}, index: {}\n",.{direction,num,slice[ii+1],ii});
return 3;
}
//temp = @intCast(num);
if(@abs(num - slice[ii+1]) < 1 or @abs(num - slice[ii+1]) > 3)
{
std.debug.print("\x1B[31mexit4 num: {} slice[ii+1]: {}, full slice {d}, index: {}\n,",.{num,slice[ii+1],slice,ii});
return 4;
}
}
}
print("\x1B[0m",.{});
return 0;
}
fn readFile() !void
{
const file = try std.fs.cwd().openFile("day2-1.txt",.{});
defer file.close();
var buf_reader = std.io.bufferedReader(file.reader());
var in_stream = buf_reader.reader();
var buf: [1024*5]u8 = undefined;
var index : u32 = 0;
var row : u32 = 0;
while(try in_stream.readUntilDelimiterOrEof(&buf,'\n')) | line |
{
var it = std.mem.split(u8,line," ");
while (it.next()) |word|
{
if(std.mem.eql(u8,word,"\n")==false)
{
if(std.mem.eql(u8,word," ")==false)
{
data[row][index] = try std.fmt.parseInt(i32,word,10);
index += 1;
}
}
else
{
data_len[row] = index;
row += 1;
index = 0;
}
}
data_len[row] = index;
index = 0;
row += 1;
}
data_size = row;
}

204
src/day3-2.zig Normal file
View File

@@ -0,0 +1,204 @@
const std = @import("std");
const print = std.debug.print;
var buffer : [22048]u8 = undefined;
pub fn main() !void
{
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const allocator = arena.allocator();
const read_bytes = try readFile("day3.txt");
const pattern = "mul(";
var slice :[]u8= undefined;
var slice2 :[]u8= undefined;
slice2 = buffer[0..read_bytes];
var mulresult : u64 = 0;
var count : u64 = 0;
var endpos : usize = 0;
//var buf : [10]u8 = undefined;
while(slice2.len != 0) : (count += 1)
{
print("slice2: {}\n",.{slice2.len});
while(true)
{
var do = std.mem.indexOf(u8,slice2,"do()");
if(count == 0)
{
do = 0;
}
const dont = std.mem.indexOf(u8,slice2,"don't()");
if(do == null and dont == null)
{
print("last line\n",.{});
std.posix.exit(1);
break;
}
if(do) | do2 |
{
if(dont) | dont2 |
{
if(dont2 > do2)
{
print("endpos{s} ,endpos{d}\n",.{buffer[endpos..endpos+5],endpos});
slice2 = slice2[do2..dont2];
endpos = endpos + dont2 + 7; //absolute pos in buffer
break;
}
else
{
endpos = endpos + dont2 + 7;
slice2 = buffer[endpos..];
print("endpos{s} ,endpos{d}\n",.{buffer[endpos..endpos+5],endpos});
}
}
else
{
//slice2 = slice2[do2..];
print("last line\n",.{});
std.posix.exit(1);
break;
}
}
}
slice = slice2;
while(slice.len != 0)
{
//_ = try std.io.getStdIn().reader().readUntilDelimiterOrEof(buf[0..],'\n');
const first = std.mem.indexOf(u8,slice,pattern);
var index2 : usize = 0;
if(first) | index |
{
var num :u64 = 0;
const len = try getNum(allocator,slice,index + pattern.len,&num);
if(len > 0)
{
if(slice[index + pattern.len + len] == ',')
{
var num2 : u64 = 0;
const len2 = try getNum(allocator,slice,index + pattern.len + len + 1,&num2);
if(len2 > 0)
{
//print("num2: {}\n",.{num2});
index2 = index + pattern.len + len + len2 + 1;
if(slice[index2] == ')')
{
mulresult = mulresult + (num * num2);
if(num > 999 or num2 > 999)
{
print("error invalid data to loong number",.{});
std.posix.exit(1);
}
print("{s}({d},{d})\nmulresult: {d}\n",.{pattern,num,num2,mulresult});
}
else
{
index2 = index + 1;
}
}
}
else
{
index2 = index + 1;
}
}
else
{
print("len: {}\n slice: {s}\n endpos{s}\n",.{len,slice,buffer[endpos-5..endpos]});
}
if(slice.len > index2)
{
slice = slice[index2..];
//print("slice len: {} \nindex2:{}\n",.{slice.len,index2});
}
else
{
break;
}
}
else
{
break;
}
//print("do: {?}, dont(): {?}\nslice.len:{}\n,index2:\n",.{do,dont,slice.len});
}
slice2 = buffer[endpos..];
}
print("add up muls: {d}\nreadBytes from File: {d}",.{mulresult,read_bytes});
}
fn getNum(allocator : std.mem.Allocator,buf : []u8,first : usize,parsed : *u64) !usize
{
var result : []u8 = try allocator.alloc(u8,0);
var i: u64 = first;
if(i >= buf.len - 1)
{
return 0;
}
while(isNumber(buf[i]) == true) : ( i += 1)
{
//_ = try std.fmt.bufPrint(&result,"{s}{}",.{temp,buf[i]});
result = try std.fmt.allocPrint(allocator,"{s}{c}",.{result,buf[i]});
if(i >= buf.len-1)
{
return 0;
}
}
print("\n{s}\nlen: {}",.{result,result.len});
if(result.len > 0)
{
parsed.* = try std.fmt.parseUnsigned(u64,result,10);
}
else
{
return 0;
}
defer allocator.free(result);
return result.len;
}
fn isNumber(number : u8) bool
{
const numbers = [10]u8{'0','1','2','3','4','5','6','7','8','9'};
for(numbers) | nbr |
{
if(number == nbr)
{
return true;
}
}
return false;
}
fn readFile(filename : [] const u8) !usize
{
const file = try std.fs.cwd().openFile(filename,.{});
defer file.close();
const bytes_read = try file.readAll(&buffer);
return bytes_read;
}
test "search substring"
{
const pos = std.mem.indexOf(u8,"abcde","ded");
print("Pos: {?}",.{pos});
}

142
src/day3.zig Normal file
View File

@@ -0,0 +1,142 @@
const std = @import("std");
const print = std.debug.print;
var buffer : [22048]u8 = undefined;
pub fn main() !void
{
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const allocator = arena.allocator();
const read_bytes = try readFile("day3.txt");
const pattern = "mul(";
var slice :[]u8= undefined;
slice = buffer[0..read_bytes];
var mulresult : u64 = 0;
//var buf : [10]u8 = undefined;
while(slice.len != 0)
{
//index2 = 0;
//_ = try std.io.getStdIn().reader().readUntilDelimiterOrEof(buf[0..],'\n');
const first = std.mem.indexOf(u8,slice,pattern);
var index2 : usize = 0;
if(first) | index |
{
var num :u64 = 0;
const len = try getNum(allocator,slice,index + pattern.len,&num);
if(len > 0)
{
if(slice[index + pattern.len + len] == ',')
{
var num2 : u64 = 0;
const len2 = try getNum(allocator,slice,index + pattern.len + len + 1,&num2);
if(len2 > 0)
{
//print("num2: {}\n",.{num2});
index2 = index + pattern.len + len + len2 + 1;
if(slice[index2] == ')')
{
mulresult = mulresult + (num * num2);
if(num > 999 or num2 > 999)
{
print("error invalid data to loong number",.{});
std.posix.exit(1);
}
print("{s}({d},{d})\nmulresult: {d}\n",.{pattern,num,num2,mulresult});
}
else
{
index2 = index + 1;
}
}
}
else
{
index2 = index + 1;
print("should be , but is: {c}\nindex2 = {}\n",.{slice[index + pattern.len + len],index2});
}
}
if(slice.len > index2)
{
slice = slice[index2..];
//print("slice len: {} \nindex2:{}\n",.{slice.len,index2});
}
else
{
break;
}
}
else
{
break;
}
}
print("add up muls: {d}\nreadBytes from File: {d}",.{mulresult,read_bytes});
}
fn getNum(allocator : std.mem.Allocator,buf : []u8,first : usize,parsed : *u64) !usize
{
var result : []u8 = try allocator.alloc(u8,0);
var i: u64 = first;
if(i >= buf.len - 1)
{
return 0;
}
while(isNumber(buf[i]) == true) : ( i += 1)
{
//_ = try std.fmt.bufPrint(&result,"{s}{}",.{temp,buf[i]});
result = try std.fmt.allocPrint(allocator,"{s}{c}",.{result,buf[i]});
if(i >= buf.len-1)
{
return 0;
}
}
print("\n-{s}\nlen: {}",.{result,result.len});
if(result.len > 0)
{
parsed.* = try std.fmt.parseUnsigned(u64,result,10);
}
else
{
return 0;
}
defer allocator.free(result);
return result.len;
}
fn isNumber(number : u8) bool
{
const numbers = [10]u8{'0','1','2','3','4','5','6','7','8','9'};
for(numbers) | nbr |
{
if(number == nbr)
{
return true;
}
}
return false;
}
fn readFile(filename : [] const u8) !usize
{
const file = try std.fs.cwd().openFile(filename,.{});
defer file.close();
const bytes_read = try file.readAll(&buffer);
return bytes_read;
}
test "search substring"
{
const pos = std.mem.indexOf(u8,"abcde","ded");
print("Pos: {?}",.{pos});
}

232
src/day4.zig Normal file
View File

@@ -0,0 +1,232 @@
const std = @import("std");
const print = std.debug.print;
var buffer : [30000]u8 = undefined;
var debugBuffer : [30000]u64 = undefined;
const Dir = enum {leftUp, Up, rightUp, left, right, downLeft, down, downRight};
const GenericError = error{
NoNewlineFound,
HitBoundary,
};
var debugFile : std.fs.File = undefined;
pub fn main() ! void
{
debugFile = try std.fs.cwd().createFile("debug.log",.{});
defer debugFile.close();
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const allocator = arena.allocator();
var absPos : usize = 0;
// var currentPos : usize = 0;
var found : u64 = 0;
var ret : u64 = 0;
const read_bytes = try readFile("day4.txt");
const lineLen = try getLineLen();
for(buffer[0..read_bytes],0..) | _,currentPos |
{
absPos = currentPos;
print("absolute Pos: {}\n",.{absPos});
// if(@mod(currentPos+1,lineLen) != 0 or currentPos == 0)
// {
print("mod: {}\n",.{@mod(currentPos,lineLen)});
//ret = try checkString(allocator,"XMAS",&absPos,lineLen);
ret = try checkForMas(allocator,&absPos,lineLen);
debugBuffer[currentPos] = ret;
found = found + ret;
print("Found: {}\n",.{ret});
//}
}
print("AllFound: {}\n",.{found});
for(debugBuffer[0..read_bytes],0..) | buf,i |
{
if(buf == 0)
{
if(@mod(i,lineLen-1) != 0)
{
print(".",.{});
}
}
else
{
print("{d}",.{buf});
}
if(@mod(i+1,lineLen) == 0)
{
print("\n",.{});
}
}
}
fn checkString(allocator : std.mem.Allocator, pattern : [] const u8,pos : *usize,lineLen : u64) !u64
{
var result : u64 = 0;
const tempPos = pos.*;
inline for (@typeInfo(Dir).Enum.fields) | enu |
{
pos.* = tempPos;
//print("typeof:{s} {}\n",.{enu.name,i});
const slice = move(allocator,@enumFromInt(enu.value),pattern.len-1,pos,lineLen) catch "";
print("pattern: {s} slice {s} {s}\n",.{pattern,slice,enu.name});
if(std.mem.eql(u8,pattern,slice) == true)
{
result +=1;
}
}
return result;
}
fn checkForMas(allocator : std.mem.Allocator,pos : *usize,lineLen : u64) !u64
{
var result : u64 = 0;
const tempPos = pos.*;
pos.* = tempPos;
if(buffer[pos.*] == 'A')
{
const slice = move(allocator,Dir.leftUp,1,pos,lineLen) catch "..";
pos.* = tempPos;
const slice2 = move(allocator,Dir.downRight,1,pos,lineLen) catch "..";
pos.* = tempPos;
const slice3 = move(allocator,Dir.rightUp,1,pos,lineLen) catch "..";
pos.* = tempPos;
const slice4 = move(allocator,Dir.downLeft,1,pos,lineLen) catch "..";
pos.* = tempPos;
print("slice: {s}\n",.{slice});
print("slice2: {s}\n",.{slice2});
print("slice3: {s}\n",.{slice3});
print("slice4: {s}\n",.{slice4});
if(((slice3[1] == 'M' and slice4[1] == 'S') or (slice3[1] == 'S' and slice4[1] == 'M')) and ((slice[1] == 'M' and slice2[1] == 'S') or (slice[1] == 'S' and slice2[1] == 'M')))
{
result += 1;
}
}
return result;
}
fn move(allocator : std.mem.Allocator, dir : Dir, count: usize,absPos : *usize,lineLen : u64) ![]u8
{
var result : []u8 = try allocator.alloc(u8,1);
result[0] = buffer[absPos.*];
//defer allocator.free(result);
for(0..count) | _ |
{
const homePos = absPos.*;
//debugBuffer[absPos.*] = '.';
if(absPos.* != '\n')
{
switch(dir) {
Dir.leftUp => {
if(absPos.* > lineLen)
{
absPos.* = absPos.* - lineLen - 1;
}
else
{
return error.HitBoundary;
}
},
Dir.Up => {
if(absPos.* > lineLen)
{
absPos.* = absPos.* - lineLen;
print("dir.up {c}\n",.{buffer[absPos.*]});
}
else
{
return error.HitBoundary;
}
},
Dir.rightUp => {
if(absPos.* > lineLen)
{
absPos.* = absPos.* - lineLen + 1 ;
}
else
{
return error.HitBoundary;
}
},
Dir.left => {
//if(@mod(absPos.*,lineLen)!=0)
if(absPos.* > 0)
{
absPos.* = absPos.* - 1;
}
else
{
return error.HitBoundary;
}
},
Dir.right => {
absPos.* = absPos.* + 1;
},
Dir.downLeft => {
absPos.* = absPos.* + lineLen - 1;
},
Dir.down => {
absPos.* = absPos.* + lineLen;
},
Dir.downRight => {
absPos.* = absPos.* + lineLen + 1;
},
}
}
if(buffer[absPos.*] != '\n')
{
result = try std.fmt.allocPrint(allocator,"{s}{c}",.{result,buffer[absPos.*]});
}
else
{
absPos.* = homePos;
result = try std.fmt.allocPrint(allocator,"...",.{});
}
}
//print("absPos: {} lineLen: {}\n",.{absPos.*,lineLen});
return result;
}
fn getLineLen() GenericError!usize
{
if(std.mem.indexOf(u8,&buffer,"\n")) | index |
{
print("found newline at {?}\n",.{index});
//add for the newline itself
return index+1;
}
else
{
return error.NoNewlineFound;
}
}
fn readFile(filename : [] const u8) !usize
{
const file = try std.fs.cwd().openFile(filename,.{});
defer file.close();
const bytes_read = try file.readAll(&buffer);
return bytes_read;
}

179
src/day5.zig Normal file
View File

@@ -0,0 +1,179 @@
const std = @import("std");
const print = std.debug.print;
pub fn main() !void
{
const allocator = std.heap.page_allocator;
var rules = std.ArrayList([]u8).init(allocator);
var data = std.ArrayList([]u8).init(allocator);
var sum : usize = 0;
print("typeof arraylist: {}",.{@TypeOf(rules)});
try readFile(allocator,"day5.txt",&rules,&data);
print("rules:\n",.{});
for(rules.items) | rule |
{
print("{s}\n",.{rule});
}
print("data:\n",.{});
for(data.items) | dat |
{
print("{s}\n",.{dat});
}
for(data.items) | dat |
{
const values = try parseIntsToSlice(allocator,dat);
print("ints: {d}\n",.{values});
if(try checkOrder(allocator,dat,&rules)) | failed_rule |
{
print("dataset failed at rule {d}\n",.{failed_rule});
}
else
{
print("dataset {d} clean\n",.{values});
const middle = getMiddleFromSlice(values);
print("middle value {d}\n",.{values[middle]});
sum = sum + values[middle];
}
}
print("Final result: {d}",.{sum});
}
fn readFile(allocator : std.mem.Allocator, filename : [] const u8, rules : *std.ArrayList([]u8), data : *std.ArrayList([]u8)) !void
{
const file = try std.fs.cwd().openFile(filename,.{});
var buf_reader = std.io.bufferedReader(file.reader());
var reader = buf_reader.reader();
var buf: [1024]u8 = undefined;
while(try reader.readUntilDelimiterOrEof(&buf,'\n') )| line |
{
if(std.mem.indexOf(u8,line,"|")) | _ |
{
print("this is a rule: ",.{});
try rules.append(try std.fmt.allocPrint(allocator,"{s}",.{line}));
}
else if(std.mem.indexOf(u8,line,",")) | _ |
{
try data.append( try std.fmt.allocPrint(allocator,"{s}",.{line}));
print("this is a data set: ",.{});
}
print("{s}\n",.{line});
}
}
fn parseIntsToSlice(allocator : std.mem.Allocator, data : []u8) ![]u64
{
var values : []u64 = try allocator.alloc(u64,0);
var start_pos : usize = 0;
//first must be different as dataset does not beginn with a ,
if(std.mem.indexOfAnyPos(u8,data,0,",")) | index |
{
values = try allocator.realloc(values,values.len + 1);
const cur_index = values.len - 1;
//parses the string from beginning to , to an integer
values[cur_index] = try std.fmt.parseInt(u64,data[0..index],10);
}
while(std.mem.indexOfAnyPos(u8,data,start_pos,",")) | index |
{
if(start_pos >= data.len - 1) break;
if(std.mem.indexOfAnyPos(u8,data,index+1,",")) | sub_index |
{
values = try allocator.realloc(values,values.len + 1);
const cur_index = values.len - 1;
//parses the string from , to , to an integer
values[cur_index] = try std.fmt.parseInt(u64,data[index+1..sub_index],10);
start_pos = sub_index;
}
else
{
values = try allocator.realloc(values,values.len + 1);
const cur_index = values.len - 1;
values[cur_index] = try std.fmt.parseInt(u64,data[index+1..data.len],10);
break;
}
}
//print("address of heap allocated memory: {}\nvalues itself: {d}\n",.{&values,values});
return values;
}
fn parseRule(allocator : std.mem.Allocator,rule : []u8) ![2]u64
{
_ = allocator;
if(std.mem.indexOf(u8,rule,"|")) | index |
{
const int1 = try std.fmt.parseInt(u64,rule[0..index],10);
const int2 = try std.fmt.parseInt(u64,rule[index+1..],10);
return .{int1,int2};
}
return.{0,0};
}
//returns the rule number which first caused a rule mismatch
fn checkOrder(allocator : std.mem.Allocator,data : []u8,rules : *std.ArrayList([]u8)) !? usize
{
const nbrs = try parseIntsToSlice(allocator,data);
//const nbrs2 = try parseIntsToSlice(allocator,data);
var pass_test : bool = false;
var fail_index : usize = 0;
for(nbrs,0..) | nbr, index_nbr |
{
for (rules.items,0..) | rule, index_rule |
{
const rule_i = try parseRule(allocator,rule);
if(nbr == rule_i[0])
{
print("check rule: {s}",.{rule});
for(nbrs,0..) | nbr2, index_nbr2 |
{
if(nbr2 == rule_i[1])
{
if(index_nbr2 > index_nbr)
{
print("... OK\n",.{});
pass_test = true;
break;
}
else
{
print("... failed at rule {d}\n",.{index_rule});
pass_test = false;
fail_index = index_rule;
return fail_index;
}
}
}
else
{
print("... skip rule\n",.{});
}
}
}
}
return null;
}
fn getMiddleFromSlice(data : []u64) usize
{
const middle = (data.len - 1) / 2;
print("middle: {}\n",.{middle});
return middle;
}

121
src/main.zig Normal file
View File

@@ -0,0 +1,121 @@
const std = @import("std");
var data : [4][1024]u32 = undefined;
var res:u32=0;
var res2:u32=0;
pub fn main() !void {
_ = try readFile();
std.debug.print("{},{}\n",.{data[0][0],data[1][0]});
for(&data[0],0..) | *elema,indexa |
{
const slice = data[0][indexa+1..];
for(slice) |*elemb|
{
if(elemb.* < elema.*)
{
const temp = elema.*;
elema.* = elemb.*;
elemb.* = temp;
}
}
}
for(&data[1],0..) | *elema,indexa |
{
const slice = data[1][indexa+1..];
for(slice) |*elemb|
{
if(elemb.* < elema.*)
{
const temp = elema.*;
elema.* = elemb.*;
elemb.* = temp;
}
}
}
for(&data[0],&data[1],&data[2],&data[3]) | a, b, *c, *d |
{
d.* = 0;
if(a < b)
{
c.* = b-a;
}
else if (a > b)
{
c.* = a-b;
}
}
for(&data[0]) | a |
{
for(&data[1], &data[3]) | b, *c |
{
//std.debug.print("a:{} ,b:{}\n",.{a,b});
if(a == b and a != 0)
{
c.* = a;
std.debug.print("c:{}, a:{}\n",.{c.*,a});
}
}
}
for(&data[3]) | count |
{
res2 = res2 + count;
}
for(&data[2]) | a |
{
res = res + a;
}
std.debug.print("res: {}\n",.{res});
std.debug.print("res2: {}\n",.{res2});
std.debug.print("ex: {} {} {}",.{data[0][1],data[1][1],data[3][1]});
}
fn readFile() !void
{
const file = try std.fs.cwd().openFile("input.txt",.{});
defer file.close();
var buf_reader = std.io.bufferedReader(file.reader());
var in_stream = buf_reader.reader();
var buf: [1024]u8 = undefined;
var index : u32 = 0;
var indexa: u32 = 0;
var indexb : u32 = 0;
while(try in_stream.readUntilDelimiterOrEof(&buf,'\n')) | line |
{
var it = std.mem.split(u8,line," ");
while (it.next()) |word|
{
if(std.mem.eql(u8,word,"\n")==false)
{
if(std.mem.eql(u8,word,"")==false)
{
//std.debug.print("entry:{s}\n", .{word});
if(@mod(index,2)==0)
{
data[0][indexa] = try std.fmt.parseInt(u32,word,10);
indexa +=1;
}
else
{
data[1][indexb] = try std.fmt.parseInt(u32,word,10);
indexb += 1;
}
index += 1;
}
}
}
}
}

10
src/root.zig Normal file
View File

@@ -0,0 +1,10 @@
const std = @import("std");
const testing = std.testing;
export fn add(a: i32, b: i32) i32 {
return a + b;
}
test "basic add functionality" {
try testing.expect(add(3, 7) == 10);
}