はじめに
最近、遊戯王のゲーム実況をみながら寝落ちするのが日課です。
ある日、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文字の城之内くんだけが☆入っていますね。
他の文字列でもやってみました
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]
として引っ張ります。
参考記事
文字数をうまく判定できないときには
CSVファイルに、見えないけれど存在する、封印されし文字列が入っている可能性があります。
そのため、下記の方法でCSVファイルから封印されし文字列を墓地へ送りましょう。