LoginSignup
4
1

More than 3 years have passed since last update.

【Ruby】3文字の時だけ「遊☆戯☆王」みたいに出力されるアルゴリズム

Last updated at Posted at 2020-01-20

はじめに

最近、遊戯王のゲーム実況をみながら寝落ちするのが日課です。
ある日、Rubyいじってたら、な ぜ か 「遊☆戯☆王」みたいに文字の間に☆入れたいなーって思ったんです。
こんなことをアルゴリズムの記事とか言って書いている自分のアルゴリズム、コレガワカラナイ。

問題のソースコード

keywords = ["遊戯","海馬","木馬","羽蛾","城之内","本田","杏","エクゾディア"]

keywords.each do |keyword|
    sleep 0.2 # 1行だすごとに一旦休憩する(なんとなく)
    if keyword.length == 3 #3文字であればの判定をしている
        k = keyword.chars #1文字ずつ分割する
        puts k.join("☆") #文字を☆でつなぐ(オサレ)

    else
        puts keyword #3文字出ない場合はそのまま表示
    end
end

出力するとこんな感じになります。

遊戯
海馬
木馬
羽蛾
城☆之☆内
本田
杏
エクゾディア

3文字の城之内くんだけが☆入っていますね。

他の文字列でもやってみました

c6ca66de06b258395b100fc7e578dfd5.gif

151匹を出力してみました。
名前が3文字のポケモンだけ☆が入っていますね。
ポ☆ッ☆ポピ☆ッ☆ピはパワーワードに見えますね。

たくさんの文字列精査して☆入れたいときには、CSVに入れるのが便利です。

CSVから文字列を持ってくるときのソース

require "csv" #csvを使用する場合はこのコードを書く

keywords = []

# csvから情報を持ってきて配列に入れる
CSV.foreach("keywords.csv") do |keyword|
    keywords << keyword[0]
end

keywords.each do |keyword|
    sleep 0.2
    if keyword.length == 3
        k = keyword.chars #1文字ずつ分割する
        puts k.join("☆") #文字を☆でつなぐ(オサレ)
    else
        puts keyword
    end
end

※コメントにてスッキリした書き方教えていただきました!

keywords.csvは同階層に置き、そのCSVのA列を上から順に読み込んで、3文字チェックをかけています。
このkeyword[0]の部分でどの列から持ってくるかを判定しています。

/ A B
[0] [1]
1 フシギダネ くさ・どく
2 フシギソウ くさ・どく
3 フシギバナ くさ・どく
4 ヒトカゲ ほのお
5 リザード ほのお
6 リザードン ほのお・ひこう

上記のような感じで、[0]はA列、[1]はB列から情報を持ってきます。
タイプを文字数判定したかったらkeyword[1]として引っ張ります。

参考記事

RubyでCSVファイルの読み込み・書き込みをする

文字数をうまく判定できないときには

CSVファイルに、見えないけれど存在する、封印されし文字列が入っている可能性があります。
そのため、下記の方法でCSVファイルから封印されし文字列を墓地へ送りましょう。

参考記事

UTF-8 のファイルから BOM を削除する方法

4
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1