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

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

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

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

1389閲覧

例:Br6, Qh1 アルファベットと数字の組み合わせで表現された通し番号をインクリメントするナイスな方法を教えてください

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby

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

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/10/31 14:05

編集2016/10/31 14:26

■条件
・通し番号は3文字

・左側の文字について
・A~Zまでのアルファベット大文字
・Zまで進むとその次はAに戻る
・真ん中のアルファベットがzからaに進むタイミングでインクリメントする

・真ん中の文字について
・アルファベット小文字
・zまで進むとその次はaに戻る
・右側の文字が7から1に進むタイミングでインクリメントする

・右側の文字について
・1~7までの数字
・7まで進むとその次は1に戻る
・通し番号の最小の位

・処理を開始する通し番号は今回は決め打ちでBr6

ruby

1def test_method(first_year,second_year) 2in_group = "Br6" 3 4 groups = [] 5 groups[0] = in_group 6 a1 = in_group.slice(0) 7 a2 = in_group.slice(1) 8 i = in_group.slice(2) 9 51.times do |count| 10 if i == "7" 11 i = "1" 12 if a2 == "z" 13 a2 = "a" 14 if a1 == "Z" 15 a1 = "A" 16 else 17 a1.succ! 18 end 19 else 20 a2.succ! 21 end 22 else 23 i.succ! 24 end 25 groups[count+1] = a1+a2+i 26 end 27 return groups 28end

凄い変なコードになってしまったので、かっこいい感じにできないでしょうか。
※ここに投稿するにあたって色々と削っており、うまく動作しないかもしれません。その際はご指摘いただけますと幸いです。

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

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

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

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

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

guest

回答2

0

簡単な処理なので似たような感じになってしまいますが、配列の初期化処理を無くしてみました。

ruby

1in_group = 'Br6' 2units = 52 3 4groups = 5 units.times.each_with_object([]) do |_, sum| 6 sum.push(in_group) 7 string, number = in_group[0..1], in_group[2] 8 in_group = number == '7' ? string.next + '1' : string + number.next 9 end 10 11p groups 12#=> ["Br6", "Br7", "Bs1", "Bs2", "Bs3", "Bs4", "Bs5", "Bs6", "Bs7", "Bt1", "Bt2", "Bt3", "Bt4", "Bt5", "Bt6", "Bt7", "Bu1", "Bu2", "Bu3", "Bu4", "Bu5", "Bu6", "Bu7", "Bv1", "Bv2", "Bv3", "Bv4", "Bv5", "Bv6", "Bv7", "Bw1", "Bw2", "Bw3", "Bw4", "Bw5", "Bw6", "Bw7", "Bx1", "Bx2", "Bx3", "Bx4", "Bx5", "Bx6", "Bx7", "By1", "By2", "By3", "By4", "By5", "By6", "By7", "Bz1"]

投稿2016/11/01 16:06

cameluby

総合スコア891

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

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

0

ベストアンサー

そんなあなたに String#next

ruby

1in_group = 'Br6' 2units = 52 3 4_, string, number = in_group.split(/(..)/) 5groups = [] 6 7units.times do 8 groups << string + number 9 if number.next! == '8' 10 string.next! 11 number = '1' 12 end 13end 14 15p groups 16 17# => [ 18 "Br6", 19 "Br7", 20 "Bs1", 21 "Bs2", 22 "Bs3", 23 "Bs4", 24 : 25 "By5", 26 "By6", 27 "By7", 28 "Bz1" 29]

投稿2016/10/31 21:55

hana-da

総合スコア1728

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

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

hana-da

2016/11/01 00:06

あ、succ使ってたんですね。。。 'Bz'.succ # => 'Ca' なので。。。あとは大丈夫ですね。
退会済みユーザー

退会済みユーザー

2016/11/01 00:06

ありがとうございます。string.nextを調べてみます。
hana-da

2016/11/01 00:08

一緒です。nextもsuccも一緒です。ごめんなさい。質問よくみてませんでした。
退会済みユーザー

退会済みユーザー

2016/11/01 00:13

でもここの部分はだいぶかっこよくしていただいたので参考になります。 if number.next! == '8' string.next! number = '1' end
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問