未経験転職にて出題された問題と、自分なりに調べて処理した答えを備忘録として載せます。
実力不足の自分なりに出した答えなので、修正や解説をいただけるととっても嬉しいです!
##▼問題1 FizzBuzz
1から100までの数字を順番に出力する関数を作成してください。
ただし、出力する数字が3の倍数の場合には「Fizz」を、出力する数字が5の倍数の場合には「Buzz」を、出力 する数字が3の倍数かつ5の倍数の場合には「FizzBuzz」を、それぞれ数字の代わりに出力してください。
また、各数字もしくは文字列の出力の後に改行コード(LF - \n)を出力してください。
(1..100).each do |n| # 1〜100まで処理を繰り返す
def fizzbuzz(n)
if n % 15 == 0 # 3と5の倍数(3✖︎5)の時にFizzBuzzを出力(9/21追記コメントにてより良いコードの修正あり。)
puts "FizzBuzz"
elsif n % 3 == 0 #3の倍数の時にFizzを出力
puts "Fizz"
elsif n % 5 == 0 # 5の倍数の時にBuzzを出力
puts "Buzz"
else
puts n # 上記の条件に当てはまらない場合に数字を出力
end
end
puts fizzbuzz(n) # fizzbuzzメソッドを出力(9/21追記コメントにてputsは不要)
end
##▼問題2 素数を出力
1から1000までの素数を出力する関数を作成してください。
素数の定義は下記の通りである。
素数とは、1より大きい自然数で、約数が1と自分自身のみである数字である。
primeReturn = [] # primeReturnを配列にする
(1..1000).each do |n| # 1〜1000まで繰り返し処理
next if n == 1 # ifの条件がtrueの場合、nextで次の処理に移る
if n == 2
primeReturn.push(n) # pushメソッドでprimeReturnの配列の中の最後尾にnを加える
next # 次の処理に移る
end
# コメントにてご指摘されてますが、ここのアルゴリズムは無駄な工数があります。
judge = true
primeReturn.each do |number|
if n % number == 0 # 素数の処理
judge = false
break # 強制的に今のeach処理を終わらせて次の処理に移る
end
end
primeReturn.push(n) if judge # judgeがtrueだった場合のみ、pushメソッドでprimeReturnの配列の中の最後尾にnを加える
end
puts primeReturn # primeReturnを出力(素数を出力)
※rubyの場合もっと簡単にできます。
require 'prime' # primeライブラリを読み込み
Prime.each(1000) {|x| p x} # あらまぁとっても簡単。。。
##▼問題3 数字の7は何回出力されますか?
0から9999までの数字を順番に1刻みで出力するプログラムを作成しました。 このプログラムを実行した際に、数字の7は何回出力されますか? 例えば、7777が出力された場合、数字の7は4回出力されたものとしてカウントします。 この問題の答え、もしくは答えを計算するためのプログラムを解答してください。
num = [*(1..9999)].to_s # to_s配列の中身を文字列に変換
puts num.count("7") # 配列の中身の文字列の中から7の文字数をカウントする
##参考にしたURL
https://qiita.com/motoki4917/items/ffc89d955e20b91d1014
https://techacademy.jp/magazine/7507
https://docs.ruby-lang.org/ja/latest/class/Prime.html
https://docs.ruby-lang.org/ja/latest/method/Array/i/inspect.html
https://qiita.com/syo19961113/items/9f189424b5af5e084d33