IT - FAANG

104
Статистика
Статистика
104
Статистика темы
  • Популярность
    Топ-6262
  • Постов
    140
  • Просмотров
    31,247
  • Подписок
    104
  • Карма автора
    +3,240
1 4 5 6 7 8
  • thepazdk, так вроде как можно в случае платной подписки

     

    или речь про какие-то местные законы и тд?

    Ответить Цитировать
    44/62
    + 1
  • В январе спрашивал, интересно ли тут кому-то обсуждение алго задач:

    Плюсаните, если кому-то интересно обсуждение решений алго задач здесь.

    плюсануло аж 19 человек, а это значит, что кто-то готов обсуждать. я-то спросил, а потом подумал, что не очень понятно в каком формате это делать...

    просто постить ссылку на задачу с литкода или откуда-то еще как-то не очень прикольно, тк можно просто там же на месте ее и обсудить в соотв. разделе. подумал, что, возможно, будет интереснее, если я буду хоть как-то адаптировать задачи под покерную тематику, ну или хотя бы что-то с этим связанное. если у меня это получилось, то: 

    а) я точно понял суть задачи (ну скорее всего), что означает, что тот или иной паттерн задачи в голове сформировался (я надеюсь)

    б) возможно, это будет чуть интереснее, чем просто абстракции типа чисел, массивов, и тд (тут уже хотелось бы фидбэк какой-то услышать)

    в) все равно лучше пока ничего не придумал 

    д) кто знает, мб это в какую-то рубрику превратится (еженедельную/месячную?)

     

    Вдохновился я опять классическим мемом про казино, поэтому задача будет называться:

     

    "Какого х*я они в другом порядке разложены?"

    Дано: дилер взял произвольное количество колод, достал из каждой произвольное количество карт, смешал между собой и разложил по старшинству, получив N карт, разложенных в порядке возрастания (самая низкая сверху колоды). После этого пришел другой дилер и подснял колоду 1 раз. Первый дилер вернулся и разложил все карты в ряд по порядку лицом вниз, он хочет узнать, какой по счету (номер карты) будет карта X,  которую ему загадал игрок. Если карты повторяются, то необходимо найти наименьший номер карты.

    порядок мастей (на случай, если ранг одинаковый) :   >   >   >  

     

    Найти: оптимальный алгоритм для дилера, который позволит ему гарантированно найти номер загаданной карты (или понять, что такой карты нет в колоде) за наименьшее возможное количество попыток в общем случае

     

    Примеры: 

      1.                             0     1      2     3       4     5      6     7      8      9    10    11 

      колода:                             

      найти:  

      ответ: 5

     

      2.                             0     1      2     3       4     5      6     7      8      9    10    11 

      колода:                             

      найти:  

      ответ: 11

     

      3.                             0     1      2     3       4     5      6     7      8      9    10    11 

      колода:                             

      найти:  

      ответ: -1 (в колоде нет такой карты)

     

      4.                              0     1      2     3       4     5      6     7      8      9    10    11 

      колода:                             

      найти:  

      ответ: 0

     

    Входные данные: предлагаю использовать 0-indexed массив с обозначением карт, как все тут привыкли, например: 

    колода:     ,найти   -> findCard( [2s, 2h, 2d, 2c] , 2s ) 

     

    По яп и формату решения - выбор за вами, решение и код (если они будут) предлагаю прятать под спойлер, чтобы тем, кто хочет подумать было интересно.

    Happy coding!

    Ответить Цитировать
    45/62
    + 2
  • .

    Сообщение отредактировал Dmitriy - 20.4.2024, 13:46
    Ответить Цитировать
    1/7
    + 1
  • Dmitriy, чего удалил?

    Ответить Цитировать
    46/62
    + 1
  • Pivot_Pointer, решил задачу неправильно и удалил. Пока так получилось.

    Сайт не даёт просто скопировать и вставить код. Пришлось удалять лишние символы, поэтому могут быть ошибки с отступами.

    value = {

            '2s': 1, '2h': 2, '2d': 3, '2c': 4,

            '3s': 5, '3h': 6, '3d': 7, '3c': 8,

            '4s': 9, '4h': 10, '4d': 11, '4c': 12,

            '5s': 13, '5h': 14, '5d': 15, '5c': 16,

            '6s': 17, '6h': 18, '6d': 19, '6c': 20,

            '7s': 21, '7h': 22, '7d': 23, '7c': 24,

            '8s': 25, '8h': 26, '8d': 27, '8c': 28,

            '9s': 29, '9h': 30, '9d': 31, '9c': 32,

            'Ts': 33, 'Th': 34, 'Td': 35, 'Tc': 36,

            'Js': 37, 'Jh': 38, 'Jd': 39, 'Jc': 40,

            'Qs': 41, 'Qh': 42, 'Qd': 43, 'Qc': 44,

            'Ks': 45, 'Kh': 46, 'Kd': 47, 'Kc': 48,

            'As': 49, 'Ah': 50, 'Ad': 51, 'Ac': 52

            }

     

     

    def find_cut_index(deck: list) -> int:

        """Returns the cut index"""

     

        left, right = 0, len(deck) - 1

        while left < right:

            mid = (left + right) // 2

            if value[deck[mid]] > value[deck[right]]:

                left = mid + 1

            else:

                right = mid

        return left

     

     

    def findCard(deck: list[str], card: str) -> int:

        """

        Returns the card index.

        If the card is not found, it will return -1

        """

     

        left, right = 0, len(deck) - 1

        mid = find_cut_index(deck)

     

        if value[deck[left]] <= value[card] <= value[deck[mid-1]]:

            right = mid

        else:

            left = mid

     

        while left <= right:

            mid = (left + right) // 2

            if deck[mid] == card:

                if deck[mid-1] != card:

                    return mid

                if deck[left] == card:

                    return left

                right = mid - 1

                left += 1

            elif value[deck[mid]] < value[card]:

                left = mid + 1

            else:

                right = mid - 1

     

        return -1

     

     

    deck = ['7s', '7s', '7h', '8s', '8s', '8h', '8h', '8c', '9s', '9c', '9c', 'Ts', 'Td', 'Td', 'Js', 'Js', 'Jd', 'Jc', 'Jc', 'Jc', 'Qs', 'Qh', 'Qd', 'Qd', 'Qc', 'Qc', 'Ks', 'Ks', 'Ad', 'Ad', 'Ad', 'Ac', 'Ac', 'Ac', '2s', '2c', '2c', '2c', '3s', '3h', '3d', '3c', '3c', '3c', '4h', '4d', '4c', '5d', '5d', '5c', '6s']

     

    for card in value:

        print(findCard(deck, card))

     

    [/left]

    Сообщение отредактировал Dmitriy - 21.4.2024, 3:56
    Ответить Цитировать
    2/7
    + 1
  • Dmitriy, спасибо за вариант! было бы замечательно, если бы под спойлером до кода было бы краткое описание самой идеи решения

    даже не знаю, что делать с этим гт эдитором, чтобы код нормально вставлялся. 

    мб попробовать для читабельности постить скрином, а для запуска сам код еще раз "как получится", главное, чтобы работал, а там в уже отформатирует, кто захочет для запуска

     

    по твоему решению:

    направление выбрал верное, но, думаю, что будут проблемы с поиском индекса для карты "срезки", например, попробуй инпут:

    ['2s','2s','2s','2s','2s','3s','2s','2s','2s']

     

    в целом, вижу, что особо нет желающих обсуждать, по сравнению с кол-вом плюсовавших...

    Ответить Цитировать
    47/62
    + 1
  • Описание решения

    Можно найти карту, проверяя каждую карту в колоде по очереди. Если карта будет последней, то придётся проверить всю колоду. Можно сделать это быстрее. Если бы была стандартная отсортированная колода, то делим колоду пополам и если средняя карта является искомой, то возвращаем индекс карты, иначе ищем её в той половине, которая содержит искомую карту. Повторять, пока область поиска не сузится до одной карты или пока карта не будет найдена. Если карта не найдена, то выводим -1

     

    Задача осложняется тем, что колода срезана и карты могут повторяться.

     

    1. Вместо средней карты нахожу место среза.

    2. Беру ту часть, которая содержит искомую карту.

    3. Если средняя карта является искомой:

      1) если соседняя карта слева от средней не является искомой, то вывожу индекс средней карты

      2) если левая карта является искомой, то вывожу индекс левой карты

      3) если индекс не найден, то беру левую часть и возвращаюсь к шагу 3

    4. Если средняя карта не является искомой, то беру половину, которая содержит искомую карту.

    5. Шаги 3-4 повторяются, пока область поиска не сузится до одной карты или пока карта не будет найдена. Если карта не найдена, то выводим -1

    Решение

    code.txt (1.7 килобайт) 

     

    Ответить Цитировать
    3/7
    + 1
  • В коде допущена глупая ошибка. Кто найдёт - молодец.

    Ответить Цитировать
    4/7
    + 1
  • Dmitriy, не знаю, про нее ты или нет

    если все карты одинаковые, то твой код вернет 0 для любой карты, которую ищем

     

    так или иначе, поправить нужно совсем не много и других желающих обсуждать не наблюдается. предлагаю считать, что решили.

    собственно к подходу и твоей идее мне добавить нечего, как решить лучше - я на данный момент не знаю

    Ответить Цитировать
    48/62
    + 1
  • Pivot_Pointer @ 02.04.24 

    thepazdk, так вроде как можно в случае платной подписки

     

    или речь про какие-то местные законы и тд?

    почитал, действительно права на музыку у того, кто сгенерировал, все сервисы что до этого находил прямо запрещали грузить музыку на спотифай и тд

    Ответить Цитировать
    2/2
    + 1
  • Pivot_Pointer, об этой ошибке я и говорил.

    Pivot_Pointer @ 23.04.24 

    собственно к подходу и твоей идее мне добавить нечего, как решить лучше - я на данный момент не знаю

    Думал в конце покажешь идеальное решение. Напиши, если узнаешь.

    Кажется я не лучшим способом нахожу место среза. Если средняя карта является искомой, то наименьший номер карты наверно можно найти быстрее.

    Pivot_Pointer @ 20.04.24 

    возможно, это будет чуть интереснее, чем просто абстракции типа чисел, массивов, и тд (тут уже хотелось бы фидбэк какой-то услышать)

    Может и интереснее, но абстракции поятнее.

    Ответить Цитировать
    5/7
    + 3
  • начну сам пробовать резюме в какие-то приличные компании закидывать

    пока еще сам не начал, но парочка собеседований на ближайшие пару недель намечается:

     - Grid Dynamics -  вроде бы и аутсорс, но рассказали, что клиенты интересные (тот же гугл), решил попробовать 

     - Box - платформа для менеджмента различного контента

     - Paramount - тот, который пикчерз и все, что с ним связано

     - Visa

     

    по мере прохождения буду постить про процесс и результаты

    Ответить Цитировать
    49/62
    + 2
  • Pivot_Pointer @ 03.05.24 

    пока еще сам не начал, но парочка собеседований на ближайшие пару недель намечается:

     - Grid Dynamics -  вроде бы и аутсорс, но рассказали, что клиенты интересные (тот же гугл), решил попробовать 

     - Box - платформа для менеджмента различного контента

     - Paramount - тот, который пикчерз и все, что с ним связано

     - Visa

     

    по мере прохождения буду постить про процесс и результаты

    Мне как-то писали из Paramount, я посмотрел сколько они за синьора предлагают (вилка была что-то около 120-150к), подумал, что шутники какие-то.

    Ответить Цитировать
    9/11
    + 1
  • s4ekotilla, в текущих условиях к 120-150к не помешало бы добавить валюту и локацию, а то шутники бывают разные 😉

    Ответить Цитировать
    50/62
    + 4
  • Pivot_Pointer @ 03.05.24 

    s4ekotilla, в текущих условиях к 120-150к не помешало бы добавить валюту и локацию, а то шутники бывают разные 😉

    Ну это да   Баксы, Нью-Йорк, не помню правда ремоут или гибрид.

    Ответить Цитировать
    10/11
    + 1
  • Я наверно не в теме, а что не так с 120-150 ?

    Ответить Цитировать
    3/3
    + 1
  • Bagaiev, мало для NY, я думаю (это скорее всего еще и gross)

    Ответить Цитировать
    51/62
    + 1
  • Bagaiev @ 03.05.24 

    Я наверно не в теме, а что не так с 120-150 ?

    Pivot_Pointer @ 03.05.24 

    Bagaiev, мало для NY, я думаю (это скорее всего еще и gross)

    Да, конечно мало, всё гросс. Это уровень мидла (если не джуна в хороших компаниях), но никак не синьора.

    Для примера у меня базовая на тот момент была 170к (без бонуса и опционов), и я был мидлом в обычном стартапе.

    Ответить Цитировать
    11/11
    + 1
  • сегодня был первый собес из вышеперечисленных компаний - грид дайнемикс - аутсорс и, скорее всего, последний в такого рода компании. 

     

    собеседовали как фулл-стека, я сразу сказал, что последнее время писал мало фронта и особо топики не повторял, но все равно начали эту секцию, все по классике: js паззлеры в стиле что выведется в консоль, где объявили переменные разные (var, let, const), эвент луп, замыкания - я честно говорил, что нихера не помню, но на опыте, как ни странно, +- назвал правильные результаты. далее вопросы про React JS - тут ответил все норм.

     

    часть по бэку - опять же, классика - java core, spring, sql и еще простая задачка - тут ответил все на изи, где-то по sql не помнил точный синтаксис

     

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

     

    следующие будут точно интереснее. 🤞

    Ответить Цитировать
    52/62
    + 8
  • А "простая задачка" это какая, если не секрет?

    Ответить Цитировать
    1/1
    + 0
1 4 5 6 7 8
1 человек читает эту тему (1 гость):
Зачем регистрироваться на GipsyTeam?
  • Вы сможете оставлять комментарии, оценивать посты, участвовать в дискуссиях и повышать свой уровень игры.
  • Если вы предпочитаете четырехцветную колоду и хотите отключить анимацию аватаров, эти возможности будут в настройках профиля.
  • Вам станут доступны закладки, бекинг и другие удобные инструменты сайта.
  • На каждой странице будет видно, где появились новые посты и комментарии.
  • Если вы зарегистрированы в покер-румах через GipsyTeam, вы получите статистику рейка, бонусные очки для покупок в магазине, эксклюзивные акции и расширенную поддержку.