Kurzusok
/
F#
F#
/
Feladatok
/
Madárfigyelő
Madárfigyelő

Madárfigyelő

Tanulófeladat

Bevezetés

Tömbök

Az array az F#-ban nulla vagy több értékből álló, rögzített hosszúságú, módosítható gyűjtemény. Ez azt jelenti, hogy miután létrehoztál egy tömböt, a mérete nem változhat, de az értékei igen. Egy tömbben minden értéknek ugyanolyan típusúnak kell lennie. A tömböket így definiálhatod:

let empty = [| |]
let emptyAlternative = Array.empty

let singleValue = [| 5 |]
let singleValueAlternative = Array.singleton 5

let threeValues = [| "a"; "b"; "c" |]

Az elemeket index használatával rendelhetsz hozzá egy tömbhöz, illetve kérdezhetsz le belőle. Az F# tömbjei nullától indexeltek, ami azt jelenti, hogy az első elem indexe mindig nulla:

let numbers = [| 2; 3; 5 |]

// Update value in array
numbers[2] <- 9

// Read value from array
numbers[2]
// => 9

A tömböket vagy az Array modulban definiált függvényekkel és operátorokkal módosíthatod, vagy kézzel, az array mintát használó mintaillesztéssel:

let describe array =
    match array with
    | [| |] -> "Empty"
    | [| 1; 2; three |] -> sprintf "1, 2, %d" three
    | _ -> "Other"

describe [| |]         // => "Empty"
describe [| 1; 2; 4 |] // => "1, 2, 4"
describe [| 5; 7; 9 |] // => "Other"

Mintaillesztéskor egy értéket el is dobhatsz; ha egy adott esetben nem érdekel egy érték (azaz nem fogod használni), egy alulvonással ('_') jelezheted ezt:

let describe array =
    match array with
    | [| |] -> "Empty array"
    | [| x |] -> "Array with one item"
    | [| _; y |] -> "Array with two items (first item ignored)"
    | _ -> "Array with many items (all items ignored)"

describe [| |]          // => "Empty array"
describe [| 1 |]        // => "Array with one item"
describe [| 5; 7 |]     // => "Array with two items (first item ignored)"
describe [| 5; 7; 9 |]  // => "Array with many items (all items ignored)"

Az egyetlen '_' mintaillesztéskor mindig utolsóként szerepeljen; minden olyan értéket, amely nem illeszkedik a többi eset egyikére sem, ez az eset kezel.

Utasítások

Szenvedélyes madármegfigyelő vagy, aki számontartja, hány madár járt a kertedben az elmúlt hét napban.

Hat részfeladat vár rád, és mindegyik a kertedbe látogató madarak számával foglalkozik.

1. Nézd meg, mennyi volt a számuk a múlt héten

Hogy legyen mihez hasonlítanod, mindig magadnál tartod a múlt heti számok másolatát, amelyek ezek voltak: 0, 2, 5, 3, 7, 8 és 4. Definiáld a lastWeek kötést, amely a múlt heti számokat tartalmazza:

lastWeek
// => [| 0; 2; 5; 3; 7; 8; 4 |]

2. Nézd meg, hány madár járt itt tegnap

Készítsd el a yesterday függvényt, amely visszaadja, hány madár járt a kertedben tegnap. A madárszámok nap szerint követik egymást: az első elem a legrégebbi naphoz tartozó szám, az utolsó pedig a mai.

yesterday [| 3; 5; 0; 7; 4; 1 |]
// => 4

3. Számold ki, összesen hány madár járt itt

Készítsd el a total függvényt, amely visszaadja, összesen hány madár járt a kertedben:

total [| 3; 5; 0; 7; 4; 1 |]
// => 20

4. Ellenőrizd, volt-e olyan nap, amikor nem járt itt madár

Készítsd el a dayWithoutBirds függvényt, amely true-t ad vissza, ha volt olyan nap, amikor nulla madár járt a kertben; egyébként false-t ad vissza:

dayWithoutBirds [| 3; 5; 0; 7; 4; 1 |]
// => true

5. Növeld a mai nap számát

Készítsd el az incrementTodaysCount függvényt, amely megnöveli a mai nap számát, és visszaadja a frissített számokat:

let birdCount = [| 3; 5; 0; 7; 4; 1 |]
incrementTodaysCount birdCount
// => [| 3; 5; 0; 7; 4; 2 |]

6. Ellenőrizd a szokatlan hetet

Az elmúlt év során rájöttél, hogy néhány hét ugyanazt a szokatlan mintázatot mutatja:

  • A hét minden páros napján egyetlen madár sem járt itt
  • A hét minden páros napján pontosan 10 madarat figyeltél meg
  • A hét minden páratlan napján pontosan 5 madarat figyeltél meg

Készítsd el az unusualWeek függvényt, amely true-t ad vissza, ha az idei hét madárszám-mintázata megegyezik valamelyik szokatlan mintázattal:

unusualWeek [| 1; 0; 5; 0; 12; 0; 2 |]
// => true

unusualWeek [| 5; 0; 5; 12; 5; 3; 5|]
// => true

(Figyeld meg, hogy a napok paritása 1-től indexelt, nem 0-tól: a tömb első eleme egy páratlan napnak felel meg)

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
F# Exercism

Készen állsz elkezdeni a(z) Madárfigyelő 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.