Merge pull request #3 from emilybache/main

Pull latest from original
This commit is contained in:
Adam Pridmore 2025-03-17 10:02:08 +00:00 committed by GitHub
commit 66c1a38081
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
8 changed files with 71 additions and 14 deletions

View File

@ -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` і вона ніколи не змінюється.

View File

@ -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)

View File

@ -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
```

View File

@ -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"
)

View File

@ -1 +1 @@
sbt.version=1.3.9
sbt.version=1.10.10

View File

@ -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]) {
}
}
}
}
}

View File

@ -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")

View File

@ -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")
}
}
}