Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Mailbox server exercise #72

Open
wants to merge 55 commits into
base: solutions
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
2876b3b
finish start here reading
indielab Jan 25, 2023
6ba1886
added code cell
indielab Jan 25, 2023
14df664
Merge pull request #12 from omnidelic/start-here-reading
indielab Jan 25, 2023
0a2e73c
finish github engineering journal exercise
indielab Feb 1, 2023
8a8ff71
finish github collab exercise
indielab Feb 1, 2023
7542767
finish rock paper scissors exercise
indielab Feb 1, 2023
34a0a16
finish naming numbers exercise
indielab Feb 1, 2023
c981163
finish keyword lists reading
indielab Feb 1, 2023
a55afc6
finish maps reading
indielab Feb 1, 2023
f0a47b9
finish modules reading
indielab Feb 2, 2023
8b3ab22
finish command line reading
indielab Feb 2, 2023
dbd8667
finish rpg dialogue exercise
indielab Feb 2, 2023
73b6e43
finish rock paper scissors lizard spock exercise
indielab Feb 2, 2023
5b672c1
finish ranges reading
indielab Feb 3, 2023
74dbfe7
finish fizzbuzz exercise
indielab Feb 3, 2023
a89e936
finish enum reading
indielab Feb 3, 2023
fa6599b
finish named number lists exercise
indielab Feb 3, 2023
11daeb1
finish counting votes exercise
indielab Feb 6, 2023
f4d0d12
finish animal generator exercise
indielab Feb 6, 2023
fa1f08a
finish palindrome exercise
indielab Feb 6, 2023
5feaba5
finish built-in modules reading
indielab Feb 7, 2023
0123821
finish anagram exercise
indielab Feb 7, 2023
f78fede
finish non enumerables reading
indielab Feb 7, 2023
32173e4
finish filter values by type exercise
indielab Feb 7, 2023
12b63c5
finish tic-tac-toe exercise
indielab Feb 7, 2023
7ba0bb8
finish number finder exercise
indielab Feb 8, 2023
a5d799b
finish weighted voting exercise
indielab Feb 8, 2023
c7a07c9
finish custom enum with reduce exercise
indielab Feb 9, 2023
5df5484
finish time converting exercise
indielab Feb 9, 2023
874ab0a
finish timeline exercise
indielab Feb 9, 2023
3eac094
finish strings and binaries reading
indielab Feb 10, 2023
09cb189
finish email validation exercise
indielab Feb 10, 2023
5ee25d1
finish games setup exercise
indielab Feb 13, 2023
dc4b693
finish games guessing game exercise
indielab Feb 13, 2023
5845d14
finish games rock paper scissors exercise
indielab Feb 13, 2023
d0495ff
finish exunit reading
indielab Feb 14, 2023
8f7c9fe
finish games wordle exercise
indielab Feb 16, 2023
d5b8cf3
finish typespec drills exercise
indielab Feb 16, 2023
aeab815
finish games documentation and static analysis exercise
indielab Feb 16, 2023
a87ae8c
finish typespecs reading
indielab Feb 16, 2023
b703544
finish message validation exercise
indielab Feb 21, 2023
ff5177c
finish with points exercise
indielab Feb 21, 2023
1a23ebb
finish math with guards exercise
indielab Feb 21, 2023
3764b85
finish protocols reading
indielab Feb 22, 2023
172d8c1
finish math with protocols exercise
indielab Feb 22, 2023
8e9b7d9
finish battle map exercise
indielab Feb 22, 2023
3f44dfa
finish fibonacci exercise
indielab Feb 23, 2023
1c2de3b
finish lucas numbers exercise
indielab Feb 23, 2023
4d76bc7
finish file reading
indielab Feb 26, 2023
9471ece
finish save game exercise
indielab Feb 26, 2023
0b4a006
finish file drills exercise
indielab Feb 26, 2023
5a6eb02
finish processes reading
indielab Feb 27, 2023
437d75f
finish stack server exercise
indielab Feb 28, 2023
2fc2261
finish stack exercise
indielab Mar 1, 2023
779c9f4
finish mailbox server exercise
indielab Mar 2, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions exercises/book_search.livemd
Original file line number Diff line number Diff line change
@@ -49,7 +49,7 @@ defmodule Book do

Include books that partially match the search query.
# does the query match any letter of the title?
# split the title string and enum.filter over query
# use String.contains(book, query)

iex> Book.search([%Book{title: "ABC"}], "A")
[%Book{title: "ABC"}]
@@ -63,29 +63,29 @@ defmodule Book do
iex> Book.search([%Book{title: "ABC"}], "a")
[%Book{title: "ABC"}]
"""
def fuzzy_match(string, char) do
mysplit = String.split(string, "", trim: true)
Enum.filter(mysplit, fn element -> element == char end) && string
end

# def fuzzy_match(string, char) do
# mysplit = String.split(string, "", trim: true)
# Enum.filter(mysplit, fn element -> element == char end) && string
# end

def search(books, query) do
# books that exactly match
# Enum.filter(books, fn book -> Map.get(book, :title) == query end)
book = Enum.filter(books, fn book -> Map.get(book, :title) end)
String.contains?(book, query)
# books that match one letter
Enum.filter(books, fn book -> String.contains?(book, query) end)

# books that exactly match
Enum.filter(books, fn book -> Map.get(book, :title) end)
end
end
```

```elixir
mytitle = "ABC"
myquery = "A"

mysplit = String.split(mytitle, "", trim: true)
# split string
# filter split string to see if any char == query
# if filter returns a match then return title
Enum.filter(mysplit, fn char -> myquery == char end) && mytitle
book = "ABC"
query = "D"
String.contains?(book, query)

test = %{mybook: "mytitle"}
Map.get(test, )
```

## Mark As Completed
18 changes: 18 additions & 0 deletions exercises/number_finder.livemd
Original file line number Diff line number Diff line change
@@ -37,12 +37,21 @@ defmodule NumberFinder do

iex> NumberFinder.smallest([2, 3, 1])
1

iex> NumberFinder.smallest([2, 2, 3, 4])
2

iex> NumberFinder.smallest([2, 2, 3, 4, 10, 20, -3])
-3
"""
def smallest(number_list) do
Enum.reduce(number_list, fn elem, acc ->
if acc < elem do
acc
else
elem
end
end)
end

@doc """
@@ -52,12 +61,21 @@ defmodule NumberFinder do

iex> NumberFinder.largest([2, 3, 1])
3

iex> NumberFinder.largest([2, 2, 3, 4, 4])
4

iex> NumberFinder.largest([2, 2, 3, 4, 10, 20, -3])
20
"""
def largest(number_list) do
Enum.reduce(number_list, fn elem, acc ->
if acc > elem do
acc
else
elem
end
end)
end
end
```
28 changes: 28 additions & 0 deletions exercises/weighted_voting.livemd
Original file line number Diff line number Diff line change
@@ -82,12 +82,21 @@ defmodule WeightedVoting do

iex> WeightedVoting.count([dogs: 20, dogs: 10], :dogs)
30

iex> WeightedVoting.count([cats: 10, dogs: 20, dogs: 30], :dogs)
50

iex> WeightedVoting.count([cats: 10, dogs: 20, dogs: 10, cats: 30], :cats)
40
"""
def count(votes, vote_to_count) do
Enum.reduce(votes, 0, fn {key, value}, acc ->
if key == vote_to_count do
acc + value
else
acc
end
end)
end

@doc """
@@ -100,16 +109,35 @@ defmodule WeightedVoting do

iex> WeightedVoting.tally([dogs: 20, dogs: 10])
[dogs: 30]

iex> WeightedVoting.tally([cats: 10, dogs: 20, dogs: 10])
[cats: 10, dogs: 30]

iex> WeightedVoting.tally([cats: 10, dogs: 20, cats: 20, dogs: 10, birds: 20])
[birds: 20, cats: 30, dogs: 30]
"""
def tally(votes) do
Enum.reduce(votes, [], fn {animal, value}, acc ->
Keyword.update(acc, animal, value, fn existing_value ->
value + existing_value
end)
end)
|> Enum.sort()
end
end
```

```elixir
votes = [cats: 10, dogs: 20, cats: 20, dogs: 10, birds: 20]
vote_to_count = :birds

def count(votes, vote_to_count) do
Enum.reduce(votes, fn acc, vote_to_count ->
IO.inspect(binding())
end)
end
```

### Bonus: Tally Map

Create a `WeightedVoting.tally_map/1` function which returns a map instead of a keyword list.
2 changes: 1 addition & 1 deletion progress.json
Original file line number Diff line number Diff line change
@@ -49,7 +49,7 @@
"dominoes_exercise": false,
"command_line_family_tree_exercise": false,
"phoenix_and_ecto_reading": false,
"number_finder_exercise": false,
"number_finder_exercise": true,
"pic_chat_image_upload_reading": false,
"timeline_exercise": false,
"newsletter_reading": false,