スポンサーサイト
0

    一定期間更新がないため広告を表示しています

    カテゴリ:- | | - | - |
    CodeIQ Crossing問題
    0

       久しぶりにCodeIQをのぞいてみると面白そうな問題が乗っていました。

      概要は、任意の置換が与えられ、それをあみだくじとみなした場合の横棒の数を
      (できるだけ)速く求めよ。というものでした。
      ※原文は全然違いますが、まぁこういうことだろうと理解して考えました。

      で、とりあえず書いてみたコードが以下。

      ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
      to=[]
      itr = 0

      #置換をあたえるファイルを読み込み、配列に格納
      open('D:¥Ruby¥ProjectEuler¥ReadFiles¥crossing.txt') do |f|
        f.each do |n|
          to[itr] = n.to_i
          itr = itr + 1
         end
      end

      count = 0

      #ごりごり計算する
      (0..to.size-1).each do |i|
        (i+1..to.size-1).each do |j|
          if to[i] > to[j] then
            count = count +1
          end
        end
      end

      #結果を表示する
      p count
      ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

      これだといつまで経っても終わりませんでした。
      で、改良したものが以下。

      ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
      #f = open('D:¥Ruby¥ProjectEuler¥ReadFiles¥sample.txt')

      to=[]

      itr = 0

      open('D:¥Ruby¥ProjectEuler¥ReadFiles¥crossing.txt') do |f|
        f.each do |n|
          to[itr] = n.to_i
          itr = itr + 1
         end
      end

      count = 0

      (0..to.size-1).each do |i|
      #追加
      count_tmp = 0
        (i+1..to.size-1).each do |j|
          if to[i] > to[j] then
            count = count +1
            count_tmp = count_tmp + 1
            #追加
            if to[i] + count_tmp = to.size+1 then
             break
            end
          end
        end

      end

      p count

      ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
      これだと割と高速に結果が出力されました。
      あっているかはわかりませんが。




      ちなみに、備忘録と思ってこの記事を書いているのに、どういう意図でコードを記述しているかを言葉で上手に書けないのであきらめてコードを載せるだけにとどめます。

      絵で描けば簡単なんだけどなぁ。

      カテゴリ:Ruby | 22:29 | comments(0) | trackbacks(0) |
      | 1/1PAGES |