Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 56 additions & 11 deletions library_manager.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
class LibraryManager

require 'active_support/all'
# 1. Бибилиотека в один момент решила ввести жесткую систему штрафов (прямо как на rubybursa :D).
# За каждый час опоздания со здачей книги читатель вынужден заплатить пеню 0,1% от стоимости.
# Необходимо реализовать метод, который будет считать эту сумму в зависимости от даты выдачи и
Expand All @@ -11,11 +11,9 @@ class LibraryManager
# - дата и время возврата (момент, когда книга должна была быть сдана, в формате DateTime)
# Возвращаемое значение
# - пеня в центах
def penalty price, issue_datetime
def penalty(price, issue_datetime)
# решение пишем тут



(((Time.now - issue_datetime) / 1.hours) * (price / 1000.0)).round
end

# 2. Известны годы жизни двух писателей. Год рождения, год смерти. Посчитать, могли ли они чисто
Expand All @@ -32,9 +30,22 @@ def penalty price, issue_datetime
# - true или false
def could_meet_each_other? year_of_birth_first, year_of_death_first, year_of_birth_second, year_of_death_second
# решение пишем тут



# буду использовать массивы
# вычислю продолжительность жизни авторов

life_first = year_of_death_first - year_of_birth_first
life_second = year_of_death_second - year_of_birth_second

# формирую массывы жизни для каждого из автров
time_first = Array.new(life_first){ |index| year_of_birth_first + index + 1 }
time_secon = Array.new(life_second){ |index| year_of_birth_second + index + 1 }

if (time_first & time_secon).size > 0
return true
else
return false
end

end

# 3. Исходя из жесткой системы штрафов за опоздания со cдачей книг, читатели начали задумываться - а
Expand All @@ -47,10 +58,19 @@ def could_meet_each_other? year_of_birth_first, year_of_death_first, year_of_bir
# - число полных дней, нак которые необходимо опоздать со здачей, чтобы пеня была равна стоимости книги.
def days_to_buy price
# решение пишем тут
# вычисляем пеню книги за 1 день
penalty_day = 24 * (price / 1000.0)

i = 0
current_day = 0
while current_day < price



i += 1
current_day = penalty_day * i

end

return i
end


Expand All @@ -64,7 +84,32 @@ def days_to_buy price
# - имя и фамилия автора транслитом. ("Ivan Franko")
def author_translit ukr_name
# решение пишем тут

replace = {

'а' => 'a', 'б' => 'b', 'в' => 'v',
'г' => 'h', 'д' => 'd', 'е' => 'e', 'є' => 'ie',
'ж' => 'zh', 'з' => 'z', 'і' => 'i',
'и' => 'y', 'й' => 'i', 'к' => 'k', 'ї' => 'i',
'л' => 'l', 'м' => 'm', 'н' => 'n', 'ґ' => 'g',
'о' => 'o', 'п' => 'p', 'р' => 'r',
'с' => 's', 'т' => 't', 'у' => 'u',
'ф' => 'f', 'х' => 'kh', 'ц' => 'ts',
'ч' => 'ch', 'ш' => 'sh', 'щ' => 'shch',
'ю' => 'iu', 'я' => 'ia',

'А' => 'A', 'Б' => 'B', 'В' => 'V',
'Г' => 'H', 'Д' => 'D', 'Е' => 'E', 'Є' => 'Ye',
'Ж' => 'Zh', 'З' => 'Z', 'І' => 'I',
'И' => 'Y', 'Й' => 'Y', 'К' => 'K', 'Ї' => 'Yi',
'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'Ґ' => 'G',
'О' => 'O', 'П' => 'P', 'Р' => 'R',
'С' => 'S', 'Т' => 'T', 'У' => 'U',
'Ф' => 'F', 'Х' => 'Kh', 'Ц' => 'Ts',
'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Shch',
'Ю' => 'Yu', 'Я' => 'Ya', ' ' => ' '
}

ukr_name.gsub(/#{replace.keys}/, replace)


end
Expand Down
40 changes: 11 additions & 29 deletions library_manager_spec.rb
Original file line number Diff line number Diff line change
@@ -1,55 +1,37 @@
require './library_manager.rb'
require 'active_support/all'
require 'pry'

describe LibraryManager do

it 'should return penalty' do
two_days_ago = DateTime.now.new_offset(0) - 48.hours
price_in_cent = 1400

res = LibraryManager.new.penalty(price_in_cent, two_days_ago)

expect(res).to eq 68
end


expect(res).to eq 67
end
it 'should return possibilyty of meeting' do
res = LibraryManager.new.could_meet_each_other?(1234, 1256, 1876, 1955)

expect(res).to eq false
end


res = LibraryManager.new.could_meet_each_other?(1234, 1256, 1235, 1245)
expect(res).to eq true
end
it 'should return days to buy for particular book with price' do
price_in_cent = 1400

res = LibraryManager.new.days_to_buy(price_in_cent)

expect(res).to eq 41
end


expect(res).to eq 42 # The result is always 41.6 ~ 42.
end
it 'should return name in transliteration' do
author_name = "Гнат Хоткевич"

res = LibraryManager.new.author_translit(author_name)

expect(res).to eq 'Hnat Hotkevych'
end


expect(res).to eq 'Hnat Khotkevych'
end
it 'should return penalty to finish reading' do
twenty_days_from_now = DateTime.now.new_offset(0) + 480.hours
price_in_cent = 1400
pages_quantity = 348
#binding.pry
#binding.pry
current_page = 25
reading_speed = 5

res = LibraryManager.new.penalty_to_finish(price_in_cent, twenty_days_from_now, pages_quantity, current_page, reading_speed)

expect(res).to eq 0
end

end
end