LoginSignup
68
82

More than 3 years have passed since last update.

未経験エンジニア転職中に出題されたコードディングテスト問題

Last updated at Posted at 2020-09-19

未経験転職にて出題された問題と、自分なりに調べて処理した答えを備忘録として載せます。

実力不足の自分なりに出した答えなので、修正や解説をいただけるととっても嬉しいです!

▼問題1 FizzBuzz

1から100までの数字を順番に出力する関数を作成してください。
ただし、出力する数字が3の倍数の場合には「Fizz」を、出力する数字が5の倍数の場合には「Buzz」を、出力 する数字が3の倍数かつ5の倍数の場合には「FizzBuzz」を、それぞれ数字の代わりに出力してください。
また、各数字もしくは文字列の出力の後に改行コード(LF - \n)を出力してください。

fizzbuzzのコード
(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の場合もっと簡単にできます。

rubyの簡単コード
require 'prime' # primeライブラリを読み込み
Prime.each(1000) {|x| p x} # あらまぁとっても簡単。。。

▼問題3 数字の7は何回出力されますか?

0から9999までの数字を順番に1刻みで出力するプログラムを作成しました。 このプログラムを実行した際に、数字の7は何回出力されますか? 例えば、7777が出力された場合、数字の7は4回出力されたものとしてカウントします。 この問題の答え、もしくは答えを計算するためのプログラムを解答してください。

数字の7を数えるコード
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

68
82
8

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
68
82