# 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: ```elixir "Hi!" ``` Strings can be concatenated using the `<>/2` operator: ```elixir "Welcome to" <> " " <> "New York" # => "Welcome to New York" ``` Strings in Elixir support interpolation using the `#{}` syntax: ```elixir "6 * 7 = #{6 * 7}" # => "6 * 7 = 42" ``` To put a newline character in a string, use the `\n` escape code: ```elixir "1\n2\n3\n" ``` To comfortably work with texts with a lot of newlines, use the triple-double-quote heredoc syntax instead: ```elixir """ 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. ```elixir "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. ```elixir 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. ```elixir 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. ```elixir 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. ```elixir HighSchoolSweetheart.pair("Blake Miller", "Riley Lewis") # => """ # ****** ****** # ** ** ** ** # ** ** ** ** # ** * ** # ** ** # ** B. M. + R. L. ** # ** ** # ** ** # ** ** # ** ** # ** ** # ** ** # *** # * # """ ``` ## Source ### Created by - @angelikatyborska ### Contributed to by - @neenjaw