Ha Raspberry Pi segítségével szeretnél valamit építeni, valószínűleg ellenállásokat fogsz használni. Ehhez a feladathoz csak három dolgot kell tudnod róluk:
Minden ellenállásnak van egy ellenállásértéke.
Az ellenállások kicsik, olyannyira, hogy ha rájuk nyomtatnák az ellenállásértéküket, nehéz lenne leolvasni. Hogy ezt a problémát megkerüljék, a gyártók színkódolt sávokat nyomtatnak az ellenállásokra, amelyek jelzik az ellenállásértéküket.
Minden sáv egy szám egyik számjegyeként viselkedik. Ha például egy brown sávot (értéke 1) nyomtatnának ki, majd utána egy green sávot (értéke 5), az a 15-ös számot jelentené. Ebben a feladatban egy hasznos programot készítesz, hogy ne kelljen megjegyezned a sávok értékeit. A program bemenetként 3 színt kap, és kiadja a helyes értéket ohmban. A színsávok kódolása a következő:
black: 0
brown: 1
red: 2
orange: 3
yellow: 4
green: 5
blue: 6
violet: 7
grey: 8
white: 9
Az Ellenállás színkód duó feladatban az első két színt fejtetted meg.
Például az orange-orange a 33 főértéket adta.
A harmadik szín azt jelöli, hány nullát kell a főértékhez fűzni.
A főérték a nullákkal együtt adja meg az ohmban kifejezett értéket.
A feladat szempontjából nem számít, hogy mi is az az ohm valójában.
Például:
(Ha a matek a te világod, a nullákra gondolhatsz úgy is, mint a 10 kitevőire. Ha nem a matek a te világod, maradj a nulláknál. Ez valójában ugyanaz, csak hétköznapi nyelven elmondva a matek szakzsargonja helyett.)
Ez a feladat arról szól, hogy a színeket egy felirattá alakítsd:
„... ohms”
Tehát a "orange", "orange", "black" bemenetre ezt kell visszaadnia:
„33 ohms”
A nagyobb ellenállásoknál a nagyobb ohmértéket egy metrikus előtag jelöli, például a „kiloohms” esetében. Ez ahhoz hasonló, mint amikor azt mondjuk, hogy „2 kilométer” a „2000 méter” helyett, vagy „2 kilogramm” a „2000 gramm” helyett.
Például a "orange", "orange", "orange" bemenetre ezt kell visszaadnia:
„33 kiloohms”
A label és az ohms függvényt kell megvalósítanod. A label esetében
használhatod a megadott szignatúrát, de ne hagyd, hogy az korlátozza a
kreativitásodat.
Ez a feladat szöveges adatokkal dolgozik. Történelmi okokból a Haskell
String típusa a [Char] szinonimája, ami karakterek listája. A szöveges
adatok hatékonyabb kezeléséhez a Text típus használható.
A feladat opcionális kiterjesztéseként a következőket teheted:
Olvass a Haskell stringtípusairól.
Add hozzá a - text sort a függőségeid listájához a package.yaml fájlban.
Importáld a Data.Text modult a következő módon:
import qualified Data.Text as T
import Data.Text (Text)
Most már írhatsz például ilyet: label :: Resistor -> Text, és hivatkozhatsz a Data.Text kombinátoraira, például így: T.pack.
Nézd meg a Data.Text dokumentációját,
Ez a rész teljesen opcionális.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Haskell nyelvet 107 feladat segítségével, valódi emberi mentorálással, mindez ingyen.