{"id":15984807,"url":"https://github.com/phra/bloomon-challenge","last_synced_at":"2025-08-25T07:34:55.504Z","repository":{"id":148083627,"uuid":"139339257","full_name":"phra/bloomon-challenge","owner":"phra","description":null,"archived":false,"fork":false,"pushed_at":"2018-07-01T15:49:35.000Z","size":192,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-04T20:47:18.935Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phra.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-07-01T15:14:41.000Z","updated_at":"2018-07-01T15:49:36.000Z","dependencies_parsed_at":"2023-05-19T03:00:18.822Z","dependency_job_id":null,"html_url":"https://github.com/phra/bloomon-challenge","commit_stats":{"total_commits":19,"total_committers":1,"mean_commits":19.0,"dds":0.0,"last_synced_commit":"92bb8e833136ac163b0a5f9ffe5c81bde1216ae2"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/phra/bloomon-challenge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phra%2Fbloomon-challenge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phra%2Fbloomon-challenge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phra%2Fbloomon-challenge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phra%2Fbloomon-challenge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phra","download_url":"https://codeload.github.com/phra/bloomon-challenge/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phra%2Fbloomon-challenge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272024774,"owners_count":24860528,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-25T02:00:12.092Z","response_time":1107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-10-08T02:10:35.927Z","updated_at":"2025-08-25T07:34:55.475Z","avatar_url":"https://github.com/phra.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Bloomon Code Challenge\n\n## Implementation\n\nSee the following asciinema for an execution recording.\n\n[![asciicast](https://asciinema.org/a/nhiafLwm9ZHAlXOIf1AYIpOZW.png)](https://asciinema.org/a/nhiafLwm9ZHAlXOIf1AYIpOZW)\n\nCodebase was migrated to TypeScript/Jest and it has a full coverage:\n\n![coverage](images/coverage.png \"Coverage\")\n\n\n## Challenge description\nBloomon has a production facility that produces bouquets. We simplified how the real one -- located in Aalsmeer -- works, for the purposes of this Code Challenge:\n\n* It takes _bouquet_ specs as input.\n* It takes _flowers_ to fill its inventory as input.\n* It produces _bouquets_ of different designs and sizes based on bouquet specs as output.\nThe _flowers_ arrive at the facility one-by-one. They are stored there until there are sufficient _flowers_ to create a _bouquet_, at which point a _bouquet_ is immediately produced.\n\nYour job is to create an application that takes the _bouquet_ specs (the designs) and a stream of _flowers_ as inputs, and produces a stream of _bouquets_ as an output. The application must be a command line application that uses standard input and output. Use the supplied scaffold project to get up and running quickly, and feel free to add, remove or modify any of the files as needed.\n\nThe solution should be submitted in a GitHub / GitLab repository, with full source code and configuration files to run on Node.js version 8 or higher. Please add \"BloomonDev\" as a collaborator to have access to the repo.\n\nCompleting the challenge should take between 2 - 4 hours, and we expect a submission in the next couple of days. If you see you're exceeding the 4 hours, you should submit your solution as-is, with a short explanation of what is left and how you would finish the challenge.\n\n### Input / output format specifications\n* _Flower_ species is indicated by a single, lowercase letter:  a - z .\n* _Flower_ size is indicated by a single, uppercase letter: L (large) and S (small).\n\n**example**: a flower: rL\n\n* _Bouquet_ name is indicated by a single, uppercase letter: A - Z .\n* _Bouquet_ size is indicated by a single, uppercase letter: L (large) and S (small).\n\n\n* A _bouquet spec_ is a single line of characters with the following format:\n\n```\n\u003cbouquet name\u003e\u003cbouquet size\u003e\u003cflower 1 quantity\u003e\u003cflower 1 species\u003e\u003cf.2 quantity\u003e\u003cf.2 species\u003e...\u003cf.N quantity\u003e\u003cf.N species\u003e\n```\n\n**example**: AL8d10r5t\n\n* The _bouquet spec_ format includes a _bouquet_ size but no _flower_ sizes. This is because large _bouquets_ are only made from large _flowers_, and small _bouquets_ are only made from small _flowers_.\n* _Flower_ species are listed in alphabetic order and only appear once in a _bouquet spec_.\n* _Flower_ quantities are always greater than 0.\n\n\n* The input stream will follow this structure:\n```\nbouquet spec1\nbouquet spec2\n\u003cempty line\u003e\nflower1\nflower2\nflower3\n...\n```\n\n**example**: \n\n```\nAS3a4b6k\nAL8d10r5t\n\naS\naS\nbL\nrL\ntS\n...\n```\n\n* Output should be the full _bouquet_ spec every time a _bouquet_ can be created.\n\n**example**: AL8d7l10r5t\n\nYou can find a sample input file in the scaffold project under /sample.\n\n### Extra task\nNote: In case you want to show off and you haven't spent the 4 hours yet you can also try to tackle this one!\n\nOur storage facility has a maximum capacity: the facility cannot store more than **256** _flowers_ at any given time. If the facility storage is full and the next _flower_ cannot be processed, the application should stop with an **exit** code of 1 and a corresponding error message.\n\n## Set up\n\nThis project provides a scaffold that you may use to begin the challenge. Feel free to use the suggested files and code, but also feel at liberty to change anything as you see fit.\n\nThe entry point can be found at src/index.js where an input/output interface has been provided using [Readline](https://nodejs.org/api/readline.html).\n\nIn src/models, we've included some classes to serve as data structures to represent _bouquet specs_ and _flowers_. \n\n### Run from source\n\nInstall dependencies `npm i` and run `npm start`.\n\n### Test\n\nRun tests with `npm test`.\n\n### Lint\n\nRun linter with `npm run lint`.\n\n## Wrap up\n\nAre you done? Great!! Please let maria.gil@bloomon.nl know that you are ready, and she will help you with next steps. Thank you for participating in our code challenge!\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphra%2Fbloomon-challenge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphra%2Fbloomon-challenge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphra%2Fbloomon-challenge/lists"}