BETA

演習問題色々①

投稿日:2018-11-19
最終更新:2018-11-19

Webテストのできが悪くてショックだったのでアウトプットをたくさんこなそうと決意しました。 スクールのメンターさんから問題をいただいたので、いくつかまとめておこうと思います。

文字列の逆さ読みを返す関数

タイトルであれば、"数関す返をみ読さ逆の列字文"を返す関数ですね。 以下が自分の回答です。

p "文字列を入力"
input = gets.to_s
array = []
letters = ""

for num in 0..input.length do
  array.unshift input[num]
end

for n in 0..array.join(",").length do
  if n >= 2
    letters += array[n].to_s
  end
end

p letters

一旦逆順で配列に入れたのち、その長さ分だけ文字列連結させます。 最初の2文字は改行文字になってしまうので、そこは取り除きます。

関数f(x)と自然数nを引数に取り、fをn回xに適用する関数を返す高階関数

以下のような回答で・・・

def koukai(kore,dore)
  dore[kore]
end

n_obj = lambda{|n|
              sum = 1
              for num in 1..n do
                sum *= 2 #関数f(x)を適当に設定
              end
              sum
}

m_obj = lambda{|m|
              sum = 1
              for num in 1..m do
                sum *= 3 #関数f(x)を適当に設定
              end
              sum
}

p koukai(8, n_obj) #=>256
p koukai(8, m_obj) #=>6561

手続き型オブジェクトを使って、指定された自然数の回数だけ関数f(x)を実行します。

Ruby でまなぶ高階関数【基本編】

lambda式とか意味わかってなかったですが、回答を考える過程で少しわかった気がします。

素数を2から順に返す関数を返す高階関数を定義する

前述のlambda式を使用して以下の回答となりました。

def koukai(are,sore)
  sore[are]
end

array = [2]
n_obj = lambda{|n|
        disible = false
        array.each{|num|
                  if n % num == 0
                    disible = true
                    break
                  end
        }
        if !disible
          array.push n
        end
}

p "2以上の数字を入力し、その数字以下の素数を出力"
input = gets.to_i

for i in 2..input do
  koukai(i,n_obj)
end

p array

最初はこのようにlambda式の中身を記入していました。 arrayの中身全てに対し割り切れなかった数字は、新しくarrayに追加します。 これでもいいのですが、冗長な感じになってしまい、可読性も悪いですね・・・ 別件を調べてるうちに、all?メソッドなるものがこれに使えることに気づきました。

# n_objだけ書き換え
n_obj = lambda{|n|
        if array.all?{|num| n % num != 0}
          array.push n
        end
}

これでも同様の働きをしてくれます。非常にわかりやすくなりました。 自分でコードを考えるのは大切ですが、知識をつけておけばすぐに対処できる場面があるということも改めて実感しましたね・・・

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

作ったもの、プログラミングで共有できそうなこと、IT関連でやってみたことなど、なんでも書いていきます。ヤドン可愛い

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!