🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ruby

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

Q&A

解決済

3回答

3412閲覧

ゾロ目かどうか判定するプログラム

rakuda.io

総合スコア8

Ruby

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

1グッド

1クリップ

投稿2019/12/19 03:11

前提・実現したいこと

入力された数値が「ゾロ目かどうか」を判定したい
ゾロ目なら”Yes”
違うなら”No”
と出力する

発生している問題・エラーメッセージ

エラーは出ないが同じ表現の繰り返しでコードがスマートじゃない・・・

該当のソースコード

Ruby

1s = gets.chomp.to_i 2ary = [s % 10,s % 100,s % 1000,s % 10000,s % 100000,s % 1000000] 3ary.map!(&:to_s) 4ans = [ary[0][0],ary[1][0],ary[2][0],ary[3][0],ary[4][0],ary[5][0]] 5ans.map!(&:to_i) 6if ans[0] == ans[1] && ans[1] == ans[2] && ans[2] == ans[3] && ans[3] == ans[4] && ans[4] == ans[5] 7 puts "Yes" 8else 9 puts "No" 10end

どうしたいか?

1から調べて考えて悩んでこれが限界でした・・・ もっとスマートな記述でまとめる方法をご教授いただきたいです<(_ _)>
DrqYuto👍を押しています

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

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

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

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

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

winterboum

2019/12/19 04:12 編集

ゾロ目の定義を 気にしているのは、ポーカーの表現でいう ツーペア、スリーカード、フルハウス、フォーカード、ファイブカード の場合は trueなのかfalseなのか
rakuda.io

2019/12/20 02:58

シンプルに”全部が同じ数値”という意味でのゾロ目です<(_ _)>
guest

回答3

0

全部が同じということでしたら
gets.chomp.split("").uniq.size == 1

ですね

投稿2019/12/20 03:07

winterboum

総合スコア23567

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

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

rakuda.io

2019/12/20 03:27

これはすごいシンプルですぐ実装できました! 「ゾロ目の場合、そのゾロ目の数字を表示する。違う場合は”No”と表示する。」 に変更したかったのですが n = gets.chomp.split("") ans = n.uniq.size == 1 if ans == true puts n.join else puts "No" end こんな感じで出来ました! ありがとうございます<(_ _)>
guest

0

ベストアンサー

下記は、いかがでしょうか。

ruby

1sary = gets.chomp.split("") 2ans = "YES" 3sary.map{|e| ans = "NO" if e != sary[0] } 4p ans

投稿2019/12/19 05:12

tatsu99

総合スコア5493

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

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

rakuda.io

2019/12/20 03:06

なるほど!mapを使うんですね!! map内にifを渡すと言う考え方に至らなかったです。 非常に勉強になりました!!! またご教授ください<(_ _)>
rakuda.io

2019/12/20 03:22

すみません、エラーが出てしまいました。 ゾロ目の場合、そのゾロ目の数字を表示する。違う場合は”No”と表示する。 というふうに変更を加えようとしたのですが・・・
tatsu99

2019/12/20 04:46

その場合は ans = "YES" を ans = sary[0] に変えてください
guest

0

a=gets.split.map(&:to_i);puts a.all?(a[0]) ? :Yes : :No

2 2
なら
Yes

2 1
なら
No

と出せましたが,この解釈であってますか?

投稿2019/12/19 07:13

DrqYuto

総合スコア432

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

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

rakuda.io

2019/12/20 03:07

非常にシンプルなコードで勉強になりました。 是非またご教授頂けたらと思います!ありがとうございました!!
DrqYuto

2019/12/20 12:14

こちらこそです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問