mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-10-14 01:55:46 +00:00
Add Zig implementation
This commit is contained in:
1 parent
8e9e31f9b8
commit
152c38549b
6 files changed
+240
No files matched your search
@@ -0,0 +1,79 @@
|
||||
const std = @import("std");
|
||||
|
||||
pub const Item = struct {
|
||||
name: []const u8,
|
||||
sell_in: i32,
|
||||
quality: i32,
|
||||
|
||||
pub fn init(name: []const u8, sell_in: i32, quality: i32) Item {
|
||||
return Item{
|
||||
.name = name,
|
||||
.sell_in = sell_in,
|
||||
.quality = quality,
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
pub const GildedRose = struct {
|
||||
items: []Item,
|
||||
|
||||
pub fn init(items: []Item) GildedRose {
|
||||
return GildedRose{ .items = items };
|
||||
}
|
||||
|
||||
pub fn updateQuality(self: *GildedRose) []Item {
|
||||
for (0..self.items.len) |i| {
|
||||
if (!std.mem.eql(u8, self.items[i].name, "Aged Brie") and !std.mem.eql(u8, self.items[i].name, "Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (self.items[i].quality > 0) {
|
||||
if (!std.mem.eql(u8, self.items[i].name, "Sulfuras, Hand of Ragnaros")) {
|
||||
self.items[i].quality = self.items[i].quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (self.items[i].quality < 50) {
|
||||
self.items[i].quality = self.items[i].quality + 1;
|
||||
if (std.mem.eql(u8, self.items[i].name, "Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (self.items[i].sell_in < 11) {
|
||||
if (self.items[i].quality < 50) {
|
||||
self.items[i].quality = self.items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
if (self.items[i].sell_in < 6) {
|
||||
if (self.items[i].quality < 50) {
|
||||
self.items[i].quality = self.items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!std.mem.eql(u8, self.items[i].name, "Sulfuras, Hand of Ragnaros")) {
|
||||
self.items[i].sell_in = self.items[i].sell_in - 1;
|
||||
}
|
||||
if (self.items[i].sell_in < 0) {
|
||||
if (!std.mem.eql(u8, self.items[i].name, "Aged Brie")) {
|
||||
if (!std.mem.eql(u8, self.items[i].name, "Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (self.items[i].quality > 0) {
|
||||
if (!std.mem.eql(u8, self.items[i].name, "Sulfuras, Hand of Ragnaros")) {
|
||||
self.items[i].quality = self.items[i].quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
self.items[i].quality = self.items[i].quality - self.items[i].quality;
|
||||
}
|
||||
} else {
|
||||
if (self.items[i].quality < 50) {
|
||||
self.items[i].quality = self.items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return self.items;
|
||||
}
|
||||
};
|
||||
|
||||
test "updateQuality" {
|
||||
var items = [_]Item{Item.init("foo", 0, 0)};
|
||||
var app = GildedRose.init(&items);
|
||||
_ = app.updateQuality();
|
||||
try std.testing.expectEqualStrings("fixme", items[0].name);
|
||||
}
|
||||
@@ -0,0 +1,43 @@
|
||||
const std = @import("std");
|
||||
const gilded_rose = @import("gilded_rose.zig");
|
||||
const Item = gilded_rose.Item;
|
||||
const GildedRose = gilded_rose.GildedRose;
|
||||
|
||||
pub fn main() !void {
|
||||
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
|
||||
defer arena.deinit();
|
||||
const allocator = arena.allocator();
|
||||
|
||||
const args = try std.process.argsAlloc(allocator);
|
||||
var days: u8 = 2;
|
||||
if (args.len >= 2) {
|
||||
days = try std.fmt.parseInt(u8, args[1], 10);
|
||||
}
|
||||
|
||||
var items = [_]Item{
|
||||
Item.init("+5 Dexterity Vest", 10, 20),
|
||||
Item.init("Aged Brie", 2, 0),
|
||||
Item.init("Elixir of the Mongoose", 5, 7),
|
||||
Item.init("Sulfuras, Hand of Ragnaros", 0, 80),
|
||||
Item.init("Sulfuras, Hand of Ragnaros", -1, 80),
|
||||
Item.init("Backstage passes to a TAFKAL80ETC concert", 15, 20),
|
||||
Item.init("Backstage passes to a TAFKAL80ETC concert", 10, 49),
|
||||
Item.init("Backstage passes to a TAFKAL80ETC concert", 5, 49),
|
||||
// this Conjured item doesn't yet work properly
|
||||
Item.init("Conjured Mana Cake", 3, 6),
|
||||
};
|
||||
var app = GildedRose.init(&items);
|
||||
|
||||
const stdout = std.io.getStdOut().writer();
|
||||
try stdout.print("OMGHAI!\n", .{});
|
||||
|
||||
for (0..days + 1) |day| {
|
||||
try stdout.print("-------- day {d} --------\n", .{day});
|
||||
try stdout.print("name, sellIn, quality\n", .{});
|
||||
for (items) |item| {
|
||||
try stdout.print("{s}, {d}, {d}\n", .{ item.name, item.sell_in, item.quality });
|
||||
}
|
||||
try stdout.print("\n", .{});
|
||||
_ = app.updateQuality();
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user