📝Test assignment for Ruby on Rails Developer position
For the example input
14 MB11
you want the following output:
14 MB11 $54.8
1 x 8 $24.95
3 x 2 $9.95
but there is another solution with the same number of packs:
14 MB11 $53.8
2 x 5 $16.95
2 x 2 $9.95
The only difference is price. So I assume, that I need to:
$ chmod +x example/benchmarks/benchmark.sh
$ ./example/benchmarks/benchmark.sh
To make this application production-ready: implement an algorythm to simplify Linear Diophantine Equation:
https://habrahabr.ru/post/330632/
I use config file located at config/inventory.yml
to store inventory/menu (products and packs).
To make this application production-ready: use a database to store inventory/menu + create an Admin UI to manage it.
Ruby 2.7.x or Docker
$ gem install bundler
$ bundle
You can run a script and input data from keyboard. Use CTRL-D to send EOF.
$ bundle exec ruby lib/bakery_runner.rb
You can provide a file with example data
$ ruby lib/bakery_runner.rb example/input.txt
$ ruby lib/bakery_runner.rb < example/input.txt
$ cat example/input.txt | bundle exec ruby lib/bakery_runner.rb
$ docker build -t bakery .
You can run a script and input data from keyboard. Use CTRL-D to send EOF.
$ docker run -i bakery
You can provide a file with example data
$ cat example/input.txt | docker run -i bakery
$ gem install bundler
$ bundle
$ rake
There is an example file example/run_within_your_application.rb
.
validations:
empty code, empty name, empty price, empty count etc.
A bakery used to base the price of their produce on an individual item cost. So if a customer ordered 10 cross buns then they would be charged 10x the cost of a single bun. The bakery has decided to start selling their produce prepackaged in bunches and charging the customer on a per pack basis. So if the shop sold vegemite scroll in packs of 3 and 5 and a customer ordered 8 they would get a pack of 3 and a pack of 5. The bakery currently sells the following products:
Name | Code | Packs |
---|---|---|
Vegemite Scroll | VS5 | 3 @ $6.99 5 @ $8.99 |
Blueberry Muffin | MB11 | 2 @ $9.95 5 @ $16.95 8 @ $24.95 |
Croissant | CF | 3 @ $5.95 5 @ $9.95 9 @ $16.99 |
Given a customer order you are required to determine the cost and pack breakdown for each product. To save on shipping space each order should contain the minimal number of packs.
Each order has a series of lines with each line containing the number of items followed by the product code.
An example input:
10 VS5
14 MB11
13 CF
A successfully passing test(s) that demonstrates the following output:
10 VS5 $17.98
2 x 5 $8.99
14 MB11 $54.8
1 x 8 $24.95
3 x 2 $9.95
13 CF $25.85
2 x 5 $9.95
1 x 3 $5.95