0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Ruby】電話帳作成問題を解いてみた!

Last updated at Posted at 2021-07-12

アウトプットのネタに困ったらこれ!?
 こちらの記事を参考にして、今回は「電話帳作成問題」を解いてみました。とりあえず「動くだけ」のコードでもいいから、自分で最後まで考えて解きたいという気持ちで望んでいます。初めから効率的なやり方を考えたわけではなく、場当たり的に課題に対処したため、コードとしては不適切な部分があります。ご意見いただけるとありがたいです。

#INPUT
['キシモト', 'イトウ', 'ババ', 'カネダ', 'ワダ', 'ハマダ']

#OUTPUT 
[ ['ア', ['イトウ']], ['カ', ['カネダ', 'キシモト']], ['ハ', ['ハマダ', 'ババ']], ['ワ', ['ワダ']] ]

 このように、カタカナ文字列の配列を渡すと、ア段の音別にグループ分けした配列を返すプログラムを作成する問題になります。

 コメントを参考にして1部修正して、最終的にこのようなコードになりました。

def phone_book(names)
  a = ("ア".."オ").to_a
  ka = ("カ".."ゴ").to_a
  sa = ("サ".."ゾ").to_a
  ta = ("タ".."ド").to_a
  na = ("ナ".."ノ").to_a
  ha = ("ハ".."ポ").to_a
  ma = ("マ".."モ").to_a
  ya = ("ヤ".."ヨ").to_a
  ra = ("ラ".."ロ").to_a
  wa = ("ワ".."ン").to_a

  kana = [a, ka, sa, ta, na, ha, ma, ya, ra, wa]
  kana_row = 'アカサタナハマヤラワ'.chars.map{|c| [c,[]]}

  num = 0
  number_of_names = names.length - 1
  names_array = []
  
  while num <= number_of_names
    first_character = names.slice(num).slice(0)
    kana.map{|row|
      if row.include?(first_character)
        count = 0
        while count <= 9
          if row == kana[count]
            kana_row[count][1].insert(0,names[num])
          end
          count += 1
        end
      end
    }
    num += 1
  end

  kana_row.map{ |row_content|
    if row_content[1][0] != nil
      row_content[1].sort!
      names_array << row_content
    end
  }
  
  p names_array
  
end

names = ['キシモト', 'イトウ', 'ババ', 'カネダ', 'ワダ', 'ハマダ']
phone_book(names)
#実行結果 [["ア", ["イトウ"]], ["カ", ["カネダ", "キシモト"]], ["ハ", ["ハマダ", "ババ"]], ["ワ", ["ワダ"]]]

names = ['フクダ', 'キムラ', 'タナカ', 'ハシモト', 'オカモト', 'ゴトウ']
phone_book(names)
# 実行結果 [["ア", ["オカモト"]], ["カ", ["キムラ", "ゴトウ"]], ["タ", ["タナカ"]], ["ハ", ["ハシモト", "フクダ"]]]

names = ['ワタナベ', 'ヨシダ', 'マツモト', 'ナガタ', 'ドウモト','タチバナ', 'チバ']
phone_book(names)
# 実行結果 [["タ", ["タチバナ", "チバ", "ドウモト"]], ["ナ", ["ナガタ"]], ["マ", ["マツモト"]], ["ヤ", ["ヨシダ"]], ["ワ", ["ワタナベ"]]]


 とりあえず「動くだけ」のコードを書くことができましたが、まだまだ適切なコードであるとは言えません。恥ずかしいコードを晒すことになりましたが、親切にコメントして下さると嬉しいです。


0
0
6

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?