Trendlovag

Trendlovag

Tanulófeladat

Bevezetés

Címkézett mezők

Amikor egy egyedi típus egy változata adatot tárol, azt rekordnak nevezzük, és minden benne lévő érték egy mezőben található.

pub type Rectangle {
  Rectangle(
    Float, // The first field
    Float, // The second field
  )
}

A jobb olvashatóság érdekében a Gleam megengedi, hogy a mezőket névvel címkézzük.

pub type Rectangle {
  Rectangle(
    width: Float,
    height: Float,
  )
}

A címkékkel tetszőleges sorrendben adhatunk argumentumokat egy rekord konstruktorának.

let a = Rectangle(height: 10.0, width: 20.0)
let b = Rectangle(width: 20.0, height: 10.0)

a == b
// -> True

Amikor egy egyedi típusnak csak egy változata van, akkor a .label elérési szintaxissal lekérhetjük egy rekord mezőit.

let rect = Rectangle(height: 10.0, width: 20.0)

rect.height // -> 10.0
rect.width  // -> 20.0

A rekordfrissítési szintaxis akkor használható, ha az egyedi típusnak egyetlen változata van, hogy egy meglévő rekordból új rekordot hozzunk létre, de néhány mezőt új értékekre cserélve.

let rect = Rectangle(height: 10.0, width: 20.0)
let tall_rect = Rectangle(..rect, height: 50.0)

tall_rect.height // -> 50.0
tall_rect.width  // -> 20.0

A címkéket mintaillesztéskor is használhatjuk, hogy értékeket nyerjünk ki rekordokból.

pub fn is_tall(rect: Rectangle) {
  case rect {
    Rectangle(height: h, width: _) if h >. 20.0 -> True
    _ -> False
  }
}

Ha csak néhány mezőre szeretnénk illeszkedni, használhatjuk a .. spread operátort, hogy figyelmen kívül hagyjuk a többi mezőt.

pub fn is_tall(rect: Rectangle) {
  case rect {
    Rectangle(height: h, ..) if h >. 20.0 -> True
    _ -> False
  }
}

Utasítások

Ebben a feladatban nagy sportrajongó vagy, és épp most fedezted fel, hogy szenvedélyesen érdekel az NBA-kosárlabda. Mivel még új vagy az NBA-kosárlabdában, alaposan elmerülsz az NBA történelmében: számontartod a csapatokat, az edzőket és a győzelmi/vereségi statisztikáikat, és összehasonlítod őket egymással.

Mivel még nincs kedvenc csapatod, egy algoritmust is fejlesztesz majd, amely eldönti, hogy érdemes-e szurkolni egy adott csapatnak.

Hét részfeladat segít, hogy kidolgozd a saját szurkolj-egy-csapatért algoritmusodat.

1. Definiáld a modellt

Definiáld a Coach rekordot a következő két mezővel:

  • name: az edző neve, típusa String.
  • former_player: jelzi, hogy az edző korábban játékos volt-e, típusa Bool.

Definiáld a Stats rekordot a következő két mezővel:

  • wins: a győzelmek száma, típusa Int.
  • losses: a vereségek száma, típusa Int.

Definiáld a Team rekordot a következő három mezővel:

  • name: a csapat neve, típusa String.
  • coach: a csapat edzője, típusa Coach.
  • stats: a csapat statisztikái, típusa Stats.

2. Hozd létre egy csapat edzőjét

Valósítsd meg a create_coach függvényt, amely paraméterként megkapja az edző nevét és azt, hogy korábban játékos volt-e, és visszaadja a hozzá tartozó Coach rekordot:

create_coach("Larry Bird", True)
// -> Coach(name: "Larry Bird", former_player: True)

3. Hozd létre egy csapat statisztikáit

Valósítsd meg a create_stats függvényt, amely paraméterként megkapja a győzelmek és a vereségek számát, és visszaadja a hozzá tartozó Stats rekordot:

create_stats(58, 24)
// -> Stats(wins: 58, losses: 24)

4. Hozz létre egy csapatot

Valósítsd meg a create_team függvényt, amely paraméterként megkapja a csapat nevét, az edzőt és a rekordot, és visszaadja a hozzá tartozó Team rekordot:

let coach = create_coach("Larry Bird", True)
let stats = create_stats(58, 24)
create_team("Indiana Pacers", coach, stats)
// -> Team(
//   name: "Indiana Pacers",
//   coach: Coach(name: "Larry Bird", FormerPlayer = True),
//   stats: Stats(wins: 58, losses: 24),
// ) 

5. Cseréld le az edzőt

Mivel az NBA tulajdonosai türelmetlenek, azt tapasztaltad, hogy a gyenge csapateredmények gyakran az edző lecseréléséhez vezetnek. Valósítsd meg a replace_coach függvényt, amely paraméterként megkapja a csapatot és az új edzőt, és visszaadja a csapatot, de az új edzővel:

let coach = create_coach("Larry Bird", True)
let record = create_stats(58, 24)
let team = create_team("Indiana Pacers", coach, record)

let new_coach = create_coach("Isiah Thomas", True)
replace_coach(team, new_coach)
// -> Team(
//   name: "Indiana Pacers",
//   coach: Coach(name: "Isiah Thomas", FormerPlayer = True),
//   stats: Stats(wins: 58, losses: 24),
// ) 

6. Ellenőrizd, hogy ugyanaz-e a csapat

Miközben a statisztikákat böngészed, listákat vezetsz a csapatokról és az eredményeikről. Néha hibázol, és duplikált bejegyzések kerülnek a listádra. Valósítsd meg az is_same_team függvényt, amely két csapatot kap, és True-t ad vissza, ha ugyanaz a csapat, egyébként pedig False-t:

let pacers_coach = create_coach("Larry Bird", True)
let pacers_stats = create_stats(58, 24)
let pacers_team = create_team("Indiana Pacers", pacers_coach, pacers_stats)

let lakers_coach = create_coach("Del Harris", False)
let lakers_stats = create_stats(61, 21)
let lakers_team = create_team("LA Lakers", lakers_coach, lakers_stats)

is_same_team(pacers_team, lakers_team)
// -> False

7. Ellenőrizd, hogy szurkolj-e egy csapatnak

Miután sok csapatot és mérkőzést megnéztél, kitaláltál egy algoritmust. Ha az alábbiak közül valamelyik igaz, akkor szurkolsz annak a csapatnak:

  • Az edző neve „Gregg Popovich”
  • Az edző korábban játékos volt
  • A csapat neve „Chicago Bulls”
  • A csapat 60 vagy több mérkőzést nyert
  • A csapatnak több a veresége, mint a győzelme

Valósítsd meg a root_for_team függvényt, amely megkap egy csapatot, és True-t ad vissza, ha szurkolni kell annak a csapatnak, egyébként pedig False-t:

let spurs_coach = create_coach("Gregg Popovich", False)
let spurs_stats = create_stats(56, 26)
let spurs_team = create_team("San Antonio Spurs", spurs_coach, spurs_stats)
root_for_team(spurs_team)
// -> True
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Gleam Exercism

Készen állsz elkezdeni a(z) Trendlovag feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Gleam nyelvet 33 fogalom122 feladat segítségével, valódi emberi mentorálással, mindez ingyen.