• тырпрайз Дали порешать задачки на всякие тонкости сишки и костылеалгоритмы. Дядька так яростно сыпал баззвордами, что за час собеседования мне несколько раз хотелось заорать BULLSHIT BINGO. Порассказывал, какой у них анальный ад, КУЧА ПЛАТФОРМ СКРУМ ПЫЩЬ 16 ЧАСОВ ПОЛНЫЙ ПРОГОН ТЕСТОВ СТЕНДАП МИТИНГИ В 10:30, сколько килострок написано на сишке, жаве и пейтоне. Сказал, что удивлен, что я так много знаю, и ВНЕЗАПНО нестудент, поэтому меня СЛОЖНЕЕ ПРОДАТЬ ЗАКАЗЧИКАМ ПЫЩЬ.
    И вообще, пришлось ставить байк более чем в 50 метрах от входа — отвратительно!

Replies (43)

  • @lexszero,
    ВНЕЗАПНО нестудент, поэтому меня СЛОЖНЕЕ ПРОДАТЬ ЗАКАЗЧИКАМ ПЫЩЬ.
    Без бумажки ты АНАЛЬНЫЙ РАБ КИТАЙЦЕВ.
  • @Elemir, без бумажки я перспективный стартапер.
  • @lexszero,
    перспективный
    Ну-ну. Алсо да, дуров тут бабло веп-стартапам раздаёт. Может записать идею Usenet 2.0 и ему прислать? :3
  • @Elemir,
    веп
    не буду
  • @lexszero, ЕДРО ВЕППРОЕКТА НА ХАСКЕЛЕ. ДАВАЙ НЕ СЦЫ.
  • @Elemir, БУЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ
  • @lexszero, Алсо P.S. был из раздела *бред
  • @Elemir, Комментатор был из раздела *элемир
  • @Elemir, habrastorage.org
    гуглокартинки про "ядро на хаскеле"
  • @lexszero, kernel_on_haskell.jpg.to
  • @lexszero, чоза задачки? как поменять значения двух переменных без третьей?
  • @Elemir, ЕдРО на хаскеле? ЛЕНИВЫЕ ВЫЧИСЛЕНИЯ, НИКАКОГО БЭКГРАНДА, ТОЛЬКО ФОРЕГРАУНД, ТОЛЬКО ХАРДКОР, ТОЛЬКО МОНАДНЫЕ ТРАНСФОРМАТОРЫ.
  • @4DA, ну запомнились две:
    1) что выведет этот быдлокод:
    int a[] = {3,4,5,6,7};
    #define LEN (sizeof(a)/sizeof(a[0]))
    int d;
    for (d = -1; d < LEN-1; d++)
    printf("%i\n", a[d+1]);

    2) есть односвязный список. надо проверить, нет ли в нем цикла (т.е. например 1→2→3→4→2 — цикл есть)
  • @lexszero, а, дополнение ко второй: элементы списка как-либо изменять нельзя, алгоритм должен работать в константном количестве памяти, не зависящим от длины списка.
  • @lexszero, 1) 3,4,5,6,7 ?
    2) какие ограничения на дополнительную память?
  • @4DA, 1) неправильно
    2) мне известно решение, которое требует очень мало памяти, но если скажу сколько именно — это сильно приблизит тебя к ответу :3
    намнооого меньше килобайта.
  • @lexszero, Какая-то нереалистичная вторая задача. Или люксофт изобрела многокубитовые квантовые компьютеры?
  • @Elemir, реалистичная. алгоритм на самом деле весьма простой и красивый и работает за O(n) времени. ну и самый тупой вариант за O(n²), думаю, уже все придумали.
  • @lexszero, А цикл по значениям или по указателям?
  • @Elemir, по указателям
  • @lexszero, 1) блять, отрицательные числа, я мудак
    2) если числа не повторяются и среди них нет нуля, можно взять xor между текущим и следующим элементом и если он вдруг стал равным нулю, значит, повторяются.
  • @4DA, 1) все-таки, я дважды мудак
  • @4DA, нихуя не распарсил. какие еще числа? нас волнуют указатели, а не содержимое, разумеется, в элементах списка может быть хоть черти лысые (в том числе одинаковые), а ксорить чертей — очень дорогая операция.
    вот есть связный список, в котором первый элемент указывает на второй, второй — на третий, третий — на четвертый, четвертый — на второй. в нем есть цикл.
    вот есть другой список, первый указывает на второй, второй на третий, третий на NULL. в нем цикла нет.
  • @lexszero, ну, тогда давай xor-ить указатели (текущий адрес и следующий):
    Как только xor дал 0, значит есть цикл,
    либо пока не упремся в NULL указатель.
    прокатит?
  • @4DA, ШТО
  • @4DA, Ты утверждаешь, что a xor b xor c = 0 равносильно тому, что либо a = b, либо a = c, либо c = b? Херня. Возьми c = a xor b и всё.
  • @4DA, што. чем (x ^ x->next == 0) отличается от тупого (x == x->next)? алсо, циклы бывают любой длины.
  • @Elemir, да верно, хоть и маловероятно.
  • @lexszero, я предлагал так:
    xorval ^= x->next;

    но /28 заставил меня поверить, что может получится (маловеорятно), что xorval совпадет с очередным указателем.
  • @4DA, s/x/p
  • @4DA, ээ, даже если забить на вероятностные штуки, то что ты будешь делать с наксоренными указателями на элементы, не входящие в цикл?
  • @lexszero, Они просто проигнорируются. xor коммутативен и ассоциативен.
  • @lexszero, int xorval = head;
    p = head;
    while (p->next != NULL) {
    xorval ^= p->next;
    if (xorval == 0){
    //ЦЫКЛ
    p = p->next;
    }

    как-то так
  • @4DA, после //ЦЫКЛ "}" забыл
  • @Elemir, пусть у нас список 1-2-4-8-2 (штоб не ксорилось поверх)
    0 ^ 1 = 1
    1 ^ 2 = 3
    3 ^ 4 = 7
    7 ^ 8 = 15
    15 ^ 2 = 13
    13 ^ 4 = 9
    9 ^ 8 = 1
    1 ^ 2 = 3
    3 ^ 4 = 7
    ....
    где ноль?
  • @lexszero, Не, бред. Нихуя не понял
  • @Elemir, А, понял. Получается нуль, который съедается
  • @Elemir, што. я про то, что вклад начальной части списка, не входящей в цикл, не равен нулю, сколько не ксорь сам цикл, этот вклад все равно будет оставаться. энивей, слишком сложно. красивое решение пиздец простое.
  • @lexszero, Да-да, из-за того что ноль неконсервативен
  • @Elemir, даже лях придумал рабочее решение, а чертовы математики не могут
    !
  • @4DA, фу, я идиот, можно же пустить два указателя прыгать по узлам (один — по два узла за раз), другой — по одному. и если получится, что они в одном узле, значит есть цикл. (то есть первый догонит второй).
    так ?
  • @4DA, ура.