既読ユーザー
その他6人
ソートバブルの課題を終えてまとめてみた
ディスカッション
  • miketa-webprgr(みけた) 2021/09/03 09:27

    いいまとめですね!
    ただ、いくつかツッコミたいところがあります笑

    細かく書くと大変なので、大きくポイントを2つ。

    • 並び替えBを繰り返す回数に変数nが使われているにもかかわらず、並び替えBにおいて2つの要素を比べるときにも変数nを使っていてよろしくなさそう
    • 日本語として理解した内容と、実装した内容が一致していない

    あとは、とりあえずコードを貼っておくので、実行したりコードリーディングすると何かが分かってくるかも!

  • miketa-webprgr(みけた) 2021/09/03 09:29

    これは、todakaさんのコードを実行した際に、何が行われているか、多少わかりやすくしたものです。
    中身自体は一切変えていないです。(たぶん)

    # timesで作成
    numbers = [3, 1, 2, 5, 11, 4, 10, 7, 8, 6]
    counts = numbers.size
    
    # 並び換えA
    counts.times do
      n = 1
      narabikae_kaisu = counts - n
      p "並び替え回数: #{narabikae_kaisu}"
       # 並び換えB
      narabikae_kaisu.times do
        puts "#{n - 1}番目の要素と#{n}番目の要素の大小を判断し、必要であれば入れ替える"
        if numbers[n - 1] > numbers[n]
          numbers[n - 1], numbers[n] = numbers[n], numbers[n - 1]
        end
        n += 1
      end
    end
    p numbers
    

    実行結果はこんな感じです。

    ❯ ruby todaka-bubblesort2.rb
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    [1, 2, 3, 4, 5, 6, 7, 8, 10, 11]
    
  • daidai3110 2021/09/03 09:31

    こういうアウトプットまじでいいですね。

    Rails以前にRubyを最低限使えないと技術面接で困ると思うのでこの辺やると良いと思います。

    rubyに慣れるために

    問題 - AtCoder Beginners Selection

    AtCoder Problems

    Rubyで競プロするときのTips - ARMERIA ← 入出力編は押さえといた方がいいです。よく使うので。

  • miketa-webprgr(みけた) 2021/09/03 09:33

    で、これが私なりに改変してみたものです。ちょっとtodakaさんの意図をくんでないかもしれないですが。
    長くなっちゃいますけど、またコードと実行結果を貼っておきます。

    # timesで作成
    numbers = [3, 1, 2, 5, 11, 4, 10, 7, 8, 6]
    counts = numbers.size
    n = 1
    
    # 並び換えA
    counts.times do
      narabikae_kaisu = counts - n
      p "並び替え回数: #{narabikae_kaisu}"
       # 並び換えB
      narabikae_kaisu.times do |x|
        puts "#{x}番目の要素と#{x + 1}番目の要素の大小を判断し、必要であれば入れ替える"
        if numbers[x] > numbers[x + 1]
          numbers[x], numbers[x + 1] = numbers[x + 1], numbers[x]
        end
      end
      n += 1
    end
    p numbers
    
    ❯ ruby todaka-bubblesort3.rb
    "並び替え回数: 9"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    8番目の要素と9番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 8"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    7番目の要素と8番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 7"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    6番目の要素と7番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 6"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    5番目の要素と6番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 5"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    4番目の要素と5番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 4"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    3番目の要素と4番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 3"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    2番目の要素と3番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 2"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    1番目の要素と2番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 1"
    0番目の要素と1番目の要素の大小を判断し、必要であれば入れ替える
    "並び替え回数: 0"
    [1, 2, 3, 4, 5, 6, 7, 8, 10, 11]
    
  • miketa-webprgr(みけた) 2021/09/03 09:34

    あ、だいそんさんの投稿をサンドイッチしてしまいました。。。

    p や puts でデバッグしたり、あと調べるとデバッグツールというのがあるので、
    そのあたりを使いながら実際に実行結果が想定どおりか考えてみるといいですよ!

    日曜日とかに、タイミングがあえば、話せると面白そう!!

  • daidai3110 2021/09/03 09:41

    byebug 入れてデバッグするのもめちゃ大事すね!

  • satoshitodaka 2021/09/04 07:21

    コメント遅くなってしまいすみません💦
    ご指摘いただきありがとうございます!(しかもめちゃ早い。。!)

    自分でも試してみましたが、確かに日本語の理解とコードが違いますね。
    もう少し試してみて、コードも修正したいと思います。
    明日は空いてますので、お話できると嬉しいです!

  • junnosuke 2021/09/04 21:31

    すごいです。(語彙力低くてすいません)
    勉強になりました。
    アウトプットってすごく刺激的ですね。書く方も読む方も。

    いけるかは未定ですが、日曜であれば新参者ですがお話に混ぜていただけたらうれしいです。

  • daidai3110 2021/09/05 08:32

    アウトプットってすごく刺激的ですね。書く方も読む方も。

    オリジナルアプリと同じくらいこういう「試行錯誤のログ」は大事ですね!!

  • daidai3110 2021/09/05 08:51

    ちなみにbyebugはこんな風に書きます。

    require 'byebug'
    
    def bubble_sort(args)
      byebug
      length = args.length
    
      ary
    end
    
    p bubble_sort([3,2,1,0])
    

    image

  • satoshitodaka 2021/09/05 12:18

    皆さん、コメントいただきありがとうございます!
    みけたさんの指摘を自分なりに解釈しアウトプットに追記しましたので、ご確認いただけないでしょうか🙇‍♀️