LoginSignup
0
0

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-12-01

これはなにか

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

プログラム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にメモして消します

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

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

0
0
3

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
0
0