ChooseYourBed
A helpful Elixir library for modeling and simulating bed selection scenarios, offering a structured way to represent preferences and outcomes. This package provides tools for evaluating different bed options based on predefined criteria.
Installation
Add choose_your_bed to your list of dependencies in mix.exs:
elixir
def deps do
[
{:choose_your_bed, "~> 0.1.0"}] end
Then, run mix deps.get to fetch the dependencies.
Usage Examples
Here are a few examples demonstrating how to use the ChooseYourBed library.
Example 1: Simple Bed Evaluation elixir alias ChooseYourBed
bed1 = %{comfort: 8, support: 7, price: 1000} bed2 = %{comfort: 9, support: 6, price: 1200}
ChooseYourBed.evaluate_beds([bed1, bed2], comfort: 0.6, support: 0.4) #=> {:ok, [%{comfort: 8, support: 7, price: 1000, score: 7.6}, %{comfort: 9, support: 6, price: 1200, score: 7.8}]}
Example 2: Pattern Matching for Bed Selection elixir alias ChooseYourBed
beds = [ %{name: "Cloud Nine", comfort: 9, support: 8, price: 1500}, %{name: "Firm Foundation", comfort: 6, support: 9, price: 1200}, %{name: "Budget Bliss", comfort: 7, support: 7, price: 800} ]
case ChooseYourBed.evaluate_beds(beds, comfort: 0.7, support: 0.3) do {:ok, evaluated_beds} ->
best_bed = Enum.max_by(evaluated_beds, & &1[:score])
IO.puts "The best bed is: #{best_bed[:name]} with a score of #{best_bed[:score]}"->
IO.puts "Error: #{message}"end
Example 3: Using Pipes for Data Transformation elixir alias ChooseYourBed
beds = [ %{name: "Luxury Dream", comfort: 10, support: 9, price: 2000}, %{name: "Standard Sleep", comfort: 7, support: 8, price: 1000} ]
beds |> ChooseYourBed.evaluate_beds(comfort: 0.8, support: 0.2) |> case do {:ok, evaluated_beds} ->
Enum.sort_by(evaluated_beds, & &1[:score], :desc)
|> Enum.map(fn bed -> "Bed: #{bed[:name]}, Score: #{bed[:score]}" end)
|> Enum.each(&IO.puts/1)->
IO.puts "Error: #{message}"end
Example 4: Handling Invalid Input elixir alias ChooseYourBed
beds = [%{comfort: 5, support: 5}] # Missing price
case ChooseYourBed.evaluatebeds(beds, comfort: 0.5, support: 0.5) do {:ok, } ->
IO.puts "Evaluation successful (this should not happen)"->
IO.puts "Error: #{message}" # Expected: "Each bed must have :price, :comfort, and :support keys"end
Example 5: Custom Evaluation Function elixir alias ChooseYourBed
beds = [ %{name: "Memory Foam", comfort: 9, support: 7, temperature: "warm"}, %{name: "Latex", comfort: 8, support: 8, temperature: "cool"} ]
Extend evaluation to consider temperature
defmodule CustomBedEvaluator do import ChooseYourBed
def evaluate_beds(beds, comfort: comfort_weight, support: support_weight, temperature: temperature_pref) do
beds
|> Enum.map(fn bed ->
score = comfort_weight * bed[:comfort] + support_weight * bed[:support] +
case {bed[:temperature], temperature_pref} do
{"warm", "warm"} -> 1
{"cool", "cool"} -> 1
_ -> 0
end
Map.put(bed, :score, score)
end)
|> then(fn evaluated_beds -> {:ok, evaluated_beds} end)end end
case CustomBedEvaluator.evaluate_beds(beds, comfort: 0.4, support: 0.4, temperature: "cool") do {:ok, evaluated_beds} ->
Enum.each(evaluated_beds, fn bed -> IO.puts "Bed: #{bed[:name]}, Score: #{bed[:score]}" end)->
IO.puts "Error: #{message}"end
Feature Summary
- Provides a structured way to represent bed characteristics.
- Offers a simple evaluation function based on weighted criteria.
- Supports pattern matching for easy bed selection based on evaluation results.
- Designed to be extensible and adaptable to custom evaluation logic.
- Provides error handling for invalid bed data.
License
MIT
This package is part of the choose-your-bed ecosystem. For advanced features and enterprise-grade tools, visit: https://supermaker.ai/blog/how-to-make-the-viral-choose-your-bed-videos-with-ai/