Add D language version

This commit is contained in:
Dragos Carp 2018-05-09 18:20:58 +02:00
parent 6447d1c3dc
commit 996dff3ffb
5 changed files with 173 additions and 0 deletions

1
d/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.dub

16
d/dub.json Normal file
View File

@ -0,0 +1,16 @@
{
"name": "GildedRose",
"configurations": [
{
"name": "GuildedRose",
"targetType": "executable",
"mainSourceFile": "src/GildedRoseTextTests.d"
},
{
"name": "unittest",
"targetType": "executable",
"sourcePaths": ["test"],
"mainSourceFile": "test/GildedRoseUnitTests.d"
}
]
}

93
d/src/GildedRose.d Normal file
View File

@ -0,0 +1,93 @@
struct Item
{
string name;
int sellIn;
int quality;
}
class GildedRose
{
public:
Item[] items;
this(Item[] items)
{
this.items = items.dup;
}
void updateQuality()
{
for (int i = 0; i < items.length; i++)
{
if (items[i].name != "Aged Brie"
&& items[i].name != "Backstage passes to a TAFKAL80ETC concert")
{
if (items[i].quality > 0)
{
if (items[i].name != "Sulfuras, Hand of Ragnaros")
{
items[i].quality = items[i].quality - 1;
}
}
}
else
{
if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
if (items[i].name == "Backstage passes to a TAFKAL80ETC concert")
{
if (items[i].sellIn < 11)
{
if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
}
}
if (items[i].sellIn < 6)
{
if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
}
}
}
}
}
if (items[i].name != "Sulfuras, Hand of Ragnaros")
{
items[i].sellIn = items[i].sellIn - 1;
}
if (items[i].sellIn < 0)
{
if (items[i].name != "Aged Brie")
{
if (items[i].name != "Backstage passes to a TAFKAL80ETC concert")
{
if (items[i].quality > 0)
{
if (items[i].name != "Sulfuras, Hand of Ragnaros")
{
items[i].quality = items[i].quality - 1;
}
}
}
else
{
items[i].quality = items[i].quality - items[i].quality;
}
}
else
{
if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
}
}
}
}
}
}

View File

@ -0,0 +1,38 @@
import GildedRose;
int main()
{
import std.stdio : writefln, writeln;
Item[] items = [
Item("+5 Dexterity Vest", 10, 20),
Item("Aged Brie", 2, 0),
Item("Elixir of the Mongoose", 5, 7),
Item("Sulfuras, Hand of Ragnaros", 0, 80),
Item("Sulfuras, Hand of Ragnaros", -1, 80),
Item("Backstage passes to a TAFKAL80ETC concert", 15, 20),
Item("Backstage passes to a TAFKAL80ETC concert", 10, 49),
Item("Backstage passes to a TAFKAL80ETC concert", 5, 49),
// this Conjured item doesn't yet work properly
Item("Conjured Mana Cake", 3, 6),
];
auto app = new GildedRose(items);
writeln("OMGHAI!");
for (int day = 0; day <= 30; day++)
{
writefln!"-------- day %s --------"(day);
writeln("Item(name, sellIn, quality)");
foreach (item; app.items)
{
writeln(item);
}
writeln;
app.updateQuality;
}
return 0;
}

View File

@ -0,0 +1,25 @@
import GildedRose;
unittest
{
Item[] items = [ Item("Foo", 0, 0)];
auto app = new GildedRose(items);
app.updateQuality;
assert("fixme" == app.items[0].name);
}
void example()
{
Item[] items = [
Item("+5 Dexterity Vest", 10, 20),
Item("Aged Brie", 2, 0),
Item("Elixir of the Mongoose", 5, 7),
Item("Sulfuras, Hand of Ragnaros", 0, 80),
Item("Backstage passes to a TAFKAL80ETC concert", 15, 20),
Item("Conjured Mana Cake", 3, 6),
];
auto app = new GildedRose(items);
app.updateQuality;
}