Danil Negrienko 5cc59f9234 | ||
---|---|---|
.. | ||
.exercism | ||
lib | ||
test | ||
.formatter.exs | ||
.gitignore | ||
HELP.md | ||
HINTS.md | ||
README.md | ||
mix.exs |
README.md
High School Sweetheart
Welcome to High School Sweetheart on Exercism's Elixir Track.
If you need help running the tests or submitting your code, check out HELP.md
.
If you get stuck on the exercise, check out HINTS.md
, but try and solve it without using those first :)
Introduction
Strings
Strings in Elixir are delimited by double quotes, and they are encoded in UTF-8:
"Hi!"
Strings can be concatenated using the <>/2
operator:
"Welcome to" <> " " <> "New York"
# => "Welcome to New York"
Strings in Elixir support interpolation using the #{}
syntax:
"6 * 7 = #{6 * 7}"
# => "6 * 7 = 42"
To put a newline character in a string, use the \n
escape code:
"1\n2\n3\n"
To comfortably work with texts with a lot of newlines, use the triple-double-quote heredoc syntax instead:
"""
1
2
3
"""
Elixir provides many functions for working with strings in the String
module.
Pipe Operator
The |>
operator is called the pipe operator. It can be used to chain function calls together in such a way that the value returned by the previous function call is passed as the first argument to the next function call.
"hello"
|> String.upcase()
|> Kernel.<>("?!")
# => "HELLO?!"
Instructions
In this exercise, you are going to help high school sweethearts profess their love on social media by generating an ASCII heart with their initials:
****** ******
** ** ** **
** ** ** **
** * **
** **
** J. K. + M. B. **
** **
** **
** **
** **
** **
** **
***
*
1. Get the name's first letter
Implement the HighSchoolSweetheart.first_letter/1
function. It should take a name and return its first letter. It should clean up any unnecessary whitespace from the name.
HighSchoolSweetheart.first_letter("Jane")
# => "J"
2. Format the first letter as an initial
Implement the HighSchoolSweetheart.initial/1
function. It should take a name and return its first letter, uppercase, followed by a dot. Make sure to reuse HighSchoolSweetheart.first_letter/1
that you defined in the previous step.
HighSchoolSweetheart.initial("Robert")
# => "R."
3. Split the full name into the first name and the last name
Implement the HighSchoolSweetheart.initials/1
function. It should take a full name, consisting of a first name and a last name separated by a space, and return the initials. Make sure to reuse HighSchoolSweetheart.initial/1
that you defined in the previous step.
HighSchoolSweetheart.initials("Lance Green")
# => "L. G."
4. Put the initials inside of the heart
Implement the HighSchoolSweetheart.pair/2
function. It should take two full names and return the initials inside an ASCII heart. Make sure to reuse HighSchoolSweetheart.initials/1
that you defined in the previous step.
HighSchoolSweetheart.pair("Blake Miller", "Riley Lewis")
# => """
# ****** ******
# ** ** ** **
# ** ** ** **
# ** * **
# ** **
# ** B. M. + R. L. **
# ** **
# ** **
# ** **
# ** **
# ** **
# ** **
# ***
# *
# """
Source
Created by
- @angelikatyborska
Contributed to by
- @neenjaw