search
LoginSignup
0
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

Rubyでランダム文字列メーカ

これはなにか

単純にランダムなひらがなを数個出すだけです
ユーザネームとかで適当な名前が欲しかったので作りました

プログラム1

randomname1.rb
hiragana=[]
for c in 'あ'..'ん'
  hiragana << c
end

print "number of name :"
n = gets.to_i

while gets.chomp != 'q'
  name=""
  n.times do
   name += hiragana.sample
  end
  puts name
end 

"number of name : "と聞かれるので数字を入れれば
その文字数の文字列を「q」の文字を入力するまで出し続けます

プログラム自体は
hiraganaに「あ」~「ん」を詰めて
適当にとっているだけです

ただしこのプログラムは欠点がいくつかあります

  • 「ん」から始まるワードができる
  • 「ゐ」「を」「ぁ」「ぃ」などの不要な文字が入る
  • 「あゅ」などの読めない文字列を含む

・・・
(「ぁ,あ,ぃ,い,・・・」なので「ぁ」は含みません。ご指摘ありがとうございました)

ということでこの欠点を補うためにプログラム2を作りました

プログラム2

randomname2.rb
# all hiragana
hiragana = []

# hiragana before small ya, small yu, small yo
hiragana_bef_sy = ['き','ぎ','し','じ','ち','ひ','び','ぴ']

# exception word in hiragana
hiragana_except = ['ぁ','ぃ','ぅ','ぇ','ぉ','ゎ','ゐ','ゑ','を']

for c in 'あ'..'ん'
  hiragana << c
end

for c in ['ゃ','ゅ','ょ']
  hiragana_bef_sy.each do |c2|
    hiragana << c2 + c
    hiragana.delete(c)
  end
end

hiragana_except.each do |c|
  hiragana.delete(c)
end


print "number of name :"
n = gets.to_i

buf=""
while buf != 'q'
  name=""
  n.times do
   name += hiragana.sample
  end
  puts name
  buf = gets.chomp
end 

先ほどとの違いは
'hiragana_bef_sy'に「ゃ」のような文字につながる文字を入れて置き
「ゃ」「ゅ」「ょ」と結合してhiraganaに格納します
(拗音を適切に使わせるついでに「きゃ」「しょ」など一音として扱います)
要らない文字はhiragana_exceptにメモして消します

実際に使った感想はどうだったか

本来はハンドルネームを作るつもりだったのですか
いい感じの文字列は何回やっても取れませんでした
マルコフ連鎖とか機械学習させたデータを使う方式のほうがいいかもしれません

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
What you can do with signing up
0
Help us understand the problem. What are the problem?