忙しいときに限ってこういうことがやりたくなります・・・。mac osx 専用です&99までしか対応してません。あとコード、動作ともにもっさりしてます。もっとスピードあげられればいいんですが。わかっているのは同じ声が連続するときはひとつの引数にして 'say' コマンドに渡した方がすっきりするということです。が、やってません。どなたかすっきりとしたものにして頂けると嬉しいです。
#!/usr/bin/env ruby normal_voice = { 1 => "iche", 2 => "ne", 3 => "sun", 4 => "yon" , 5 => "go", 6 => "lock", 7 => "nana", 8 => "huchi", 9 => "q", 10 => "juu" } aho_voice = { 1 => "echi", 2 => "neee", 3 => "shuun", 4 => "shee", 5 => "go", 6 => "rock", 7 => "nana", 8 => "hyachi", 9 => "q", 10 => "juuu" } (1..40).each do |n| puts "#{n}" if n <= 10 command = (n.to_s =~ /3/ || n % 3 == 0)? "say -v Princess #{aho_voice[n]}" : "say -v Ralph #{normal_voice[n]}" elsif n <= 19 x = (n / 10).round; y = n % 10 command = (n.to_s =~ /3/ || n % 3 == 0)? "say -v Princess #{aho_voice[10]} #{aho_voice[y]}" : "say -v Ralph '#{normal_voice[10]} #{normal_voice[y]}'" elsif n <= 99 x = (n / 10).round; y = n % 10 command = (n.to_s =~ /3/ || n % 3 == 0)? "say -v Princess #{aho_voice[x]} #{aho_voice[10]} #{aho_voice[y]}" : "say -v Ralph '#{normal_voice[x]} #{aho_voice[10]} #{normal_voice[y]}'" else command = "say -v Ralph sore deka sugi" exit end system(command) end
元ネタはいわずもがな世界のナベアツです。ささやかなオマージュとして捧げます。