LoginSignup
6
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-01-13

はじめに

準備

うまくいかなかったら

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

mix new

$ mix new awesome
$ cd awesome

ソースコードを書く

イカしている :rocket::rocket::rocket::rocket::rocket:

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

イケていない

  • 私が当初、記事に掲載していたもの
  • :point_down::point_down_tone1::point_down_tone2::point_down_tone3::point_down_tone4::point_down_tone5:
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

  • ## Examplesの下にあるものは、Doctestsと呼ばれるものでテストできるんです :bangbang::bangbang::bangbang:
Compiling 1 file (.ex)
..............

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

Wrapping Up 🎍🎍🎍🎍🎍

  • Elixirならキレイに書けるだろう! と意気込んでやってみたのですが、なんだかうまく書けませんでした :sweat_smile:
    • それで2通り書いているのですが、どちらもあんまりしっくりきていません :sweat_smile:
      • 何に納得していないかはなんとなくくらいの感覚的なものです
      • エスパーしてくださるかたも募集!
    • 我こそはという方は、ぜひBeautifulに書き直してください!
  • @piacerex さんが$\huge{beautiful}$にしてくださいました!
  • みんなちがって みんないい(金子みすゞ)
    • みなさんもお好きなプログラミング言語で書いてみてください!
  • Enjoy Elixir :rocket::rocket::rocket:
6
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0