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

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

詳細はこちら
Ruby

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

Q&A

解決済

2回答

1144閲覧

ruby 「あ」から「お」を「あいうえお」のように出力したいです。

DrqYuto

総合スコア432

Ruby

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

0グッド

0クリップ

投稿2019/09/22 11:37

「あいうえお」を出力したいのですが、小文字の「ぁぃぅぇぉ」が入ってしまいます。
一応書けましたが、他にいい方法があれば教えて下さい。

text=[*"あ".."お"] puts text.join puts text.each_slice(2).map(&:first).join #=>あぃいぅうぇえぉお #=>あいうえお

参考

  • Ruby | 配列の奇数番目と偶数番目を取り出す方法 - Qiita

https://qiita.com/ddgg7755/items/ed7db4b342b783620b41

"ary = [1,2,3,4,5,6,7,8,9,10]

odd = ary.each_slice(2).map(&:first)
even = ary.each_slice(2).map(&:last)

p odd #=>[1,3,5,7,9]

p even #=>[2,4,6,8,10]
"

  • Ruby - 配列を1つ飛ばしずつで参照したい|teratail

https://teratail.com/questions/148277

"array = [1, 2, 3, 4, 5]

p array.each_slice(2).map(&:first) # => [1, 3, 5]"

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

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

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

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

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

ikadzuchi

2019/09/22 22:17

入力は「あ~お」だけですか? それとも例えば「う~き」や「た~と」にもなるのですか? (なお前者なら"あいうえお"と書くのが楽で、後者だと簡単な方法は知りません)
DrqYuto

2019/09/23 04:56

入力は今のところ、「あ〜お」だけです!
guest

回答2

0

技術的興味ということなので、求められている回答はこういうことなのかなあというのを。

Unicodeではひらがなは
ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでと…
のように並んでいます。
なので素直に順番に並べると「あぃいぅうぇえぉお」などとなります。
そうでなく清音だけを取りたいなどとなると、「あ〜お」では単純な数値計算で求められますが汎用的な方法ではないので、どの範囲でも求められるようにするにはテーブルを引くしかありません。
Unicodeには文字の集合や文字の関係を集めたデータが多数あり、多くの言語で使えます。
しかし「ひらがなの小文字でない清音だけ」を集めた表は確か無かったと思います。
自分でデータを用意するのが手軽で、最も望ましい方法だと思います。
が、無理やり方法を考えると、Unicodeの分解で(半)濁点を除いたり、collationで小文字や(半)濁点付き文字と通常文字の同一視ができそうな気はします。

投稿2019/09/23 13:51

編集2019/09/25 01:03
ikadzuchi

総合スコア3047

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

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

Zuishin

2019/09/24 18:23 編集

ベストアンサーを見てください。単純な数値計算だけで求めています。 濁音の話など誰もしていませんから「テーブルを引くしかない」は間違いです。 この質問では入力と出力の取りうる範囲が明らかになっています。 > 入力は「あ~お」だけですか? > それとも例えば「う~き」や「た~と」にもなるのですか? > (なお前者なら"あいうえお"と書くのが楽で、後者だと簡単な方法は知りません) > 入力は今のところ、「あ〜お」だけです! > そうです。技術的興味です。「あ」~「ん」の出力も気になりますが、それは別質問でしようかと思ってます。 勝手に範囲を拡大して「不可能」と言うのは詭弁であり、不正解です。
Zuishin

2019/09/24 17:58

もう一つ言うと、テーブルを引くよりも、素直に「あいうえお」と書くほうが簡単です。 テーブルを使う意味はありません。
Zuishin

2019/09/25 01:10

「ひらがなの小文字でない清音だけ」という条件はどこにもみあたりません。「あ~お」という入力で「あいいうえお」を取り出す方法を尋ねる質問ですが、この回答の結論としては「できそうな気はします」ということですか? 「ひらがなの小文字でない清音だけ」を求める方法は誰も求めていないので、質問への回答ではなく補足情報にすぎないと思いますが、そうだとしても、その範囲限定では中途半端な気がします。また求める「気がします」で終わって、現実に求めることができていないため、補足にもなっていません。
ikadzuchi

2019/09/25 01:11

勝手に範囲を拡大することについては、元が特殊ケースであった場合は一般的な解と思われないよう(後で見る人のためにも)ぜひやるべきと思っています。 元の質問内容が不可能であるような回答になっていたのはミスです。修正しました。 > もう一つ言うと、テーブルを引くよりも、素直に「あいうえお」と書くほうが簡単です。 私もそう思いますのでまずそう書きました。
ikadzuchi

2019/09/25 01:18

> 条件はどこにもみあたりません。 推測です。 > 「できそうな気はします」ということですか? それはあいうえお以外も含めた場合への回答です。 > 補足情報にすぎない はい。 > 中途半端 > 現実に求めることができていない 半端でも意味があると思っています。
Zuishin

2019/09/25 01:27 編集

拡大された範囲が特殊です。新しい特殊な条件が出てきたにすぎません。その範囲の決め方が恣意的ですし、決して一般化もされていません。 半端でも意味があるというのは、前に私に絡んだ時のことと矛盾するダブルスタンダードです。 テーブルを使うのであれば「あいうえお」という文字列がそのままテーブルになります。この方法が否定されている以上、よほど知的好奇心を満たせるテーブルでなければ、使う意味はありません。
ikadzuchi

2019/09/25 04:52

> 特殊です 特殊だとは思っていませんが感じ方は人それぞれですね。 > 私に絡んだ時のことと矛盾 (絡んだつもりはないが問題の指摘をそう呼ぶとして)あなたの回答に問題があると私が思ったので指摘したまでで、私の回答に問題があるとあなたが思えば指摘してください。 半端な回答は意味がありますが問題もあります。問題点は指摘されるべきです。 > よほど知的好奇心を満たせるテーブルでなければ その基準の理由が分かりませんが、自分は既存のテーブルで処理ができれば使う意味があると思います。
Zuishin

2019/09/25 05:00

> 特殊だとは思っていませんが感じ方は人それぞれですね。 人それぞれではなく特殊ですね。そうでないなら、あなたと同じ分類をしている人が他に大勢いるはずです。挙げてみてください。 > 絡んだつもりはないが問題の指摘をそう呼ぶとして 問題がないことははっきりしたはずです。指摘ではなく、あなた独自の価値観の押し付けでしかありませんでした。 > 自分は既存のテーブルで処理ができれば使う意味があると思います。 最も簡単で効率のよいテーブルは「あいうえお」だと思いますが、それ以上のものがありますか?
DrqYuto

2019/09/25 11:30

色々と技術的興味が沸きました。ありがとうございます。
ikadzuchi

2019/09/25 15:17

> あなたと同じ分類をしている人が他に大勢いるはずです。挙げてみてください。 大勢いるから清音という言葉があるんですけど、そもそもなぜあなたの感覚を私が証明しなければならないのですか? > 問題がないことははっきりしたはずです。 私が指摘した問題点についてあなたは何も返答を返していませんが、どの口が言うのですか? あなたの頭の中でははっきりしているのでしょうけれど。 > それ以上のものがありますか? それ以上とはどういう基準でですか? 同じことを繰り返したくないんですけど、私は「既存のテーブルで」処理ができれば意味があると言っているんですけど。
Zuishin

2019/09/25 15:21

えーとね、ひらがなという条件も清音という条件もあなたの頭から出てきた条件でしょ? ほかに誰も言ってないよね? 濁音を除外する理由は? ゐを入れる理由は? カタカナを除外する理由は? 全部あなたの勝手で中途半端な仕様でしょ。 そういうこと。 前回のもそう。
Zuishin

2019/09/25 15:24

そもそも言ってることがブレブレでおかしいんで、問答になってないんですよ。 話をそらすためのワケワカラン質問にいちいち付き合ってられないんで、質問に回答できてると言いたいんだったらそれを自分で証明しなさいな。 できないでしょ? ほら。 そういうこと。
Zuishin

2019/09/25 15:25

この回答は質問にこたえていない。 私が言っているのは一貫してこれ。
Zuishin

2019/09/25 15:31

回答になってないので低評価します。
ikadzuchi

2019/09/25 15:35

すべてそれが自然だと思うからですけど。 何かそれらが中途半端だとする理由があるならば議論の余地はありますが、あなたは何も示さずに難癖を付けているだけですよね? 「前回のもそう」の「そう」とは「勝手で中途半端」という意味でしょうか。 それならば、あなたの中途半端さを示すための例をいくつか挙げただけですから別に中途半端でないものを目指してはいません。
Zuishin

2019/09/25 15:37

自然だと「あなたが思った」だけですよね? 入力範囲も出力範囲も明らかなのに、どちらも無視するのはあり得ません。 前回のは私の中途半端を指摘すると言いいつつ中途半端な物を出してきただけなので、単なる言いがかりで誰も得をしません。
Zuishin

2019/09/25 15:39

結局、あなたはオレオレルールで動いてるんですよ。ソースは全部脳内。決定権は全部自分。 よく振り返ってごらんなさい。 全部そうでしょ?
ikadzuchi

2019/09/25 15:46

> そもそも言ってることがブレブレでおかしいんで、問答になってないんですよ。 > 話をそらすためのワケワカラン質問にいちいち付き合ってられないんで、質問に回答できてると言いたいんだったらそれを自分で証明しなさいな。 そもそも言ってることがブレブレでおかしいんで、問答になってないんですよ。 話をそらすためのワケワカラン質問にいちいち付き合ってられないんで、質問に回答できてると言いたいんだったらそれを自分で証明しなさいな。 > 回答になってないので低評価します。 どうぞ。
Zuishin

2019/09/25 15:51

日本語すら成立しなくなってきた。質問に回答できてないって言ってるんだから私が証明するのはおかしいですよねえ。
ikadzuchi

2019/09/25 15:53

> 自然だと「あなたが思った」だけですよね? はいそうです。あなたの思った、自然でないとする反対意見があれば聞きます。 > 入力範囲も出力範囲も明らかなのに、どちらも無視するのはあり得ません。 何のことを言っているのでしょうか。 > 前回のは私の中途半端を指摘すると言いいつつ中途半端な物を出してきただけなので、単なる言いがかりで誰も得をしません。 中途半端だと気づいていない相手に対して中途半端さを気づかせられれば価値があると思いました。 残念ながら中途半端さを気づかせることはできませんでした。 > 結局、あなたはオレオレルールで動いてるんですよ。ソースは全部脳内。決定権は全部自分。 > よく振り返ってごらんなさい。 > 全部そうでしょ? 結局、あなたはオレオレルールで動いてるんですよ。ソースは全部脳内。決定権は全部自分。 よく振り返ってごらんなさい。 全部そうでしょ?
Zuishin

2019/09/25 15:55

> はいそうです。あなたの思った、自然でないとする反対意見があれば聞きます。 書きました。 > 何のことを言っているのでしょうか。 あいうえお > 中途半端だと気づいていない相手に対して中途半端さを気づかせられれば価値があると思いました。 中途半端ではなくやりすぎくらいに思っていたので、あなたの見立てが間違っています。 > 結局、あなたはオレオレルールで動いてるんですよ。ソースは全部脳内。決定権は全部自分。 いいえ、この質問者のルールです。勝手なルールを作ってるのはあなたです。
Zuishin

2019/09/25 15:57

話をそらすためのワケワカラン質問にいちいち付き合ってられないんで、質問に回答できてると言いたいんだったらそれを自分で証明しなさいな。 できないでしょ? ほら。 そういうこと。
ikadzuchi

2019/09/25 16:15

> 私が証明するのはおかしいですよねえ。 私の尋ねた質問に対して答えが無いことについて言っています。 > 書きました。 では返答はすべて返していますね。 > あいうえお はっきり書いてほしいんですけど、入力が「あ~お」、出力が「あいうえお」ということですかね。 質問の範囲を無視するのは先に述べた通りありえなくないと思っていますし、出力の範囲を無視したつもりはなく自然な敷衍だと思っています。 > 中途半端ではなくやりすぎくらいに思っていたので、あなたの見立てが間違っています。 はい、中途半端さを気づかせることができるという見立ては間違っておりました。 > いいえ、この質問者のルールです。 私が言っているのはこの質問の内容ではなくて他の場所での言葉も含めたあなたの話すことすべてについてです。 > 話をそらすための~証明しなさいな。 私とあなたしかいない状況で私がどんな証明をしてもあなたが無視するだけですので時間の無駄です。
Zuishin

2019/09/25 16:17

つまり証明できないと。 で、これ以上何か弁明はありますか?
ikadzuchi

2019/09/25 16:26

私からあなたに言うことは最初から何もありません。 あなたの論点ずらしが終わったようなのでこれで終わります。
Zuishin

2019/09/25 16:30

ご苦労様です。
guest

0

ベストアンサー

元はRangeなので、stepで。

Ruby

1("あ".."お").step(2).to_a.join

#追記
Arrayに変換済みの場合も、変数に代入してあるなら、sizeが取れるので、

Ruby

1text=[*"あ".."お"] 2text.values_at(*0.step(text.size,2)).join

投稿2019/09/22 11:59

編集2019/09/22 14:51
otn

総合スコア85888

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

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

DrqYuto

2019/09/22 12:42

step知りませんでした。ありがとうございます!
winterboum

2019/09/23 02:07

この質問の真のというか裏のというか問題が見えないのですが "あいうえお"と出したいなら test="あいうえお" とすれば良い話で、わざわざrange"あ".."お"にする必要はありません。rangeにしているということは、もしかしたら例えば start="あ"; fine="お"; test=[*start..fine] から得たいというような問題なのかも。 fine="こ" として あいうえおかきくけこ を得るというような場面があるとすると、「一つおきに取る」というのではダメなわけで。。。。 裏に潜む 課題・問題 は何なんでしょうか
DrqYuto

2019/09/23 05:01

[*1..5]のように数字がいけるなら、ひらがなもいけるだろうと思いました。 そしたら、「ぁぃぅぇぉ」が入ってきました。 その小文字を取り除く方法があるのか気になりました。
winterboum

2019/09/23 05:07

了解。具体的な問題があって、ではなく技術的興味ですね。
DrqYuto

2019/09/23 08:59

そうです。技術的興味です。「あ」~「ん」の出力も気になりますが、それは別質問でしようかと思ってます。
otn

2019/09/23 11:55

grep(/[[:upper:]]/) か grep(/[[:lower:]]/) でできるか?と思ったけどだめでした。
DrqYuto

2019/09/23 11:59

だめでしたか〜。grep調べてみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問