Giter Site home page Giter Site logo

data_analyst_edadeal's People

Contributors

danilfg avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

data_analyst_edadeal's Issues

Решение первой задачи

Тут тоже недавно проходил эти задачи перед вакансией и после решил погуглить первую задачу, вдруг есть еще более простые решения, нежели у меня. Слишком неоправданно сложные модели ты предлагаешь. Задача решается в 1 строчку.

У нас есть какой-то набор конфет: интересно поробовать посчитать сколько конфет каждого вида. Например в 1 варианте решения 3 "а", 4 "б", 5 "с". Как из этого мы можем понять на сколько равных частей их поделить? Найти наибольший общий делитель. Для (3, 4, 5) НОД = 1.

Для второго примера (2, 2, 4) НОД = 2.

Таким образом вся задача сводится к одной простой логике:

  1. считаем количество конфет каждого вида (можно обезличенно в списке, не парясь со словарем, потому что нам не особо важен вид конфет, а нужно только их кол-во)
  2. находим их общий НОД (обычно его находят для двух чисел, поэтому чтобы найти общий - нужно просто итерироваться следующим образом: находим НОД первых двух, находим НОД третьего числа с результатом первых двух, НОД 4-го числа с предыдущим рез-том и т.д. (функция reduce)).

Итого код который надо вписать есть одна простая строчка (ну и плюс два иморта gcd из math и reduce из functools, стандартных библиотек питона):
reduce(gcd, [x.count(v) for v in set(x)])

Все тесты прошла, время и память получились такие (в компиляторе Яндекса):
67ms | 4.01Mb
На выборке из 8 букв в списке получились следующие (%%timeit питон):
1.69 µs ± 146 ns per loop

Не представляю сколько у тебя эта задача памяти жрет со временем, учитывая твою сложность минимум О(n^3)

Ну и после нашел еще быстрее решение (по скорости):
reduce(gcd, map(x.count, set(x)))
1.04 µs ± 71.6 ns per loop

Понимаю, что задачу ты решал года два назад, но вдруг кому-то она будет все еще актуальна:)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.