Обновить
102
0.2
Роман Смирнов@Source

Head of Elixir at Ecom.tech

Отправить сообщение

Хотя по-большому счёту в ассемблере в большинстве случаев можно было бы просто работать с eax как с b, а c ebx как с a без всяких xor'ов.

Формально да, но по факту то вся оставшаяся часть функции работала бы с eax и edx. Т.е. я подразумевал такой вариант:


mov eax, a
mov ebx, b
xor eax, ebx
xor ebx, eax
xor eax, ebx
; work with eax and ebx

P.S. Про 9 пересылок вообще не понял, что Вы имели в виду...

Это, на мой взгляд, просто пример неуместного использования деструктуринга, строка получилась очень длинной и плохо читаемой, при этом вариант settings.display.color гораздо читабельнее в данном случае.
Но это не потому что деструктуринг плох, а потому что надо в меру фичи использовать.
То же можно сказать и про [...array1, ...array2, ...array3]. Лучше бы + починили (ну или какой-нибудь ++ добавили), если concat не нравится.

Для всей страны ваша выборка очевидно совсем нерепрезентативна, иначе можно было бы выборы только в одной Москве проводить.
Для Москвы частично репрезентативна, и в принципе не так уж сильно отличается от итоговых результатов по Москве:
Единая Россия — 37,7%
КПРФ — 13,93%
ЛДПР — 13,11%
«Яблоко» — 9,51%
«Справедливая Россия» — 6,55%
соседи дружно пошли голосовать

А у вас списки по номерам квартир что-ли были? Обычно по алфавиту по ФИО.

Я имел в виду по кол-ву проголосовавших избирателей, на его основе ведь проценты по участку считают.
P.S. Спасибо за инфу о размерах УИК… Получается, что для конкретного участка кол-во проголосовавших в среднем около 500 человек. Это достаточно небольшое число, что вкупе с дискретностью и округлением процентов уже объясняет наличие линий.

Тимлид не может расписать архитектуру до самых незначительных деталей реализации

Именно поэтому я их (архитектуру и детали реализации) и разнёс по разным пунктам )))
Или Вы xor vs temp var тоже в архитектуру записали?

Лучше по количеству избирателей участки разделять:
от 0 до 100, от 100 до 1000, от 1000 до 5000, от 5000 до 10000, более 10000.


А то ведь и в мегаполисе может быть участок, на котором меньше 1000 избирателей.

Да, SaaS.


довольно чатсо это делают в поездках, где с нормальным интернетом — больше вопросов чем радости.

понятно )

отдаете себе отчет в том, что реальные задачи типа «форма с тремя полями» уже давно перестали быть задачами

Вы утрируете. Всегда можно взять что-то нетривиальное из прошлых задач по проекту.


Реальные задачи как раз не имеют четких формулировок, зачастую даже входных условий, и больше всего похожи на «пойди туда не знаю куда, принеси то, не знаю что»

Это Вы уже задачи тимлида или архитектора описываете. Для программистов почти никогда не стоит вопрос "что надо сделать?" (архитектура), максимум остаётся вопрос "как это сделать?" (детали реализации)

А LucidChart не пробовали?

Ещё одно подтверждение того, что люди плохо справляются с генерацией случайных чисел?
Хотя для большей достоверности было бы круто яркость/прозрачность точек регулировать в зависимости от количества избирателей на участке.

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

На этот вопрос у меня уже нет ответа… Имхо, тестовые задачки должны быть приближены к реальным задачам, которые должен решать соискатель после трудоустройства.
Т.е. если я хочу узнать знает ли претендент про xor, логичнее будет спросить про битовые маски (относительно часто применяются на практике).

упс, неправильно интерпретировал Вашу формулировку..

есть ли такая же уверенность, что такой же результат будет для C#, Java, и тем более различных вебовских языков?

Ну, у виртуальных машин свои регистры или стек. Но в целом результат должен быть аналогичен. А то Вы описали настолько неоптимальную реализацию компилятора, что сложно поверить, что такое вообще возможно.
Вот для примера результат варианта с ± на C#:


    .maxstack 3
    .locals init (
        int32   V_0,
        int32   V_1)
    IL_0000:  ldc.i4 567
    IL_0005:  stloc.0
    IL_0006:  ldc.i4 789
    IL_000b:  stloc.1
    IL_000c:  ldloc.0
    IL_000d:  ldloc.1
    IL_000e:  add
    IL_000f:  stloc.0
    IL_0010:  ldloc.0
    IL_0011:  ldloc.1
    IL_0012:  sub
    IL_0013:  stloc.1
    IL_0014:  ldloc.0
    IL_0015:  ldloc.1
    IL_0016:  sub
    IL_0017:  stloc.0

Как видите, на уровне виртуальной машины остаётся только 2 переменных, она сама определяет, что числа влезут в int32, ну и работает со стеком вместо регистров eax, ebx, но это неизбежно для стековой виртуальной машины.


Все это я к чему. Про эту задачу я слышу не первый раз, и она мне кажется очень некорректной.

Я бы её скорее назвал неуместной для собеседований, за редким исключением. А в плане корректности тут вроде всё ok.


P.S. Кстати, раз уж вспомнили о языковом разнообразии, то в некоторых языках легко поменять местами переменные любого типа, примерно так:


a, b = b, a
что через сложение и обход переполнения буфера, что через xor-ы

Через xor-ы не будет переполнения буфера, в "худшем" случае результатом xor будет INT_MAX. Но в целом согласен, что для собеседования эта задача подходит только если позиция связана с системным программированием или с микроконтроллерами.

Разработчика нужно проверять, понимает ли он, как математика «ложится» на устройство компьютера, а не проверять на саму математику.

В таком случае Вы должны были бы использовать xor, т.к. с точки зрения ассемблера это наиболее логичное решение данной задачи:


b = a ^ b
a = a ^ b
b = a ^ b

А вариант со сложением приведёт к переполнению, это Вы правильно догадались.


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

Вам кажется. Если не лень написать на C и дизаcсемблировать результат, то можете убедиться, что одни и те же регистры процессора будут использоваться вместо a и b.

iex(9)> def comb(0,_), do: [[]]
def comb(_,[]), do: []
def comb(n, [x|xs]) do
(for y < — comb(n — 1, xs), do: [x|y]) ++ comb(n, xs)
end
Отмаза прикольная, понятия «удаленные работники» действительно в ТК нет, т.к. там есть понятие «дистанционные работники» :-)
Вы уже 3,5 года как не правы. См. главу 49.1 ТК РФ. Так что у вашего работодателя возможно желания не было, а юридическая возможность легально работать удаленно вполне себе есть.

Информация

В рейтинге
3 326-й
Откуда
Россия
Работает в
Зарегистрирован
Активность