Kurzusok
/
F#
F#
/
Feladatok
/
Trendlovag
Trendlovag

Trendlovag

Tanulófeladat

Bevezetés

Rekordok

A rekord olyan mezők gyűjteménye, amelyek összetartoznak, és amelyek akár különböző típusúak is lehetnek. Rekord definiálásához a type kulcsszót használjuk. A rekord mezőit a { és } karakterek között definiáljuk, és minden mezőnek van egy neve és egy típusa. Rekord létrehozásához megadjuk a mezők nevét, majd a { és } karakterek között értéket rendelünk hozzájuk. Rekord létrehozásakor minden mezőnek értéket kell adni. Egy rekordpéldány mezőértékei pontjelöléssel érhetők el.

Rekord definiálásakor/létrehozásakor minden mezőnek vagy külön sorban kell lennie, vagy pontosvesszővel (;) elválasztva, ha egy sorban van.

// Define a record
type Address =
    { Street: string
      HouseNumber: int }

// Create a record
let oldAddress: Address =
    { Street = "Main Street"
      HouseNumber = 17 }

// Single-line alternative
type ConciseAddress = { Street: string; HouseNumber: int }
let conciseAddress: ConciseAddress = { Street = "Main Street"; HouseNumber = 17 }

Mivel a rekordok nem módosíthatók, miután létrehoztunk egy rekordot, a mezőértékei soha nem változhatnak. Ha szeretnéd módosítani egy rekord értékeit, a with kulcsszóval készíthetsz egy másolatot egy létező rekordról, de egy vagy több mező új értékével.

// Copy the old address but change the house number
let newAddress: Address = { oldAddress with HouseNumber = 86 }
newAddress.Street      // => "Main Street"
newAddress.HouseNumber // => 86

A rekordok strukturális egyenlőséggel rendelkeznek, ami azt jelenti, hogy ugyanazon rekord két azonos értékű példánya egyenértékű.

Amellett, hogy pontjelöléssel hozzáférhetsz egy rekord mezőihez, a rekordok kötésekben és mintaillesztésben is szétbonthatók:

let myAddress: Address = { Street = "Broadway"; HouseNumber = 123 }
let { Street = myStreet; HouseNumber = myHouseNumber } = myAddress

match myAddress with
| { HouseNumber = 1 } -> printfn "First house"
| { HouseNumber = houseNumber; Street = street } -> printfn "House number %d on %s" houseNumber street
// => "House number 123 on Broadway

Utasítások

Ebben a feladatban nagy sportrajongó vagy, és most fedezted fel, hogy mennyire vonz az NBA-kosárlabda. Mivel még új vagy az NBA kosárlabdájában, alaposan elmélyedsz az NBA történetében: számon tartod 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, amivel eldöntheted, hogy szurkolj-e egy adott csapatnak.

Hét részfeladat segít kidolgozni 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.
  • FormerPlayer: megmutatja, 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 createCoach függvényt, amely paraméterként az edző nevét és a korábbi játékos státuszát kapja, és visszaadja a Coach rekordot:

createCoach "Larry Bird" true
// => { Name = "Larry Bird"; FormerPlayer = true }

3. Hozd létre egy csapat statisztikáit

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

createStats 58 24
// => { Wins = 58; Losses = 24 }

4. Hozz létre egy csapatot

Valósítsd meg a createTeam függvényt, amely paraméterként a csapat nevét, az edzőt és a rekordot kapja, és visszaadja a Team rekordot:

let coach = createCoach "Larry Bird" true
let record = createStats 58 24
createTeam "Indiana Pacers" coach record
// => { Name = "Indiana Pacers"
//      Coach = { Name = "Larry Bird"; FormerPlayer = true }
//      Stats = { Wins = 58; Losses = 24 } }

5. Cseréld le az edzőt

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

let coach = createCoach "Larry Bird" true
let record = createStats 58 24
let team = createTeam "Indiana Pacers" coach record

let newCoach = createCoach "Isiah Thomas" true
replaceCoach team newCoach
// => { Name = "Indiana Pacers"
//      Coach = { Name = "Isiah Thomas"; FormerPlayer = true }
//      Stats = { Wins = 58; Losses = 24 } }

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

Miközben a statisztikákat elemzed, csapatok és rekordjaik listáit vezeted. Néha hibázol, és ilyenkor duplikált bejegyzések kerülnek a listádra. Valósítsd meg az isSameTeam függvényt, amely két csapatot kap, és true-t ad vissza, ha ugyanaz a csapat; egyébként false-t ad vissza:

let pacersCoach = createCoach "Larry Bird" true
let pacersStats = createStats 58 24
let pacersTeam = createTeam "Indiana Pacers" pacersCoach pacersStats

let lakersCoach = createCoach "Del Harris" false
let lakersStats = createStats 61 21
let lakersTeam = createTeam "LA Lakers" lakersCoach lakersStats

isSameTeam pacersTeam lakersTeam
// => false

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

Miután sok csapatot és mérkőzést megvizsgáltál, kitaláltál egy algoritmust. Ha az alábbiak közül valamelyik igaz, 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 rootForTeam függvényt, amely egy csapatot kap, és true-t ad vissza, ha szurkolni kell annak a csapatnak; egyébként return false:

let spursCoach = createCoach "Gregg Popovich" false
let spursStats = createStats 56 26
let spursTeam = createTeam "San Antonio Spurs" spursCoach spursStats
rootForTeam spursTeam
// => true
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
F# Exercism

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

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