不格好エンジニア (引っ越しました)

wordpress.comから引っ越しました。

コーディング面接対策サイトCodilityの練習問題を解いてみた(TapeEquilibrium)

問題

テーブを前半と後半に切断して差分を比較し、最も少ない差分を返す

Test results - Codility

回答

headにテープの前半部分を、tailにテープの後半部分を格納する。 インデックスを動かすごとにdiffを再計算する。

def solution(a)
  sum = a.reduce(:+)

  head = a[0]
  tail = sum - a[0]
  min_diff = 10000

  for i in 1...a.length
    diff = (head-tail).abs
    min_diff = [min_diff, diff].min
    head += a[i]
    tail -= a[i]
  end
  min_diff
end
# debug

arr = [3,1,2,4,3]
p solution(arr)

arr1 = [-1, 1]
p solution(arr1)

その他

rubyのreduce知らんかった。。。