@proelixir

Страница 492 из 1045
shadowjack
02.04.2017
15:24:46
Совершенно нет. Какая разница, будешь ты на стеке или в аккумуляторе собирать результат?

Александр
02.04.2017
15:25:26
просто будет в теле функции не перемешано всё

в конце всегда ответ

в середине итерируемое значение

Google
Александр
02.04.2017
15:25:57
сначала - магическое значение n

shadowjack
02.04.2017
15:27:35
Задача такая: в банкомате есть купюры $100, 50 и 20. withdraw(n) должна вернуть спискок из трех элементов [n100, n50, n20] где nXX - количество купюр, которыми можно разменять n. Суммарное количество купюр должно быть минимально из всех вариантов.

Можешь попробовать сделать свой вариант. Задачка с codewars.

Александр
02.04.2017
15:29:27
а nil?

если нельзя разменять?

shadowjack
02.04.2017
15:29:53
nil я возвращаю если разменять нельзя но по условиям задачи этого не требудется.

Александр
02.04.2017
15:34:43
def withdraw(amount, {n100, n50, n20}) when amount >= 100, do: withdraw(amount - 100, { n100 + 1, n50, n20 }) def withdraw(amount, {n100, n50, n20}) when amount >= 50, do: withdraw(amount - 50, { n100, n50 + 1, n20 }) def withdraw(amount, {n100, n50, n20}) when amount >= 20, do: withdraw(amount - 20, { n100, n50, n20 + 1}) def withdraw(amount, _) when amount > 0, do: nil def withdraw(_, res), do: res

Dmitry
02.04.2017
15:34:45
Я бы сделал кейворд лист 00 = [0, 0], 10 = [1,3], 20 = [0, 1] и так до 90 А потом бы просто приписал вначале количество сотен

Александр
02.04.2017
15:34:50
не проверял пока

неправильно считает у меня =)

130 не выдаст

shadowjack
02.04.2017
15:42:48
Ну и уменя она написана в общем виде - для любого набора купюр (с некоторыми ограничениями) считает.

Google
Александр
02.04.2017
15:50:20
defmodule Test do def withdraw(amount, {n100, n50, n20}) when amount > 0 and rem(amount, 100) == 0, do: withdraw(amount - 100, { n100 + 1, n50, n20 }) def withdraw(amount, {n100, n50, n20}) when amount > 0 and rem(amount, 20) == 0, do: withdraw(amount - 20, { n100, n50, n20 + 1}) def withdraw(amount, {n100, n50, n20}) when amount >= 50, do: withdraw(amount - 50, { n100, n50 + 1, n20 }) def withdraw(amount, _) when amount > 0, do: nil def withdraw(_, res), do: res end

iex(4)> Test.withdraw(130, {0,0,0}) {0, 1, 4} iex(5)> Test.withdraw(230, {0,0,0}) {1, 1, 4}

тесты на codewars прошёл

с ума сойти там одно из решений с документацией =)

shadowjack
02.04.2017
15:56:52
Да, такие решения есть. Но мне моё все равно больше нравится.

Александр
02.04.2017
15:57:23
ты там под таким же ником?

shadowjack
02.04.2017
15:59:38
https://www.codewars.com/users/dmitryplatonov

Я там все задачки на 4 и 5 кю решил и стал дорешивать на 6-й (более легкие).

Александр
02.04.2017
16:02:01
зафоловвил тебя и клан добавил

Aldar
02.04.2017
16:03:20
тэкс алина еще не приходила)

shadowjack
02.04.2017
16:07:50
зафоловвил тебя и клан добавил
фига себе ты там монстр.

Александр
02.04.2017
16:08:06
да давно зареган просто

Aldar
02.04.2017
16:09:22
https://www.codewars.com/users/hardliner

добавьте в клан

Александр
02.04.2017
16:09:48
там ты сам у себя в профиле пишешь

pro.elixir напиши

и всех увидишь

shadowjack
02.04.2017
17:09:10
Ого у нас там уже банда - 7 человек.

Сегодня сделал первый заказ на upwork.

Google
shadowjack
02.04.2017
17:14:03
Кстати занял 3-е место в тесте на unix 8) походу одна ошибка из 40. Думал, что все правильно ответил.

По питону в 20%, по сетям в 10%.

В смысле в топ 20% и топ 10% соответственно.

Alex
02.04.2017
17:31:07
топ10, как правило, достигается изучением вопросов (с ответами), которые щедро разбросаны на просторах интернетов

мне кажется нет смысла сдавать там больше 3-4 тестов

shadowjack
02.04.2017
17:44:20
Не, настроить инстанс на Digital Ocean, и чуть поправить простой сайт (сделать валидацию мыла в форме обратной связи и чтоб оно мыло реально осылало).

Мне без сделанных работ никто не эликсире не даст работу.

Alexey
02.04.2017
17:45:58
замкнутый круг

عاصم بن حارث
02.04.2017
17:46:49
?

Dmitry
02.04.2017
17:55:00
defmodule Test do @cache %{ 0 => [0,0,0], 20 => [0,0,1], 40 => [0,0,2], 60 => [0,0,3], 80 => [0,0,4], 50 => [0,1,0], 70 => [0,1,1], 90 => [0,1,2], 10 => [1,1,3], 30 => [1,1,4], } def withdraw(10), do: nil def withdraw(30), do: nil def withdraw(number) when rem(number, 10) != 0, do: nil def withdraw(number) do index = rem(number, 100) [h|t] = @cache[index] [div(number-h*100,100)]++t end end

shadowjack
02.04.2017
18:06:40
Ну раз пошла такая пьянка

defmodule ATM do @bills [100, 50, 20] # Insructions say that you can assume that it's always possible to exchange # n with 100, 50 and 20 bills. This is (currently) not the case, # and random tests will generate invalid test cases with wrong checks. # So here is workaround def withdraw(10), do: [0, 0, 0] def withdraw(30), do: [0, 0, 1] # Let's make it general so it will work with any bills def withdraw(n) do withdraw(n, @bills) end defp withdraw(0, []), do: [] defp withdraw(_, []), do: nil defp withdraw(n, [hd | tl]) do w = withdraw(rem(n, hd), tl) cond do is_list(w) -> [div(n, hd) | w] # backtrack if above fails n >= hd && (w1 = withdraw(rem(n, hd) + hd, tl)) -> [div(n, hd) - 1 | w1] # backtrack failed too true -> nil end end end

можно еще упростить немного. is_list(w) -> заменть на w ->

عاصم بن حارث
02.04.2017
18:12:43
вариант 1 нагляднее, не?

shadowjack
02.04.2017
18:14:52
вариант 1 это какой?

عاصم بن حارث
02.04.2017
18:17:31
вариант 1 это какой?
דמיטרי רובינשטיין идея с @cache , например.

Александр
02.04.2017
18:19:47
@cache - не очень название, это же не кэш (сама идея с предварительным вычислением - хорошая)

Google
Александр
02.04.2017
18:20:18
и надо было отсортировать значения

shadowjack
02.04.2017
18:21:26
Ну хз. Нагляднее наверное да. Только тестами как покрывать? Вернее как удостовериться что все случаи проверены?

عاصم بن حارث
02.04.2017
18:22:09
@cache - не очень название, это же не кэш (сама идея с предварительным вычислением - хорошая)
лично, сам сторонник разворачивать циклы и прочее, если это оправдано. В данном случае, название можно потом зарефакторить ))) Да и этот вариант 1 чище смотрится, если развернуть в AST )))

عاصم بن حارث
02.04.2017
18:23:37
Ну хз. Нагляднее наверное да. Только тестами как покрывать? Вернее как удостовериться что все случаи проверены?
о! насущный вопрос. как искать середину в подходе к написанию кода и возможностью КАЧЕСТВЕННО покрыть код тестами!?!

shadowjack
02.04.2017
18:25:52
Ну не знаю, много ручных констант -> вероятность ошибки.

Как по мне.

Плюс не понятно как генерализовать на общий случай.

عاصم بن حارث
02.04.2017
18:29:03
Ну не знаю, много ручных констант -> вероятность ошибки.
бывает. но, например, в задачах, которые мне иногда приходится решать, много тригонометрии ))) крайне редко приходится их вычислять, крайне реееедко! все задается в виде массива предвычисленных значений... ни каких вычислительных циклов )))

обычно, квант в 1 градус... как следствие имеем массив [0..360] зачений ))) индекс - это градусы, а значение - это рез-тат ф-ции в градусе = индексу ))))

Admin
ERROR: S client not available

shadowjack
02.04.2017
18:33:12
Premature optimization is the root of all evil (c) Donald Knuth

Alexey
02.04.2017
18:35:03
ты ембеддер чтоли

عاصم بن حارث
02.04.2017
18:35:14
Premature optimization is the root of all evil (c) Donald Knuth
Donald, drugs until article typing is evil too... ))) (c) НародЪ

shadowjack
02.04.2017
18:35:35
Ой, это не Кнут а Хоар сказал, а Кнут процитировал.

عاصم بن حارث
02.04.2017
18:42:27
Ой, это не Кнут а Хоар сказал, а Кнут процитировал.
Что фатальней: высказать глупость или за кем-то глупость повторить?

shadowjack
02.04.2017
18:42:57
Где глупость-то?

عاصم بن حارث
02.04.2017
18:44:01
Где глупость-то?
Premature optimization is the root of all evil (c) Donald Knuth вот это, глупость. (имхо, конечно)

shadowjack
02.04.2017
18:45:25
Я не буду комментировать

عاصم بن حارث
02.04.2017
18:46:55
Google
Александр
02.04.2017
18:48:31
что будет если в реальной задаче добавиться ещё одна монета?

эту предварительную табличку придётся пересчитать

плюс поменять алгоритм

عاصم بن حارث
02.04.2017
18:49:27
Александр
02.04.2017
18:49:38
то есть некоторая дополнительная сложность есть

вот я пиарил тут на днях icfpc

там как раз такие задачи любят давать

ааа я не тут пиарил =)

عاصم بن حارث
02.04.2017
18:51:41
что будет если в реальной задаче добавиться ещё одна монета?
если применительно к данной конкретной задаче, то да! в моем случае НЕТ, это как в байке: Рисуются два круга, одни маленький, а другой большой. В каком круге БОЛЬШЕ градусов? -конечно в большом ))) [0..360] и заданный квант отсчета - ничего не надо перерасчитывать )))

Александр
02.04.2017
18:52:12
в общем https://docs.google.com/document/d/1eYVXS7UlLEp9JX13g_vF6yxQ3vm9-p1Q7xqD1-ymmMY/edit?usp=sharing тут я немного информации собрал о предыдущих соревнованиях, предлагаю ознакомится (предлагаю начать с ЖЖ adept) и кому интересно начать усиленно готовится

shadowjack
02.04.2017
18:52:51
Ну соревнования это такое... Не знаю, не моё мне кажется.

Александр
02.04.2017
18:53:10
там не спортивное программирование

там длиться 3 суток мероприятие

дают сложную задачу

и в последующие дни могут её изменить

عاصم بن حارث
02.04.2017
18:53:55
Сореванование - забава для самолюбия и завышенных амбиций.

Александр
02.04.2017
18:54:01
потому говнокод одноразовый как на codeforces не получится писать

Сореванование - забава для самолюбия и завышенных амбиций.
ну ещё и проверка своих знаний и умений + сравнение с другими

суть существования жизни на земле - борьба

عاصم بن حارث
02.04.2017
18:55:35
ну ещё и проверка своих знаний и умений + сравнение с другими
Если утрировать, то: если не сравнил с другими, то и писать не следует ))) А знания и умения надо УМЕТЬ применить, а не бахвалиться ими... Знаю супер-пупер теоретиков, но как кодеры г-но на палке. Знаю, так же, молчунов не "соревновашек", пишут так, что по-доброму завидно. (кажется не удачная аналогия)

Александр
02.04.2017
18:55:58
нет, откуда такой вывод?

shadowjack
02.04.2017
18:55:58
Ну кто-то может на это три дня убить. А кто-то нет. Что мы сравним, количество свободного времени?

Страница 492 из 1045