Size: a a a

Ruby, Rails, Hanami | dry-rb

2019 November 25

SP

Sergey Pustovalov in Ruby, Rails, Hanami | dry-rb
Dima
Конечно Ruby это язык не для вычислительных задачь, а для быстрого создания бизнес решений. Но то что на Leetcode дают измерение скорости работы программы делает интересным оптимизацию.

Пока самое быстрое решение 40ms совсем не оптимально с позиции количества проходов:
# https://leetcode.com/problems/move-zeroes/
# Runtime: 40 ms, faster than 68.40% of Ruby online submissions for Move Zeroes.
# Memory Usage: 9.9 MB, less than 50.00% of Ruby online submissions for Move Zeroes.
   
def move_zeroes(nums)
   size = nums.count(0)
   answer =  nums.select{|x| x != 0} + ([0]*size)
   nums.clear()
   answer.each{|x| nums.push(x)}
end

И памяти потребляет в 2 раза больше.

На 4 ms остает решение inplace. Которое вроде оптимально, но скорее всего не использует C модули, по этому работает медленней

# https://leetcode.com/problems/move-zeroes/
# Runtime: 44 ms, faster than 27.91% of Ruby online submissions for Move Zeroes.
# Memory Usage: 9.8 MB, less than 100.00% of Ruby online submissions for Move Zeroes.

   
def move_zeroes(nums)
   i = 0
   nums.each do |x|
       if x != 0
           nums[i] = x
           i += 1
       end
   end
   (i...nums.size).each do |j|
       nums[j] = 0
   end
end


Пока я не нашел как написать самое быстрое решение этой задачи среди всех решений на Ruby
nums.partition { |i| !i.zero? }.flatten
не подходит решение потому что исходный аргумент не модифицирутеся, но вроде так быстрее должно быть
источник

D

Dima in Ruby, Rails, Hanami | dry-rb
Sergey Pustovalov
nums.partition { |i| !i.zero? }.flatten
не подходит решение потому что исходный аргумент не модифицирутеся, но вроде так быстрее должно быть
сейчас поробую. Интересно как можно быстро переписать данные в новый массив.  nums.clear(); nums.push(* answer) - у меня так медленеей получилось чем push в каждой итерации.
источник

D

Dima in Ruby, Rails, Hanami | dry-rb
Sergey Pustovalov
nums.partition { |i| !i.zero? }.flatten
не подходит решение потому что исходный аргумент не модифицирутеся, но вроде так быстрее должно быть
!i.zero? == i.nonzero?
источник

D

Dima in Ruby, Rails, Hanami | dry-rb
Dima
сейчас поробую. Интересно как можно быстро переписать данные в новый массив.  nums.clear(); nums.push(* answer) - у меня так медленеей получилось чем push в каждой итерации.
прикольно, сначала отчистил потом давай отчищать  вычислять:)
источник

D

Dima in Ruby, Rails, Hanami | dry-rb
стабильно 44ms
# https://leetcode.com/problems/move-zeroes/
# Runtime: 44 ms, faster than 27.91% of Ruby online submissions for Move Zeroes.
# Memory Usage: 9.9 MB, less than 50.00% of Ruby online submissions for Move Zeroes.    
def move_zeroes(nums)
   answer =  nums.partition{|x| x.nonzero?}.flatten
   nums.map!.with_index{|x,i| answer[i]}
end
источник

AB

Artur Borisovich in Ruby, Rails, Hanami | dry-rb
источник

RK

Rostislav Katin in Ruby, Rails, Hanami | dry-rb
Runtime: 32 ms, faster than 97.55% of Ruby online submissions for Move Zeroes.
Memory Usage: 9.8 MB, less than 100.00% of Ruby online submissions for Move Zeroes.

def move_zeroes(nums)
   total = nums.length
   nums.select! { |i| i != 0 }
   (nums.size...total).to_a.each { |i| nums[i] = 0 }
end
источник

RK

Rostislav Katin in Ruby, Rails, Hanami | dry-rb
а вообще фигня какая-то
источник

D

Dima in Ruby, Rails, Hanami | dry-rb
Rostislav Katin
Runtime: 32 ms, faster than 97.55% of Ruby online submissions for Move Zeroes.
Memory Usage: 9.8 MB, less than 100.00% of Ruby online submissions for Move Zeroes.

def move_zeroes(nums)
   total = nums.length
   nums.select! { |i| i != 0 }
   (nums.size...total).to_a.each { |i| nums[i] = 0 }
end
это супер.
источник

RK

Rostislav Katin in Ruby, Rails, Hanami | dry-rb
засабмитил еще раз - получил вот это
источник

RK

Rostislav Katin in Ruby, Rails, Hanami | dry-rb
Runtime: 28 ms, faster than 99.39% of Ruby online submissions for Move Zeroes.
Memory Usage: 9.6 MB, less than 100.00% of Ruby online submissions for Move Zeroes.
источник

D

Dima in Ruby, Rails, Hanami | dry-rb
там плавает.
источник

RK

Rostislav Katin in Ruby, Rails, Hanami | dry-rb
а потом вот это
источник

RK

Rostislav Katin in Ruby, Rails, Hanami | dry-rb
Runtime: 60 ms, faster than 15.03% of Ruby online submissions for Move Zeroes.
Memory Usage: 9.9 MB, less than 100.00% of Ruby online submissions for Move Zeroes.
источник

D

Dima in Ruby, Rails, Hanami | dry-rb
но все равно представление о эфективности дает.
источник

D

Dima in Ruby, Rails, Hanami | dry-rb
Rostislav Katin
а потом вот это
с первого раза 97.55% когда я засабмитил.
источник

RK

Rostislav Katin in Ruby, Rails, Hanami | dry-rb
ну, в целом неплохо
источник

SP

Sergey Pustovalov in Ruby, Rails, Hanami | dry-rb
Runtime: 36 ms, faster than 91.10% of Ruby online submissions for Move Zeroes.
Memory Usage: 9.7 MB, less than 100.00% of Ruby online submissions for Move Zeroes.
def move_zeroes(nums)
   total = nums.length
   nums.select! { |i| i != 0 }
   nums[nums.size] = Array.new(total - nums.size, 0)
   nums.flatten!
end
источник
2019 November 26

NG

Nikkie Grom in Ruby, Rails, Hanami | dry-rb
Йо, добрый день
Дружил кто rails с яндекс Object Storage?
Конфиг:
 
yandex:
   service: s3
   access_key_id: ***************
   secret_access_key: Ox***********************
   bucket: bucketname
   endpoint: https://storage.yandexcloud.net
   force_path_style: true

Ошибка (при db:seed)  на деве:

Attaching image: /path/to/image
rails aborted!
Seahorse::Client::NetworkingError: Failed to open TCP connection to bucketname.s3.ru-central1.amazonaws.com:443 (getaddrinfo: Name or service not known)
источник

SS

Sergii Serogin in Ruby, Rails, Hanami | dry-rb
он амазон использует?
источник