diff --git a/GildedRoseRequirements_ua.md b/GildedRoseRequirements_ua.md new file mode 100644 index 00000000..30b19202 --- /dev/null +++ b/GildedRoseRequirements_ua.md @@ -0,0 +1,29 @@ +# Технічні вимоги «Gilded Rose» + +Привіт і ласкаво просимо до команди Gilded Rose. Як ви знаєте, ми — невеликий готель з чудовим розташуванням у видатному місті, яким керує привітна господиня на ім'я Еллісон. Ми також купуємо і продаємо тільки найкращі товари. +На жаль, якість (`Quality`) наших товарів постійно погіршується по мірі наближення до кінцевого терміну придатності. + +Ми маємо інформаційну систему, яка веде облік всіх товарів. Система була розроблена прагматичним хлопцем на ім'я Лірой, який вирушив у нові пригоди. Ваше завдання полягає в тому, щоб додати новий функціонал до нашої системи, щоб ми могли почати продавати нову категорію товарів. Спочатку коротке введення в нашу систему: + +- Усі `items` (предмети) мають значення `SellIn`, яке позначає кількість днів, протягом яких ми повинні продати `items` (цей товар). +- Усі `items` мають значення `Quality`, яке позначає якість `item`. +- В кінці кожного дня наша система знижує значення обох властивостей для кожного `item`. + +Досить просто, чи не так? Але тут починається найцікавіше: + +- Після того як `SellIn` (дата продажу) минула, `Quality` (якість) падає вдвічі швидше +- `Quality` товару ніколи не може бути від'ємною +- Для товару __"Aged Brie"__ якість збільшується з віком +- `Quality` товару ніколи не перевищує `50` +- __"Sulfuras"__, як легендарний товар, ніколи не потребує продажу і його `Quality` ніколи не зменшується +- __"Backstage passes"__ (пропуск за лаштунки), як і __"Aged Brie"__, збільшує якість по мірі наближення до значення `SellIn`: + - `Quality` (Якість) збільшується на `2`, коли залишилося `10` днів або менше, і на `3`, коли залишилося `5` днів або менше, але + - Якість падає до `0` після концерту + +Ми недавно підписали угоду з постачальником чарівних товарів. Це потребує оновлення нашої системи: + +- Чарівні (__"Conjured"__) предмети втрачають якість (`Quality`) удвічі швидше, ніж звичайні товари + +Не соромтеся вносити будь-які зміни до методу `UpdateQuality` та додавати будь-який новий код, поки система працює правильно. Однак не змінюйте клас `Item` або властивість `Items`, оскільки вони належать гобліну в кутку, який дуже роздратований і тому вистрілить в вас, оскільки він не вірить у принцип спільної власності коду (ви можете зробити метод `UpdateQuality` та властивість `Items` статичними, якщо хочете — ми прикриємо вас). + +Просто для уточнення, товар ніколи не може мати якість (`Quality`) вище, ніж `50`, однак легендарний товар __"Sulfuras"__ має якість `80` і вона ніколи не змінюється. diff --git a/README.md b/README.md index 0c8c18dc..2a1b7516 100644 --- a/README.md +++ b/README.md @@ -26,6 +26,7 @@ The idea of the exercise is to do some deliberate practice, and improve your ski - [日本語](GildedRoseRequirements_jp.md) - [Português](GildedRoseRequirements_pt-BR.md) - [Русский](GildedRoseRequirements_ru.md) +- [Українська](GildedRoseRequirements_ua.md) - [ไทย](GildedRoseRequirements_th.md) - [中文](GildedRoseRequirements_zh.txt) - [한국어](GildedRoseRequirements_kr.md) diff --git a/scala/README.md b/scala/README.md index 6f36544e..d8f35317 100644 --- a/scala/README.md +++ b/scala/README.md @@ -1,3 +1,22 @@ -# Gilded Rose starting position in Scala +# Gilded Rose starting position in Scala 3 scalatest -TODO: explain how to run this code + +## Build the project + +``` cmd +sbt compile +``` + +## Run the Gilded Rose Command-Line program + +For e.g. 10 days: + +``` cmd +sbt "run 10" +``` + +## Run all the unit tests + +``` cmd +sbt test +``` diff --git a/scala/build.sbt b/scala/build.sbt index d628c9f4..51404b8c 100644 --- a/scala/build.sbt +++ b/scala/build.sbt @@ -1,8 +1,11 @@ -name := "GildedRose" +val scala3Version = "3.6.4" -version := "1.0" +lazy val root = project + .in(file(".")) + .settings( + name := "GildedRose", + version := "1.0", + scalaVersion := scala3Version, -scalaVersion := "2.13.1" - -resolvers += DefaultMavenRepository -libraryDependencies += "org.scalatest" %% "scalatest" % "3.1.1" % "test" + libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.19" % "test" + ) diff --git a/scala/project/build.properties b/scala/project/build.properties index 06703e34..e97b2722 100644 --- a/scala/project/build.properties +++ b/scala/project/build.properties @@ -1 +1 @@ -sbt.version=1.3.9 +sbt.version=1.10.10 diff --git a/scala/src/main/scala/com/gildedrose/GildedRose.scala b/scala/src/main/scala/com/gildedrose/GildedRose.scala index 9f9fdd2b..f6e45e7e 100644 --- a/scala/src/main/scala/com/gildedrose/GildedRose.scala +++ b/scala/src/main/scala/com/gildedrose/GildedRose.scala @@ -3,7 +3,7 @@ package com.gildedrose class GildedRose(val items: Array[Item]) { - def updateQuality() { + def updateQuality() : Unit = { for (i <- 0 until items.length) { if (!items(i).name.equals("Aged Brie") && !items(i).name.equals("Backstage passes to a TAFKAL80ETC concert")) { @@ -55,4 +55,4 @@ class GildedRose(val items: Array[Item]) { } } } -} \ No newline at end of file +} diff --git a/scala/src/test/scala/com/gildedrose/TexttestFixture.scala b/scala/src/main/scala/com/gildedrose/Main.scala similarity index 95% rename from scala/src/test/scala/com/gildedrose/TexttestFixture.scala rename to scala/src/main/scala/com/gildedrose/Main.scala index 1d00808c..fbd1cd9b 100644 --- a/scala/src/test/scala/com/gildedrose/TexttestFixture.scala +++ b/scala/src/main/scala/com/gildedrose/Main.scala @@ -1,6 +1,6 @@ package com.gildedrose -object TexttestFixture { +object Main { def main(args: Array[String]): Unit = { val items = Array[Item]( new Item("+5 Dexterity Vest", 10, 20), @@ -14,8 +14,13 @@ object TexttestFixture { // this conjured item does not work properly yet new Item("Conjured Mana Cake", 3, 6) ) + val app = new GildedRose(items) + val days = if (args.length > 0) args(0).toInt + 1 else 2 + + System.out.println("OMGHAI!") + for (i <- 0 until days) { System.out.println("-------- day " + i + " --------") System.out.println("name, sellIn, quality") diff --git a/scala/src/test/scala/com/gildedrose/GildedRoseTest.scala b/scala/src/test/scala/com/gildedrose/GildedRoseTest.scala index c0ce6b23..6d8c1732 100644 --- a/scala/src/test/scala/com/gildedrose/GildedRoseTest.scala +++ b/scala/src/test/scala/com/gildedrose/GildedRoseTest.scala @@ -3,11 +3,11 @@ package com.gildedrose import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers -class GildedRoseTest extends AnyFlatSpec with Matchers { +class GildedRoseTest extends AnyFlatSpec with Matchers { it should "foo" in { val items = Array[Item](new Item("foo", 0, 0)) val app = new GildedRose(items) app.updateQuality() app.items(0).name should equal ("fixme") } -} \ No newline at end of file +}