任意の文字列に対してn番目の文字を消し、消したあとの文字列を出力するメソッドを作りましょう(Elixir)

# はじめに
- [Elixir](https://elixir-lang.org/) 楽しんでいますか :bangbang::bangbang::bangbang:
- @bon_engさんの「[【Ruby】RubyのAPI問題](https://qiita.com/bon_eng/items/94cb76306740c0ce77a8)」を[Elixir](https://elixir-lang.org/)でやってみました
- @piacerex さんが<font color="purple">$\huge{beautiful}$</font>にしてくださいました！
    - https://qiita.com/torifukukaiou/items/6a4649c1d72bf49c92f0#comment-8cab49ab9751181a36ad
    - :thumbsup::thumbsup_tone1::thumbsup_tone2::thumbsup_tone3::thumbsup_tone4::thumbsup_tone5:  
- 2021/1/25(月)に開催した[autoracex #5](https://autoracex.connpass.com/event/202437/)の成果とします
    - なんと7名の方が参加してくださいました！

# 準備
- [Elixir](https://elixir-lang.org/) をインストールしましょう
- 手前味噌ですが、[インストール](https://qiita.com/torifukukaiou/items/d04d0273749c41eb50af#0-%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)などをご参照ください

## うまくいかなかったら
- 何事にも準備が肝心です
- ここが一番つまらないし、謎にハマってしまうことが多いのですが、がんばってください！
- うまくいかなかったら、**思い切って僕の胸に飛び込んで来てほしい** (by 長嶋茂雄 読売ジャイアンツ終身名誉監督)
    - [elixirjp.slack.com slack workspace](https://elixirjp.slack.com/join/shared_invite/enQtODE0NjM3NTIyNTMzLTU5NmViZDE4N2Q3MGUyMmI5YTdlNmQ2ZDI4ZDgxZGZiYTVlYmJjOTMzYzk2NGUyMjBhMTBiNDdjYTg3ZjhmYWI)か[NervesJP workspace](https://join.slack.com/t/nerves-jp/shared_invite/enQtNzc0NTM1OTA5MzQ1LTg5NTAyYThiYzRlNDRmNDIwM2ZlZTJiZDc1MmE5NTFjYzA5OTE4ZTM5OWQxODFhZjY1NWJmZTc4NThkMjQ1Yjk)に入ってきていただいて、`@torifukukaiou`へご質問ください
    - たとえ私が答えられなくても、マジみんな親切で優しい人が多いので、きっと解決できるでしょう:bangbang:

# mix new

```
$ mix new awesome
$ cd awesome
```

# ソースコードを書く

## イカしている :rocket::rocket::rocket::rocket::rocket: 
- **2021/01/25 追記**
    - https://qiita.com/torifukukaiou/items/6a4649c1d72bf49c92f0#comment-8cab49ab9751181a36ad
    - @piacerex さんが<font color="purple">$\huge{beautiful}$</font>にしてくださいました！
    - :thumbsup::thumbsup_tone1::thumbsup_tone2::thumbsup_tone3::thumbsup_tone4::thumbsup_tone5:
- <font color="purple">$\huge{こちらが本線です}$</font>

```elixir:lib/awesome.ex
defmodule Awesome do
  @doc """
  missing_char

  ## Examples

      iex> Awesome.missing_char("kitten", 1)
      "itten"

      iex> Awesome.missing_char("kitten", 2)
      "ktten"

      iex> Awesome.missing_char("kitten", 3)
      "kiten"

      iex> Awesome.missing_char("kitten", 4)
      "kiten"

      iex> Awesome.missing_char("kitten", 5)
      "kittn"

      iex> Awesome.missing_char("kitten", 6)
      "kitte"
  """
  def missing_char(str, n) do
    str
    |> String.to_charlist()
    |> List.delete_at(n - 1)
    |> List.to_string()
  end
end
```

- [文字列（≒バイナリ）は、リストに変換すれば、EnumやListが使える…というイディオムを押さえておくとグッドです :wink: 正規表現もRegex .compileで動的なパターンマッチを構築できるってのも、これまた強力な処理系を構築するためのワザです :stuck_out_tongue_winking_eye:](https://twitter.com/piacere_ex/status/1353556333224579073)
  - :point_up::point_up_tone1::point_up_tone2::point_up_tone3::point_up_tone4::point_up_tone5: @piacerex さんの解説 :pray::pray_tone1::pray_tone2::pray_tone3::pray_tone4::pray_tone5:


## イケていない
- 私が当初、記事に掲載していたもの
- :point_down::point_down_tone1::point_down_tone2::point_down_tone3::point_down_tone4::point_down_tone5: 

```elixir:lib/awesome.ex
defmodule Awesome do
  @moduledoc """
  Documentation for `Awesome`.
  """

  @doc """
  missing_char

  ## Examples

      iex> Awesome.missing_char("kitten", 1)
      "itten"

      iex> Awesome.missing_char("kitten", 2)
      "ktten"

      iex> Awesome.missing_char("kitten", 3)
      "kiten"

      iex> Awesome.missing_char("kitten", 4)
      "kiten"

      iex> Awesome.missing_char("kitten", 5)
      "kittn"

      iex> Awesome.missing_char("kitten", 6)
      "kitte"
  """
  def missing_char(str, n) do
    String.split_at(str, n - 1)
    |> (fn {s1, s2} -> s1 <> String.slice(s2, 1..-1) end).()
  end

  @doc """
  missing_char_other

    ## Examples

      iex> Awesome.missing_char_other("kitten", 1)
      "itten"

      iex> Awesome.missing_char_other("kitten", 2)
      "ktten"

      iex> Awesome.missing_char_other("kitten", 3)
      "kiten"

      iex> Awesome.missing_char_other("kitten", 4)
      "kiten"

      iex> Awesome.missing_char_other("kitten", 5)
      "kittn"

      iex> Awesome.missing_char_other("kitten", 6)
      "kitte"
  """
  def missing_char_other(str, n) do
    codepoints = String.codepoints(str)

    Enum.slice(codepoints, 0, n - 1)
    |> Kernel.++(Enum.slice(codepoints, n..-1))
    |> Enum.join()
  end
end

```

# [Doctests](https://elixir-lang.org/getting-started/mix-otp/docs-tests-and-with.html#doctests)

- `## Examples`の下にあるものは、[Doctests](https://elixir-lang.org/getting-started/mix-otp/docs-tests-and-with.html#doctests)と呼ばれるものでテストできるんです :bangbang::bangbang::bangbang:

```elixir
Compiling 1 file (.ex)
..............

Finished in 0.09 seconds
13 doctests, 1 test, 0 failures
```

# Wrapping Up 🎍🎍🎍🎍🎍
- ~~[Elixir](https://elixir-lang.org/)ならキレイに書けるだろう！　と意気込んでやってみたのですが、なんだかうまく書けませんでした :sweat_smile:~~
    - ~~それで２通り書いているのですが、どちらもあんまりしっくりきていません :sweat_smile:~~
        - ~~何に納得していないかは**なんとなく**くらいの感覚的なものです~~
        - ~~エスパーしてくださるかたも募集！~~
    - ~~我こそはという方は、ぜひBeautifulに書き直してください！~~
- @piacerex さんが<font color="purple">$\huge{beautiful}$</font>にしてくださいました！
    - https://qiita.com/torifukukaiou/items/6a4649c1d72bf49c92f0#comment-8cab49ab9751181a36ad
    - :thumbsup::thumbsup_tone1::thumbsup_tone2::thumbsup_tone3::thumbsup_tone4::thumbsup_tone5: 
    - ありがとうございます！
    - スッキリしました 
- みんなちがって　みんないい(金子みすゞ)
    - みなさんもお好きなプログラミング言語で書いてみてください！
- Enjoy [Elixir](https://elixir-lang.org/) :rocket::rocket::rocket: