Initial commit
This commit is contained in:
73
src/main.zig
Normal file
73
src/main.zig
Normal file
@@ -0,0 +1,73 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub fn main() !void {
|
||||
var gpa: std.heap.DebugAllocator(.{}) = .init;
|
||||
const allocator = gpa.allocator();
|
||||
defer _ = gpa.deinit();
|
||||
|
||||
const input = try getInput("Please enter a number: ");
|
||||
|
||||
var primes = try getPrimes(input, allocator);
|
||||
defer primes.deinit(allocator);
|
||||
|
||||
var stdout_buffer: [100]u8 = undefined;
|
||||
var stdout = std.fs.File.stdout().writer(&stdout_buffer);
|
||||
var output = &stdout.interface;
|
||||
|
||||
if (primes.items.len == 0) {
|
||||
try output.writeAll("No prime numbers were found.\n");
|
||||
} else {
|
||||
try output.print("Displaying {d} prime numbers from 2 to {d}:\n", .{primes.items.len, primes.items[primes.items.len - 1]});
|
||||
for (primes.items) |prime| {
|
||||
try output.print("{d} ", .{prime});
|
||||
}
|
||||
}
|
||||
|
||||
try output.flush();
|
||||
}
|
||||
|
||||
fn getInput(message: []const u8) !usize {
|
||||
var stdout_buffer: [100]u8 = undefined;
|
||||
var stdout = std.fs.File.stdout().writer(&stdout_buffer);
|
||||
var output = &stdout.interface;
|
||||
|
||||
var stdin_buffer: [100]u8 = undefined;
|
||||
var stdin = std.fs.File.stdin().reader(&stdin_buffer);
|
||||
|
||||
var line_buffer: [100]u8 = undefined;
|
||||
var w: std.io.Writer = .fixed(&line_buffer);
|
||||
|
||||
|
||||
while (true) {
|
||||
try output.writeAll(message);
|
||||
try output.flush();
|
||||
|
||||
const line_length = try stdin.interface.streamDelimiterLimit(&w, '\n', .unlimited);
|
||||
const input_line = line_buffer[0..line_length];
|
||||
|
||||
const res = std.fmt.parseInt(usize, input_line, 10) catch {
|
||||
continue;
|
||||
};
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
||||
fn getPrimes(max: usize, allocator: std.mem.Allocator) !std.ArrayList(usize) {
|
||||
var primes: std.ArrayList(usize) = .empty;
|
||||
|
||||
for (2..max+1) |i| {
|
||||
if (isPrime(i)) try primes.append(allocator, i);
|
||||
}
|
||||
|
||||
return primes;
|
||||
}
|
||||
|
||||
fn isPrime(n: usize) bool {
|
||||
if (n < 2) return false;
|
||||
|
||||
for (2..n) |i| {
|
||||
if (n % i == 0) return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user