

Eugene
28.08.2018
14:41:02
народ, задачка на подумать, звучит как что-то что уже обсасывалось, а может и нет…
Есть массив объектов с двумя полями: price и max_items. Поле price - просто цена товара. Поле max_items говорит о том, сколько товаров включая этот можно положить в одну корзину. Например, если max_items == 1, то этот товар может быть в корзине только один. Если max_items == 2 - то если в корзине лежит такой товар, к нему можно положить еще один.
Задача: найти в заданом массиве комбинацию из (up to 3) элементов, сумма цен которых будет максимально возможной. Например, это может быть один элемент { price: 9999, max_items: 1 }, или два элемента [{ price: 5000, max_items: 3 }, { price: 5000, max_items: 2 }], или три.
Из того что мне приходит в голову - в лоб - перебирать от 3 до 1 все возможные комбинации, и брать max из этого. Но может есть более элегантные решения
Похоже на задачу укладки рюкзака https://ru.wikipedia.org/wiki/%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BE_%D1%80%D0%B0%D0%BD%D1%86%D0%B5


No
28.08.2018
14:41:34
А по условия задачи - нам как раз max найти надо

Aleksey
28.08.2018
14:42:15
в моем случае max тоже есть - только это не цена итоговая, а кол-во предметов

Google

Aleksey
28.08.2018
14:42:43
по идее можно попробовать поменять местами параметры

No
28.08.2018
14:43:08
Чем не подходит моя идея выше?
а
я неправильно понял условие похоже

s
28.08.2018
14:53:01
а почему не правильно? если упорядочить по цене, то сумма максимальных цен будет тем, что нужно)

Aleksey
28.08.2018
14:54:56

s
28.08.2018
14:55:14
почему нельзя?

Aleksey
28.08.2018
14:55:42
потому что условие задачи такое ) дан массив элементов, ни больше ни меньше )
шаг 1: берем итемы с max == 1 - среди них берем самый дорогой, это первый кандидат
шаг 2: берем итемы с max == 2 - комбинируем с другими из этой же группы по парам, а так же с теми что из группы ниже - берем самую дорогую комбинацию
шаг 3: берем итемы с max == 3 - комбинируем друг с другом по 3, берем максимальную сумму
шаг 4: берем максимум из трех шагов выше…
вроде норм, хотя элемент перебора есть

Pavel
28.08.2018
14:59:17
Возможно есть решения математические, это раздел исчислительной комбинаторики

biert
28.08.2018
15:03:08
Ребята, а может быть ситуация что на локалхосте некоторый код получение данных через xhr и заполнением потом данными страницу работает ибо он медленнее продакшна, а на продакшине ошибки из-за слишком быстрого получения данных

Смерть
28.08.2018
15:07:29
Возможно, если у тебя код асинхронный и криво написаны синхронизации

Google

biert
28.08.2018
15:21:01
ну типо есть call и потом колбек on success
я че-т разобраться не могу

Смерть
28.08.2018
15:49:33

Иван
28.08.2018
16:39:04


Gregory Tereshko
28.08.2018
19:42:43
Друзья, кто-нибудь работал с докером и гемом orats для создания rails-проекта (https://github.com/nickjj/orats)?
В общем создал проект, докерфайл, докеркомпоз. Все как полагается.
Запускаю docker-compose up --build
Но приложение не стартует. Кидает такую ошибку в лог:
https://i.imgur.com/8NHLLpC.png
Вообще никакого представления не имею что это. Может быть есть идеи
Спасибо)

Dmitry
28.08.2018
19:56:31

Gregory Tereshko
28.08.2018
20:00:03
website_1 | /usr/local/bundle/gems/pg-1.1.0/lib/pg.rb:4:in `require': Error relocating /usr/local/bundle/gems/pg-1.1.0/lib/pg_ext.so: rb_enc_alias: symbol not found - /usr/local/bundle/gems/pg-1.1.0/lib/pg_ext.so (LoadError)

wi11son
28.08.2018
20:52:49
Перебилдить гем pg нужно по всей видимости

Gregory Tereshko
28.08.2018
21:46:25

Sergey
29.08.2018
10:27:09
билд же нужен тогда когда тебе гемы надо обновить в dev режиме. А так прописываешь ` volumes:
- ./usr/src/app` в compose, и докер сам цепляет ласт версию кода из проекта

Gregory Tereshko
29.08.2018
10:31:19

Sergey
29.08.2018
10:37:15
попробуй апгрейд/даунгрейд версии гема. У тебя может быть несовместимость его с версией pg
и build —no-cache на всякий

Aleksey
29.08.2018
11:15:12
кто-то помнит как звучит стайлгайд насчет let() и let!() в рспеке? постоянно забываю, что кошерно - юзать let + before или let!

Denis
29.08.2018
11:17:19
Зависит от задачи

Кøе-ктø Геннадьевич
29.08.2018
11:17:30

Denis
29.08.2018
11:17:31
И то и другое хорошо и правильно

Anton
29.08.2018
11:17:32

Google

Aleksey
29.08.2018
11:17:56
мммм
are you sure?
по-моему нет

Anton
29.08.2018
11:18:15
Вроде так было

Adamtsov
29.08.2018
11:18:47
let! вызывается вначале теста, а let только в тот момент, когда обратишься к переменной

Aleksey
29.08.2018
11:18:53
я помню какой-то кейс, типа если есть переменная let() и она используется потом внутри блока it { }, то надо юзать before, а если не используется - то можно let!()
но не могу найти пруфа где я это читал

Антон
29.08.2018
11:31:01
let! происходит перед каждым итом даже если к этой переменной не обращались
let только когда обращаются
типа нужно пост создать для "\" иначе 500 то let!(post) { create :post }

Aleksey
29.08.2018
11:33:17
ага. но вопрос остается октрытым, чо там по стайлгайдам ?

Антон
29.08.2018
11:53:10
это методы, один используется в одном случае, другой в другом
какие стайлы? какие стайлгайды?

Антон
29.08.2018
11:53:46
не нужно let! если объект нужен только по требованию - это здравый смысл, а не гайд

Кøе-ктø Геннадьевич
29.08.2018
11:56:58
http://www.betterspecs.org/ru/#let

Антон
29.08.2018
11:59:34
Ну это так себе стайлгайд
взять хотябы "Безусловно, они(моки) полезны, но злоупотреблять ими не стоит - там, где это возможно, лучше тестировать реальное поведение системы."

Denis
29.08.2018
12:13:58
Привет. а как запрерить перезаписаь переменной в которой хранится строка?

Nikita
29.08.2018
12:14:25
.freeze

Denis
29.08.2018
12:14:40
работает только с масивами же

Nikita
29.08.2018
12:14:54
а да, сорян

Google

Nikita
29.08.2018
12:14:57
не дочитал

Aleksey
29.08.2018
12:16:09
от перезаписи ничего не спасет

Admin
ERROR: S client not available

rekero
29.08.2018
12:16:13
>запретить менять переменную

Aleksey
29.08.2018
12:16:16
а .freeze и на строках работает

Igor
29.08.2018
12:17:03
http://www.betterspecs.org/ru/#let
Тут дано не корректное описание, как работает let!, которое вводит в заблуждение.
Еще существует let!, который выполняется сразу после объявления.
На самом деле он работает так:
def let!(name, &block)
let(name, &block)
before { __send__(name) }
end
Что даёт совсем другие сценарии использования. Например объявить пустой let! во внешнем контексте в качестве "фикстур", а потом переопределить его уже для конкретного теста где то во вложенных контекстах.

Denis
29.08.2018
12:18:02

Nikita
29.08.2018
12:18:32
https://freelancing-gods.com/2017/07/27/an-introduction-to-frozen-string-literals.html

Aleksey
29.08.2018
12:18:57
2.3.1 :001 > str = 'hello'.freeze
=> "hello"
2.3.1 :002 > str << 'world'
RuntimeError: can't modify frozen String
c += очевидно работает потому что это перезапись всей переменной

Denis
29.08.2018
12:20:52

Aleksey
29.08.2018
12:21:29
строка + строка = новая строка, а не модифицированная старая
так же точно и с массивами

Roman
29.08.2018
13:18:34
народ подскажите приходит дата рождения с внешнего апи "0000-00-00", как ее правильно преобразовать в дату, понятно что такой дат нет но как это обрабатывается потом на view типа 1970-01-01?

Антон
29.08.2018
13:25:39
ну ты же уже начал что-то делать? что не получилось?

Roman
29.08.2018
13:28:41
def user_birthday_value(user)
Date.parse(user.birthday).strftime('%d/%m/%Y')
end
вот здесь все падает

Антон
29.08.2018
13:29:09
как падает?

Roman
29.08.2018
13:29:19
может проверку типа вот такого делать "0000-00-00".include? '0000'

Google

Антон
29.08.2018
13:29:25
плохой путь

Roman
29.08.2018
13:29:28
invalid date

Антон
29.08.2018
13:29:28
как падает?
падает с ошибкой
что можно сделать с известной ошибкой?

Roman
29.08.2018
13:30:32
да я уже гуглил)

Denis
29.08.2018
13:30:41
плохо гуглил

Антон
29.08.2018
13:31:04

Roman
29.08.2018
13:31:22
date.parser

Антон
29.08.2018
13:32:42
я спрошу еще раз
есть ошибка, она известна, она чужая, что можно сделать с ошибкой в таком случае, вне зависимости от того парсер это или фигарсер?

Aleksey
29.08.2018
13:32:55