Könyvesbolt

Könyvesbolt

Közepes

Utasítások

Hogy egy népszerű, ötkötetes sorozat különböző könyveiből több példányt adjon el, egy könyvesbolt úgy döntött, hogy kedvezményt ad, ha valaki több könyvet vásárol.

Az öt könyv bármelyikének egy példánya $8-ba kerül.

Ha viszont két különböző könyvet veszel, akkor arra a két könyvre 5% kedvezményt kapsz.

Ha 3 különböző könyvet veszel, 10% kedvezményt kapsz.

Ha 4 különböző könyvet veszel, 20% kedvezményt kapsz.

Ha mind az 5-öt megveszed, 25% kedvezményt kapsz.

Vedd figyelembe, hogy ha négy könyvet veszel, amelyek közül 3 különböző cím, akkor arra a 3-ra, amelyek egy készletet alkotnak, 10% kedvezményt kapsz, a negyedik könyv ára viszont továbbra is $8.

A feladatod, hogy olyan kódot írj, amely kiszámítja bármely elképzelhető bevásárlókosár árát (amelyben csak ugyanannak a sorozatnak a könyvei vannak), a lehető legnagyobb kedvezményt alkalmazva.

Például mennyibe kerül ez a könyvkosár?

  • 2 példány az első könyvből
  • 2 példány a második könyvből
  • 2 példány a harmadik könyvből
  • 1 példány a negyedik könyvből
  • 1 példány az ötödik könyvből

Ezt a 8 könyvet az egyik lehetséges módon így csoportosíthatod:

  • 1 db 5 könyvből álló csoport (1., 2., 3., 4., 5.)
  • 1 db 3 könyvből álló csoport (1., 2., 3.)

Ez a következő végösszeget adná:

  • 5 könyv 25% kedvezménnyel
  • 3 könyv 10% kedvezménnyel

Az eredmény:

  • 5 × (100% - 25%) × $8 = 5 × $6.00 = $30.00, plusz
  • 3 × (100% - 10%) × $8 = 3 × $7.20 = $21.60

Ez összesen $51.60.

Ezt a 8 könyvet viszont másképp is csoportosíthatod:

  • 1 db 4 könyvből álló csoport (1., 2., 3., 4.)
  • 1 db 4 könyvből álló csoport (1., 2., 3., 5.)

Ez a következő végösszeget adná:

  • 4 könyv 20% kedvezménnyel
  • 4 könyv 20% kedvezménnyel

Az eredmény:

  • 4 × (100% - 20%) × $8 = 4 × $6.40 = $25.60, plusz
  • 4 × (100% - 20%) × $8 = 4 × $6.40 = $25.60

Ez összesen $51.20.

A legnagyobb kedvezményt adva pedig az ár $51.20.

WebAssembly-specifikus megjegyzések

A WebAssembly total export függvényszignatúrája a következő:

(func (export "total")
    (param $basketOffset i32)
    (param $basketLength i32)
    (result i32)
)

A két paraméter, a $basketOffset és a $basketLength egy 32 bites egészekből álló tömb alapeltolását és hosszát adja meg. A hossz paraméter a tömbben lévő elemek számában van megadva, nem bájtban. Mielőtt meghívja ezt a függvényt, a hívó beírja ezt a tömböt a WebAssembly lineáris memóriába a $basketOffset eltolástól kezdve. A WebAssembly lineáris memória mindig little-endian formában van megadva.

Például a hívó a [1,2] kosarat a következő nyolcbájtos sorozatként kódolná.

| 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 |
| --- basket[0] --- | --- basket[1] --- |
,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
WebAssembly Exercism

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

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