1
0
Fork 0
aturkri/src/root.zig
2025-03-31 14:22:43 +08:00

45 lines
1.2 KiB
Zig

const std = @import("std");
const isaac64 = std.rand.Isaac64;
const testing = std.testing;
const syllable = @import("syllable.zig");
const syllables = syllable.syllables;
fn getRandomSyllable(rng: *std.rand.Random) []const u8 {
return syllables[rng.intRangeLessThan(usize, 0, syllables.len)];
}
pub fn generateName(allocator: std.mem.Allocator, seed: u64, syllable_count: usize) ![]const u8 {
var prng = isaac64.init(seed);
var rng = prng.random();
var list = std.ArrayList(u8).init(allocator);
defer list.deinit();
for (0..syllable_count) |_| {
try list.appendSlice(getRandomSyllable(&rng));
}
var name = try list.toOwnedSlice();
if (name.len > 0) {
name[0] = std.ascii.toUpper(name[0]);
}
return name;
}
test "Test single syllable" {
var prng = isaac64.init(0);
var rng = prng.random();
std.debug.print("A Syllable: {s}\n", .{getRandomSyllable(&rng)});
}
test "Test random word" {
var gpa = std.heap.page_allocator;
var prng = isaac64.init(0);
var rng = prng.random();
const name = try generateName(gpa, @intCast(rng.int(u64)), @intCast(rng.intRangeLessThan(u8, 3, 4)));
defer gpa.free(name);
std.debug.print("A word: {s}\n", .{name});
}