質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

5212閲覧

条件に適合する配列要素を数える

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2016/01/15 07:30

編集2016/01/15 08:33

条件に適合する配列要素を数える
下はトランプのカードの名前の文字列を要素とする配列である。

ar = [ 'ハート','ダイヤ','スペード','ダイヤ','ダイヤ','ハート','ダイヤ','ダイヤ','クラブ','ハート','クラブ','ハート','ハート','ダイヤ','ハート','スペード','ダイヤ','ダイヤ','クラブ','スペード','ハート','スペード','クラブ','クラブ','ハート','ダイヤ','ハート','スペード','スペード','ダイヤ','ダイヤ','スペード','ダイヤ','ダイヤ','クラブ','スペード','スペード','ハート','ダイヤ','ダイヤ','スペード','ダイヤ','ダイヤ','ハート','ダイヤ','ダイヤ','スペード','ダイヤ','ダイヤ','クラブ','ハート','ハート','ダイヤ','ダイヤ','ハート','ハート','スペード','ダイヤ','ダイヤ','ダイヤ','ダイヤ','スペード','ダイヤ','ダイヤ','クラブ','ハート','クラブ','ダイヤ','ダイヤ','ダイヤ','ダイヤ','ダイヤ','クラブ','ダイヤ','クラブ','ダイヤ','ダイヤ','クラブ','スペード','ハート','ハート','ハート','クラブ','クラブ','スペード','ハート','ダイヤ','ダイヤ','ハート','スペード','ダイヤ','ダイヤ','ハート','ハート','ダイヤ','スペード','ダイヤ','ダイヤ','クラブ','ダイヤ','ダイヤ','ダイヤ','スペード','ハート','スペード','ダイヤ','スペード','クラブ','ダイヤ','ダイヤ','ダイヤ','ダイヤ','クラブ','ダイヤ','スペード','クラブ','クラブ','スペード','スペード','ハート' ]

この配列データを使って,赤いカード(ハートまたはダイヤ)の数を数える プログラムを,以下の方針で作りなさい。
・あらかじめ配列 ar に複数個の文字列データが格納される処理が, プログラムの最初で行われているものとする。 その部分については書く必要はない。
・ 目的としては赤の札,つまりハートまたはダイヤのカードの総数を数えたい。
・数を数え上げるためのカウンタとなる変数(たとえば count) ゼロに初期化して定義しておく。
・for ループで 配列の要素を読み込んでいく,
・配列要素の文字列が条件に合っていたら,カウンタを1だけ増やす。
・ ループが終了したら,下の例のように出力する。xx は整数で,行の最後には改行がある。

赤いカードの数 = xx

以下の形式で書きなさい。
count = 0
for i in ????

このループの中で if 構文を使ってデータを判定して集計する。

end

・自分の回答
n = ar.size
count = 0
for i in 0 .. n-1
if ar[i] == 'ダイヤ' or ar[i] == 'ハート'
count += 1
end
end
puts"赤いカードの数 = #{count}"

かんがえてみたんですけど、ifの中の書き方、puts"赤いカードの数"の表し方が間違っているみたいです。回答のほどお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ozwk

2016/01/15 07:46

何が聞きたいんですか?
ozwk

2016/01/15 07:46

こちらの質問が他のユーザから「問題・課題が含まれていない質問」という評価を受けています teratailでは、漠然とした興味から票を募るような質問や、意見の主張をすることを目的とした投稿は推奨していません。 質問の意図や解決したい課題を明確に記述していただくと、回答が得られやすくなります。
cateye

2016/01/15 08:13

何かの課題でしょうか? 課題なら自分で解いたところまで書いて、分からない所を質問しましょうd^^
izkn

2016/01/15 21:59

こちらの質問が他のユーザから「質問の範囲が広すぎる」という評価を受けています わからない点を明確にし、調査したこと・試したことと共に記入していただくと、回答が得られやすくなります。
guest

回答3

0

ベストアンサー

問題文に沿った方法と、それとは違う方法5つを書いてみました。

ruby

1count = 0 2for i in ar 3 count += 1 if i == 'ダイヤ' || i == 'ハート' 4end 5puts "赤いカードの数 = #{count}" 6 7red_cards = %w(ダイヤ ハート) 8count2 = 0 9ar.each do |card| 10 count2 += 1 if red_cards.include?(card) 11end 12puts "赤いカードの数 = #{count2}" 13 14count3 = ar.count { |card| red_cards.include?(card) } 15puts "赤いカードの数 = #{count3}" 16 17count4 = ar.select { |card| card == 'ダイヤ' }.count + ar.select { |card| card == 'ハート' }.count 18puts "赤いカードの数 = #{count4}" 19 20count5 = ar.sort.reverse.index('スペード') 21puts "赤いカードの数 = #{count5}" 22 23grouped = ar.group_by{ |x| x }.map{|k, v| [k, v.size] }.to_h 24p grouped 25puts "赤いカードの数 = #{grouped['ダイヤ'] + grouped['ハート']}"

他にもあると思います。

投稿2016/01/15 14:21

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

かんがえてみたんですけど、ifの中の書き方、puts"赤いカードの数"の表し方が間違っているみたいです。回答のほどお願いします。

別に間違って無さそうです。

投稿2016/01/15 13:20

otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Rubyですとこんな感じですかね。

ruby

1result = ar.select { |x| /ダイヤ|ハート/ =~ x } 2p "赤いカードの数 = #{result.count}"

投稿2016/01/15 09:24

takataka1984

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問