From e0259f43a726f61da14686de802021fcdb9aacd0 Mon Sep 17 00:00:00 2001 From: Chris Boesch Date: Fri, 3 Apr 2026 13:35:56 +0200 Subject: Insert space for additional async exercises --- exercises/096_memory_allocation.zig | 78 ------------------------------------- 1 file changed, 78 deletions(-) delete mode 100644 exercises/096_memory_allocation.zig (limited to 'exercises/096_memory_allocation.zig') diff --git a/exercises/096_memory_allocation.zig b/exercises/096_memory_allocation.zig deleted file mode 100644 index 58de7b0..0000000 --- a/exercises/096_memory_allocation.zig +++ /dev/null @@ -1,78 +0,0 @@ -// -// In most of the examples so far, the inputs are known at compile -// time, thus the amount of memory used by the program is fixed. -// However, if responding to input whose size is not known at compile -// time, such as: -// - user input via command-line arguments -// - inputs from another program -// -// You'll need to request memory for your program to be allocated by -// your operating system at runtime. -// -// Zig provides several different allocators. In the Zig -// documentation, it recommends the Arena allocator for simple -// programs which allocate once and then exit: -// -// const std = @import("std"); -// -// // memory allocation can fail, so the return type is !void -// pub fn main() !void { -// -// var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); -// defer arena.deinit(); -// -// const allocator = arena.allocator(); -// -// const ptr = try allocator.create(i32); -// std.debug.print("ptr={*}\n", .{ptr}); -// -// const slice_ptr = try allocator.alloc(f64, 5); -// std.debug.print("slice_ptr={*}\n", .{slice_ptr}); -// } - -// Instead of a simple integer or a slice with a constant size, -// this program requires allocating a slice that is the same size -// as an input array. - -// Given a series of numbers, take the running average. In other -// words, each item N should contain the average of the last N -// elements. - -const std = @import("std"); - -fn runningAverage(arr: []const f64, avg: []f64) void { - var sum: f64 = 0; - - for (0.., arr) |index, val| { - sum += val; - const f_index: f64 = @floatFromInt(index + 1); - avg[index] = sum / f_index; - } -} - -pub fn main() !void { - // pretend this was defined by reading in user input - const arr: []const f64 = &[_]f64{ 0.3, 0.2, 0.1, 0.1, 0.4 }; - - // initialize the allocator - var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator); - - // free the memory on exit - defer arena.deinit(); - - // initialize the allocator - const allocator = arena.allocator(); - - // allocate memory for this array - const avg: []f64 = ???; - - runningAverage(arr, avg); - std.debug.print("Running Average: ", .{}); - for (avg) |val| { - std.debug.print("{d:.2} ", .{val}); - } - std.debug.print("\n", .{}); -} - -// For more details on memory allocation and the different types of -// memory allocators, see https://www.youtube.com/watch?v=vHWiDx_l4V0 -- cgit v1.2.3