Help us understand the problem. What is going on with this article?

[Ruby][解答募集]文字列に出現する単語の個数を数えてみよう

More than 5 years have passed since last update.

先日参加したRuby/Rails勉強会@関西 60thの「Ruby初級者向けレッスン」でこんな問題が出題されていたので紹介します。

問題

文字列中に含まれる単語の個数を単語ごとにカウントして、ハッシュとして表現してください。

実行例

  • 入力: "no ruby no life"
  • 出力: {"no" => 2, "ruby" => 1, "life" => 1}

自分なりの実装方法を考えてみよう

Rubyに慣れた人なら、おそらくかなり簡単な部類に入るプログラミング問題だと思います。

しかし、こんな簡単な問題でも意外と実装方法は人によって異なるものです。

実際、僕が関わっている西脇.rb & 東灘.rbのコミュニティで出題したときも、解答例は人それぞれ異なっていました。

各人の知識やこだわりの違いがコードに現れてくるので、コードを見るだけでも面白いですし、お互い勉強にもなります。

あなたも解答例をぜひコメント欄に!

そこであなたもぜひこの問題の解答例を考えてみてください!

考えたコードは直接コメント欄に記入してもらっても良いですし、gistのリンクを載せたりするのもOKです。

特に順位を決めたり景品を出したりするわけではありませんが、軽い腕試し問題としてチャレンジしてもらえればと思います。

西脇.rb & 東灘.rbではこんな感じの勉強会を開きます

今週の土曜日、2014年4月5日に開催される西脇.rb & 東灘.rbの「Rubyプログラミング Dojo」ではこんな感じで共通のプログラミング問題をみんなで解いて、最後にコードレビューをする予定です。

すでに満席になっているため、今月の勉強会に参加するのは厳しいかもしれません。
しかし、毎月神戸近辺で勉強会を開催しているので、自分でコードを書いたり他の人の書いたコードを読んだりして勉強したいというRubyistの方は、ぜひ一度遊びに来てください。

Doorkeeperでコミュニティのメンバー登録をしてもらうと、イベントの開催通知を受け取ることができます。

さいごに: 僕の解答例はこちら

僕も解答例を考えてgistに上げてみました。

僕はちょっと関数型プログラミングっぽく書くのが好きです。
あと、Ruby 2.1以降でしか使えない便利メソッドも使っています。

each_with_objectを使ってみるのもアリです。

each_with_objectの行だけ妙に長くなってしまうので、ムダにラムダを使ってみても面白いかも。

などなど、一人で考えてもやり方は様々です。

おまけ: RSpecを使って書いてみたい人向けのテンプレート

RSpecを使ってテストを自動化してみたい人はこんな感じのテンプレートを使えばテスト駆動開発ができます。
僕の解答例もこのスタイルで書いています。

# count_by_word_spec.rb

def count_by_word(string)
  # Write your code here.
end

describe "count by word" do
  it "counts by word" do
    expect(count_by_word("no ruby no life")).to eq("no" => 2, "life" => 1, "ruby" => 1)
  end
end

実行する際はターミナルから以下のように実行すればOKです。
(-cは出力結果に赤や緑の色を付けるオプション)

gem install rspec
rspec -c count_by_word_spec.rb

あわせて読みたい

前述のRuby/Rails勉強会@関西 60thでは、「How to upgrade your Rails application to RSpec 3」というタイトルで「RSpec 2で書かれたRailsのテストをRSpec 3に移行する手順」を説明(実演)してみました。

このときの内容やスライドをブログやSlideShareに上げていますので、RSpecに興味がある人は読んでみてください。

jnchito
SIer、社内SEを経て、ソニックガーデンに合流したプログラマ。 「プロを目指す人のためのRuby入門」の著者。 http://gihyo.jp/book/2017/978-4-7741-9397-7 および「Everyday Rails - RSpecによるRailsテスト入門」の翻訳者。 https://leanpub.com/everydayrailsrspec-jp
https://blog.jnito.com/
sonicgarden
「お客様に無駄遣いをさせない受託開発」と「習慣を変えるソフトウェアのサービス」に取り組んでいるソフトウェア企業
http://www.sonicgarden.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした