Friday Programming Quiz [modified]
-
Given: 1. A list of cocktail recipes. Each recipe consists of ingredients . 2. A list of ingredients in stock The problem: Find all the cocktails in the list of cocktails that can be made using the ingredients in stock. Let's not consider the quantities in stock and assume that they are infinite. Example: Ingredients in stock: Vodka, Rum, 151 Rum, Beer, Amaretto, Kahlua, Skim Milk, Mint, Sugar Recipes: Anna Kournikova: Vodka, Kahlua, Skim Milk Flaming Dr Pepper: Beer, 151 Rum, Amaretto Pina Colada: Rum, Coconut Juice, Pineapple Juice Mint Julep: Mint, Bourbon, Sugar The output should be: Anna Kournikova, Flaming Dr Pepper -- modified at 17:57 Friday 11th May, 2007 Use a language of your choice and Data Structures of your choice -- modified at 19:06 Friday 11th May, 2007
Rama Krishna Vavilala wrote:
Beer
Mmmmmmm....beer....friday night......brain go byebye.....beeeer
:josh: My WPF Blog[^] FYI - Bob is a scarecrow who keeps Chuck Norris away from CodeProject.
-
Given: 1. A list of cocktail recipes. Each recipe consists of ingredients . 2. A list of ingredients in stock The problem: Find all the cocktails in the list of cocktails that can be made using the ingredients in stock. Let's not consider the quantities in stock and assume that they are infinite. Example: Ingredients in stock: Vodka, Rum, 151 Rum, Beer, Amaretto, Kahlua, Skim Milk, Mint, Sugar Recipes: Anna Kournikova: Vodka, Kahlua, Skim Milk Flaming Dr Pepper: Beer, 151 Rum, Amaretto Pina Colada: Rum, Coconut Juice, Pineapple Juice Mint Julep: Mint, Bourbon, Sugar The output should be: Anna Kournikova, Flaming Dr Pepper -- modified at 17:57 Friday 11th May, 2007 Use a language of your choice and Data Structures of your choice -- modified at 19:06 Friday 11th May, 2007
Here's an oddball language. Prolog. We did a similar solution involving restaurants and meals in my programming languages class a few quarters ago. Here's the adaptation for this problem. (I'm half betting/half hoping that nobody will actually plug this into a prolog interpreter...as I didn't actually check any of it. ;P This should work though.)
item(Vodka).
item(Rum).
item(OneFiftyOneRum).
item(Beer).
item(Amaretto).
item(Kahlua).
item(SkimMilk).
item(Mint).
item(Sugar).
item(CoconutJuice).
item(PineappleJuice);
item(Bourbon).drink(AnnaKournikova, [Vodka, Kahlua, SkimMilk]).
drink(FlamingDrPepper, [Beer, OneFiftyOneRum, Amaretto]).
drink(PinaColada, [Rum, CoconutJuice, PineappleJuice]).
drink(MintJulep, [Mint, Bourbon, Sugar]).stock([Vodka, Rum, OneFiftyOneRum, Beer, Amaretto, Kahlua, SkimMilk, Mint, Sugar]).
% Determines if the Drink is made with the given Ingredients
canBeMade(Drink, Ingredients) :-
drink(Drink, ActualIngredients), % Get the ingredients in the meal
intersection(ActualIngredients, Ingredients, Intersect), % Get the intersection of the actual ingredients with the specified ingredients
ActualIngredients = Intersect. % Check that they're equal% Print a list
print_list([]).
print_list([H|T]) :- print(H), print_list(T).:- print_list(canBeMade(_, stock)).
Last modified: 28mins after originally posted --
We are certainly uncertain at least I'm pretty sure I am...
-
Rama Krishna Vavilala wrote:
Given: 1. A list of cocktail recipes. Each recipe consists of ingredients . 2. A list of ingredients in stock The problem: Find all the cocktails in the list of cocktails that can be made using the ingredients in stock. Let's not consider the quantities in stock and assume that they are infinite. Example: Ingredients in stock: Vodka, Rum, 151 Rum, Beer, Amaretto, Kahlua, Skim Milk, Mint, Sugar Recipes: Anna Kournikova: Vodka, Kahlua, Skim Milk Flaming Dr Pepper: Beer, 151 Rum, Amaretto Pina Colada: Rum, Coconut Juice, Pineapple Juice Mint Julep: Mint, Bourbon, Sugar The output should be: Anna Kournikova, Pina Colada -- modified at 17:57 Friday 11th May, 2007 Use a language of your choice and Data Structures of your choice -- modified at 17:58 Friday 11th May, 2007
Given that there isn't any Coconut Juice or Pinapple Juice in stock, did you want an algorithm with a bug which adds them in (and removes the Beer, 151 Rum, and Amaretto)? Just curious.
m.bergman
-- For Bruce Schneier, quanta only have one state : afraid.
It should instruct the robot to go to the store.
-
Given: 1. A list of cocktail recipes. Each recipe consists of ingredients . 2. A list of ingredients in stock The problem: Find all the cocktails in the list of cocktails that can be made using the ingredients in stock. Let's not consider the quantities in stock and assume that they are infinite. Example: Ingredients in stock: Vodka, Rum, 151 Rum, Beer, Amaretto, Kahlua, Skim Milk, Mint, Sugar Recipes: Anna Kournikova: Vodka, Kahlua, Skim Milk Flaming Dr Pepper: Beer, 151 Rum, Amaretto Pina Colada: Rum, Coconut Juice, Pineapple Juice Mint Julep: Mint, Bourbon, Sugar The output should be: Anna Kournikova, Flaming Dr Pepper -- modified at 17:57 Friday 11th May, 2007 Use a language of your choice and Data Structures of your choice -- modified at 19:06 Friday 11th May, 2007
I started coding in C++ and drinking at the same time. This is not going to be pretty. :)
Chris Meech I am Canadian. [heard in a local bar]
-
Given: 1. A list of cocktail recipes. Each recipe consists of ingredients . 2. A list of ingredients in stock The problem: Find all the cocktails in the list of cocktails that can be made using the ingredients in stock. Let's not consider the quantities in stock and assume that they are infinite. Example: Ingredients in stock: Vodka, Rum, 151 Rum, Beer, Amaretto, Kahlua, Skim Milk, Mint, Sugar Recipes: Anna Kournikova: Vodka, Kahlua, Skim Milk Flaming Dr Pepper: Beer, 151 Rum, Amaretto Pina Colada: Rum, Coconut Juice, Pineapple Juice Mint Julep: Mint, Bourbon, Sugar The output should be: Anna Kournikova, Flaming Dr Pepper -- modified at 17:57 Friday 11th May, 2007 Use a language of your choice and Data Structures of your choice -- modified at 19:06 Friday 11th May, 2007
Hmmm... now that I think of it, I think my Set class could be useful here. If the set R (recipe) is a subset of the set I (available ingredients) then we can make that drink. -- modified at 21:52 Friday 11th May, 2007
namespace Template
{
public partial class
Template
{
private static PIEBALD.Types.Set<string> I = new PIEBALD.Types.Set<string>
(
"Vodka"
,
"Rum"
,
"151 Rum"
,
"Beer"
,
"Amaretto"
,
"Kahlua"
,
"Skim Milk"
,
"Mint"
,
"Sugar"
) ;private static void CanMake ( string Name , PIEBALD.Types.Set<string> R ) { System.Console.WriteLine ( "You can{0} make a/n {1}" , (R<=I)?"":"not" , Name ) ; return ; } \[System.STAThreadAttribute\] public static int Main ( string\[\] args ) { try { I.EqualityComparer = System.StringComparer.CurrentCultureIgnoreCase ; CanMake ( "Anna Kournikova" , new PIEBALD.Types.Set<string> ( "Vodka" , "Kahlua" , "Skim Milk" ) ) ; CanMake ( "Flaming Dr Pepper" , new PIEBALD.Types.Set<string> ( "Beer" , "151 Rum" , "Amaretto" ) ) ; CanMake ( "Pina Colada" , new PIEBALD.Types.Set<string> ( "Rum" , "Coconut Juice" , "Pineapple Juice" ) ) ;
-
Here's an oddball language. Prolog. We did a similar solution involving restaurants and meals in my programming languages class a few quarters ago. Here's the adaptation for this problem. (I'm half betting/half hoping that nobody will actually plug this into a prolog interpreter...as I didn't actually check any of it. ;P This should work though.)
item(Vodka).
item(Rum).
item(OneFiftyOneRum).
item(Beer).
item(Amaretto).
item(Kahlua).
item(SkimMilk).
item(Mint).
item(Sugar).
item(CoconutJuice).
item(PineappleJuice);
item(Bourbon).drink(AnnaKournikova, [Vodka, Kahlua, SkimMilk]).
drink(FlamingDrPepper, [Beer, OneFiftyOneRum, Amaretto]).
drink(PinaColada, [Rum, CoconutJuice, PineappleJuice]).
drink(MintJulep, [Mint, Bourbon, Sugar]).stock([Vodka, Rum, OneFiftyOneRum, Beer, Amaretto, Kahlua, SkimMilk, Mint, Sugar]).
% Determines if the Drink is made with the given Ingredients
canBeMade(Drink, Ingredients) :-
drink(Drink, ActualIngredients), % Get the ingredients in the meal
intersection(ActualIngredients, Ingredients, Intersect), % Get the intersection of the actual ingredients with the specified ingredients
ActualIngredients = Intersect. % Check that they're equal% Print a list
print_list([]).
print_list([H|T]) :- print(H), print_list(T).:- print_list(canBeMade(_, stock)).
Last modified: 28mins after originally posted --
We are certainly uncertain at least I'm pretty sure I am...
David Stone wrote:
oddball language. Prolog
Hey! That's my second favorite language. (First one being Scheme).
-
Given: 1. A list of cocktail recipes. Each recipe consists of ingredients . 2. A list of ingredients in stock The problem: Find all the cocktails in the list of cocktails that can be made using the ingredients in stock. Let's not consider the quantities in stock and assume that they are infinite. Example: Ingredients in stock: Vodka, Rum, 151 Rum, Beer, Amaretto, Kahlua, Skim Milk, Mint, Sugar Recipes: Anna Kournikova: Vodka, Kahlua, Skim Milk Flaming Dr Pepper: Beer, 151 Rum, Amaretto Pina Colada: Rum, Coconut Juice, Pineapple Juice Mint Julep: Mint, Bourbon, Sugar The output should be: Anna Kournikova, Flaming Dr Pepper -- modified at 17:57 Friday 11th May, 2007 Use a language of your choice and Data Structures of your choice -- modified at 19:06 Friday 11th May, 2007
Here's my entry: http://www.shog9.com/drinks/drinks.html [^] (Firefox only. Kinda works in Opera, IE throws away newlines, which kinda defeats the purpose of including a parser) The code is terrible, and i freely admit it; also, it doesn't quite work the way you described it... but i like how it works, so i just kinda went with it. As a bonus, it also has the proper ingredient list for a mint julep... :rolleyes: Now, if you'll excuse me, all this coding has made me thirsty...
----
i hope you are feeling sleepy for people not calling you by the same.
--BarnaKol on abusive words
-
Here's my entry: http://www.shog9.com/drinks/drinks.html [^] (Firefox only. Kinda works in Opera, IE throws away newlines, which kinda defeats the purpose of including a parser) The code is terrible, and i freely admit it; also, it doesn't quite work the way you described it... but i like how it works, so i just kinda went with it. As a bonus, it also has the proper ingredient list for a mint julep... :rolleyes: Now, if you'll excuse me, all this coding has made me thirsty...
----
i hope you are feeling sleepy for people not calling you by the same.
--BarnaKol on abusive words
Hey Shog, There is just a blank page. Seems you have coded in a drinking mood means there should be an error but nothing is there.
Regards, Satips.
-
Hey Shog, There is just a blank page. Seems you have coded in a drinking mood means there should be an error but nothing is there.
Regards, Satips.
-
Given: 1. A list of cocktail recipes. Each recipe consists of ingredients . 2. A list of ingredients in stock The problem: Find all the cocktails in the list of cocktails that can be made using the ingredients in stock. Let's not consider the quantities in stock and assume that they are infinite. Example: Ingredients in stock: Vodka, Rum, 151 Rum, Beer, Amaretto, Kahlua, Skim Milk, Mint, Sugar Recipes: Anna Kournikova: Vodka, Kahlua, Skim Milk Flaming Dr Pepper: Beer, 151 Rum, Amaretto Pina Colada: Rum, Coconut Juice, Pineapple Juice Mint Julep: Mint, Bourbon, Sugar The output should be: Anna Kournikova, Flaming Dr Pepper -- modified at 17:57 Friday 11th May, 2007 Use a language of your choice and Data Structures of your choice -- modified at 19:06 Friday 11th May, 2007
Very nice quiz for functional languages :-). In F# it looks like this:
let drinks = [
("Anna Kournikova", ["Vodka"; "Kahlua"; "Skim Milk"]);
("Flaming Dr Pepper", ["Beer"; "151 Rum"; "Amaretto"]);
("Pina Colada", ["Rum"; "Coconut Juice"; "Pineapple Juice"]);
("Mint Julep", ["Mint"; "Bourbon"; "Sugar"])];;
let ingred =
["Vodka"; "Rum"; "151 Rum"; "Beer"; "Amaretto";
"Kahlua"; "Skim Milk"; "Mint"; "Sugar"];;let ingset = Set.of_list ingred;;
drinks |> List.filter (fun (_, ing) -> ing |> Seq.for_all ingset.Contains )
|> List.map fst;;Homepage: TomasP.net | Photo of the month: Calendar | C# and LINQ, F#, Phalanger: My Blog
Latest article: Phalanger, PHP for .NET: Introduction for .NET developers -
Very nice quiz for functional languages :-). In F# it looks like this:
let drinks = [
("Anna Kournikova", ["Vodka"; "Kahlua"; "Skim Milk"]);
("Flaming Dr Pepper", ["Beer"; "151 Rum"; "Amaretto"]);
("Pina Colada", ["Rum"; "Coconut Juice"; "Pineapple Juice"]);
("Mint Julep", ["Mint"; "Bourbon"; "Sugar"])];;
let ingred =
["Vodka"; "Rum"; "151 Rum"; "Beer"; "Amaretto";
"Kahlua"; "Skim Milk"; "Mint"; "Sugar"];;let ingset = Set.of_list ingred;;
drinks |> List.filter (fun (_, ing) -> ing |> Seq.for_all ingset.Contains )
|> List.map fst;;Homepage: TomasP.net | Photo of the month: Calendar | C# and LINQ, F#, Phalanger: My Blog
Latest article: Phalanger, PHP for .NET: Introduction for .NET developers... or if you want just a one line version (excluding the data initialization), then it can be written like this:
drinks |> List.filter (snd >> Seq.for_all ingset.Contains) |> List.map fst
:rolleyes:
Homepage: TomasP.net | Photo of the month: Calendar | C# and LINQ, F#, Phalanger: My Blog
Latest article: Phalanger, PHP for .NET: Introduction for .NET developers -
Here's my entry: http://www.shog9.com/drinks/drinks.html [^] (Firefox only. Kinda works in Opera, IE throws away newlines, which kinda defeats the purpose of including a parser) The code is terrible, and i freely admit it; also, it doesn't quite work the way you described it... but i like how it works, so i just kinda went with it. As a bonus, it also has the proper ingredient list for a mint julep... :rolleyes: Now, if you'll excuse me, all this coding has made me thirsty...
----
i hope you are feeling sleepy for people not calling you by the same.
--BarnaKol on abusive words
I love it!
-
I love it!
-
Very nice quiz for functional languages :-). In F# it looks like this:
let drinks = [
("Anna Kournikova", ["Vodka"; "Kahlua"; "Skim Milk"]);
("Flaming Dr Pepper", ["Beer"; "151 Rum"; "Amaretto"]);
("Pina Colada", ["Rum"; "Coconut Juice"; "Pineapple Juice"]);
("Mint Julep", ["Mint"; "Bourbon"; "Sugar"])];;
let ingred =
["Vodka"; "Rum"; "151 Rum"; "Beer"; "Amaretto";
"Kahlua"; "Skim Milk"; "Mint"; "Sugar"];;let ingset = Set.of_list ingred;;
drinks |> List.filter (fun (_, ing) -> ing |> Seq.for_all ingset.Contains )
|> List.map fst;;Homepage: TomasP.net | Photo of the month: Calendar | C# and LINQ, F#, Phalanger: My Blog
Latest article: Phalanger, PHP for .NET: Introduction for .NET developersX| I took functional programming as a module in the final year of my degree, 13 years ago. I thought it would be "interesting" compared to some of the other more essay-based modules. Hoo boy, it was interesting alright! We were using a language called Gopher IIRC. During the 3 hour final exam, most people (including myself) had left before the first hour was up, unable to answer most of the questions. There was an inquiry into the difficulty of the exam paper after this, and the papers were re-evaluated and marked up. It looked like an interesting idea, but I've yet to see anything useful written in it... As wikipedia[^] states, it finds most application in academia rather than commercial software development. And IMHO, it should stay in academia too - well away from me! ;P
Sunrise Wallpaper Project | The StartPage Randomizer | A Random Web Page
-
Very nice quiz for functional languages :-). In F# it looks like this:
let drinks = [
("Anna Kournikova", ["Vodka"; "Kahlua"; "Skim Milk"]);
("Flaming Dr Pepper", ["Beer"; "151 Rum"; "Amaretto"]);
("Pina Colada", ["Rum"; "Coconut Juice"; "Pineapple Juice"]);
("Mint Julep", ["Mint"; "Bourbon"; "Sugar"])];;
let ingred =
["Vodka"; "Rum"; "151 Rum"; "Beer"; "Amaretto";
"Kahlua"; "Skim Milk"; "Mint"; "Sugar"];;let ingset = Set.of_list ingred;;
drinks |> List.filter (fun (_, ing) -> ing |> Seq.for_all ingset.Contains )
|> List.map fst;;Homepage: TomasP.net | Photo of the month: Calendar | C# and LINQ, F#, Phalanger: My Blog
Latest article: Phalanger, PHP for .NET: Introduction for .NET developersTomas Petricek wrote:
Very nice quiz for functional languages
I agree - I used Haskell rather than F# (and algebraic data types rather than just lists):
module Cocktails where ingredients = ["Vodka", "Rum", "151 Rum", "Beer", "Amaretto", "Kahlua", "Skim Milk", "Mint", "Sugar"] data Cocktail = Recipe { name::String, uses::[String]} deriving (Show) recipes = [ Recipe "Anna Kournikova" ["Vodka", "Kahlua", "Skim Milk"], Recipe "Flaming Dr Pepper" ["Beer", "151 Rum", "Amaretto"], Recipe "Pina Colada" ["Rum", "Coconut Juice", "Pineapple Juice"], Recipe "Mint Julep" ["Mint", "Bourbon", "Sugar"]] haveIngredients i (Recipe _ uses) = all (`elem` i) uses canMake recipes ingredients = map name $ filter (haveIngredients ingredients) recipes
Mmmmmm - Haskell :)
-
X| I took functional programming as a module in the final year of my degree, 13 years ago. I thought it would be "interesting" compared to some of the other more essay-based modules. Hoo boy, it was interesting alright! We were using a language called Gopher IIRC. During the 3 hour final exam, most people (including myself) had left before the first hour was up, unable to answer most of the questions. There was an inquiry into the difficulty of the exam paper after this, and the papers were re-evaluated and marked up. It looked like an interesting idea, but I've yet to see anything useful written in it... As wikipedia[^] states, it finds most application in academia rather than commercial software development. And IMHO, it should stay in academia too - well away from me! ;P
Sunrise Wallpaper Project | The StartPage Randomizer | A Random Web Page
The basic idea of functional programming (i.e. functions are first class types) is incredibly useful. Add currying and closures into the mix and you have something even more incredibly useful. The tricky thing with most functional languages is the immutability of data, which is what gives referential transparency (which is useful for other reasons) - however, that's not necessary for getting at least some of the benefits of FP. C++ with Boost.Function[^] and Boost.Lambda[^] does the job for me when I'm at work.
-
Here's an oddball language. Prolog. We did a similar solution involving restaurants and meals in my programming languages class a few quarters ago. Here's the adaptation for this problem. (I'm half betting/half hoping that nobody will actually plug this into a prolog interpreter...as I didn't actually check any of it. ;P This should work though.)
item(Vodka).
item(Rum).
item(OneFiftyOneRum).
item(Beer).
item(Amaretto).
item(Kahlua).
item(SkimMilk).
item(Mint).
item(Sugar).
item(CoconutJuice).
item(PineappleJuice);
item(Bourbon).drink(AnnaKournikova, [Vodka, Kahlua, SkimMilk]).
drink(FlamingDrPepper, [Beer, OneFiftyOneRum, Amaretto]).
drink(PinaColada, [Rum, CoconutJuice, PineappleJuice]).
drink(MintJulep, [Mint, Bourbon, Sugar]).stock([Vodka, Rum, OneFiftyOneRum, Beer, Amaretto, Kahlua, SkimMilk, Mint, Sugar]).
% Determines if the Drink is made with the given Ingredients
canBeMade(Drink, Ingredients) :-
drink(Drink, ActualIngredients), % Get the ingredients in the meal
intersection(ActualIngredients, Ingredients, Intersect), % Get the intersection of the actual ingredients with the specified ingredients
ActualIngredients = Intersect. % Check that they're equal% Print a list
print_list([]).
print_list([H|T]) :- print(H), print_list(T).:- print_list(canBeMade(_, stock)).
Last modified: 28mins after originally posted --
We are certainly uncertain at least I'm pretty sure I am...
David Stone wrote:
% Print a list print_list([]). print_list([H|T]) :- print(H), print_list(T).
Does Prolog not have a
map
function? -
X| I took functional programming as a module in the final year of my degree, 13 years ago. I thought it would be "interesting" compared to some of the other more essay-based modules. Hoo boy, it was interesting alright! We were using a language called Gopher IIRC. During the 3 hour final exam, most people (including myself) had left before the first hour was up, unable to answer most of the questions. There was an inquiry into the difficulty of the exam paper after this, and the papers were re-evaluated and marked up. It looked like an interesting idea, but I've yet to see anything useful written in it... As wikipedia[^] states, it finds most application in academia rather than commercial software development. And IMHO, it should stay in academia too - well away from me! ;P
Sunrise Wallpaper Project | The StartPage Randomizer | A Random Web Page
I admit that my code may look a bit scary because I used a few "advanced" functional tricks, but once you get the idea than it is easy to understand and easy to write. When I attended my functional programming class I didn't understand anythin either and I wasn't very interested in playing with it to learn it because it is quite difficult to do anything fancy in Haskell, but than I started playing with F# which is a lot of fun because you can use everything from .NET so it's very easy to start... Anyway, I think that functional programming is slowly getting into a real world - look at C# 3.0 or Python - they both have quite a lot functional concepts in them...
Homepage: TomasP.net | Photo of the month: Calendar | C# and LINQ, F#, Phalanger: My Blog
Latest article: Phalanger, PHP for .NET: Introduction for .NET developers -
David Stone wrote:
% Print a list print_list([]). print_list([H|T]) :- print(H), print_list(T).
Does Prolog not have a
map
function?I'm sure it does...but we weren't allowed to use it in the programming languages class I was in. Since I just copied the code wholesale, I figured I'd include that. ;)
We are certainly uncertain at least I'm pretty sure I am...
-
I'm sure it does...but we weren't allowed to use it in the programming languages class I was in. Since I just copied the code wholesale, I figured I'd include that. ;)
We are certainly uncertain at least I'm pretty sure I am...
David Stone wrote:
Since I just copied the code wholesale, I figured I'd include that.
Hey - code reuse - can't criticise that :)