UPD: В Clojure есть хвостовая рекурсия, но немного кривенькая в плане внешнего вида.
Давайте уж по-честному, recur — это воркэраунд, необходимый как раз из-за отсутствия оптимизации хвостовой рекурсии на уровне байт-кода.
Поддержать что-то на стадии компиляции в байт-код — это тоже вариант, но это как раз то, что я назвал подстройкой под Java. Хотя ниже вспомнили случай (JSR 292), когда JVM всё-таки реализовала что-то не для Java. Но это скорее редкость по сравнению с CLR/DLR, на развитие которых существенное влияние оказывают, что C#, что F#, что VB.NET, что Iron-языки.
Scala, Kotlin, Ceylon, JRuby, Clojure, Groovy и многие другие jvm языки не противоречат этому утверждению?
Я думаю, в исходном утверждении имелось в виду, что возможности IL не ограничены возможностями C#. Ну, к примеру, было бы так, что в Java нет хвостовой рекурсии, а в Clojure — есть. Но получается, что в Clojure её тоже нет, потому что в Java она не особо нужна, а ради какой-то Clojure в JVM никто ничего добавлять не будет. Т.е., к сожалению, все JVM-языки вынуждены подстраиваться под Java и вторичны к ней.
Здесь подразумевается AOT или JIT?
Возможно, имели в виду .NET Native, а так и AOT и JIT тоже есть.
Это, на мой взгляд, просто пример неуместного использования деструктуринга, строка получилась очень длинной и плохо читаемой, при этом вариант settings.display.color гораздо читабельнее в данном случае.
Но это не потому что деструктуринг плох, а потому что надо в меру фичи использовать.
То же можно сказать и про [...array1, ...array2, ...array3]. Лучше бы + починили (ну или какой-нибудь ++ добавили), если concat не нравится.
Для всей страны ваша выборка очевидно совсем нерепрезентативна, иначе можно было бы выборы только в одной Москве проводить.
Для Москвы частично репрезентативна, и в принципе не так уж сильно отличается от итоговых результатов по Москве:
Я имел в виду по кол-ву проголосовавших избирателей, на его основе ведь проценты по участку считают.
P.S. Спасибо за инфу о размерах УИК… Получается, что для конкретного участка кол-во проголосовавших в среднем около 500 человек. Это достаточно небольшое число, что вкупе с дискретностью и округлением процентов уже объясняет наличие линий.
отдаете себе отчет в том, что реальные задачи типа «форма с тремя полями» уже давно перестали быть задачами
Вы утрируете. Всегда можно взять что-то нетривиальное из прошлых задач по проекту.
Реальные задачи как раз не имеют четких формулировок, зачастую даже входных условий, и больше всего похожи на «пойди туда не знаю куда, принеси то, не знаю что»
Это Вы уже задачи тимлида или архитектора описываете. Для программистов почти никогда не стоит вопрос "что надо сделать?" (архитектура), максимум остаётся вопрос "как это сделать?" (детали реализации)
Ещё одно подтверждение того, что люди плохо справляются с генерацией случайных чисел?
Хотя для большей достоверности было бы круто яркость/прозрачность точек регулировать в зависимости от количества избирателей на участке.
Но тогда неясно, с какой целью эта задача задается прикладным программистам и даже тестировщикам.
На этот вопрос у меня уже нет ответа… Имхо, тестовые задачки должны быть приближены к реальным задачам, которые должен решать соискатель после трудоустройства.
Т.е. если я хочу узнать знает ли претендент про xor, логичнее будет спросить про битовые маски (относительно часто применяются на практике).
есть ли такая же уверенность, что такой же результат будет для C#, Java, и тем более различных вебовских языков?
Ну, у виртуальных машин свои регистры или стек. Но в целом результат должен быть аналогичен. А то Вы описали настолько неоптимальную реализацию компилятора, что сложно поверить, что такое вообще возможно.
Вот для примера результат варианта с ± на C#:
Как видите, на уровне виртуальной машины остаётся только 2 переменных, она сама определяет, что числа влезут в int32, ну и работает со стеком вместо регистров eax, ebx, но это неизбежно для стековой виртуальной машины.
Все это я к чему. Про эту задачу я слышу не первый раз, и она мне кажется очень некорректной.
Я бы её скорее назвал неуместной для собеседований, за редким исключением. А в плане корректности тут вроде всё ok.
P.S. Кстати, раз уж вспомнили о языковом разнообразии, то в некоторых языках легко поменять местами переменные любого типа, примерно так:
Смотря где. Если в среднем по России, то это очень много. Особенно учитывая что 3 года опыта — это по факту в лучшем случае миддл.
Странно, что умолчали о замене интерактивным командам git, типа
git add -i,git rebase -i.Я вообще без них workflow в git не представляю.
Нет. Почему Вам везде мерещится JavaScript?
dynamicи компания пришли из IronRuby/IronPython.Давайте уж по-честному,
recur— это воркэраунд, необходимый как раз из-за отсутствия оптимизации хвостовой рекурсии на уровне байт-кода.Поддержать что-то на стадии компиляции в байт-код — это тоже вариант, но это как раз то, что я назвал подстройкой под Java. Хотя ниже вспомнили случай (JSR 292), когда JVM всё-таки реализовала что-то не для Java. Но это скорее редкость по сравнению с CLR/DLR, на развитие которых существенное влияние оказывают, что C#, что F#, что VB.NET, что Iron-языки.
Я думаю, в исходном утверждении имелось в виду, что возможности IL не ограничены возможностями C#. Ну, к примеру, было бы так, что в Java нет хвостовой рекурсии, а в Clojure — есть. Но получается, что в Clojure её тоже нет, потому что в Java она не особо нужна, а ради какой-то Clojure в JVM никто ничего добавлять не будет. Т.е., к сожалению, все JVM-языки вынуждены подстраиваться под Java и вторичны к ней.
Возможно, имели в виду .NET Native, а так и AOT и JIT тоже есть.
Хотя по-большому счёту в ассемблере в большинстве случаев можно было бы просто работать с
eaxкак сb, а cebxкак сaбез всяких xor'ов.Формально да, но по факту то вся оставшаяся часть функции работала бы с eax и edx. Т.е. я подразумевал такой вариант:
P.S. Про 9 пересылок вообще не понял, что Вы имели в виду...
Это, на мой взгляд, просто пример неуместного использования деструктуринга, строка получилась очень длинной и плохо читаемой, при этом вариант
settings.display.colorгораздо читабельнее в данном случае.Но это не потому что деструктуринг плох, а потому что надо в меру фичи использовать.
То же можно сказать и про
[...array1, ...array2, ...array3]. Лучше бы+починили (ну или какой-нибудь++добавили), еслиconcatне нравится.Для Москвы частично репрезентативна, и в принципе не так уж сильно отличается от итоговых результатов по Москве:
А у вас списки по номерам квартир что-ли были? Обычно по алфавиту по ФИО.
Я имел в виду по кол-ву проголосовавших избирателей, на его основе ведь проценты по участку считают.
P.S. Спасибо за инфу о размерах УИК… Получается, что для конкретного участка кол-во проголосовавших в среднем около 500 человек. Это достаточно небольшое число, что вкупе с дискретностью и округлением процентов уже объясняет наличие линий.
Именно поэтому я их (архитектуру и детали реализации) и разнёс по разным пунктам )))
Или Вы xor vs temp var тоже в архитектуру записали?
Лучше по количеству избирателей участки разделять:
от 0 до 100, от 100 до 1000, от 1000 до 5000, от 5000 до 10000, более 10000.
А то ведь и в мегаполисе может быть участок, на котором меньше 1000 избирателей.
Да, SaaS.
понятно )
Вы утрируете. Всегда можно взять что-то нетривиальное из прошлых задач по проекту.
Это Вы уже задачи тимлида или архитектора описываете. Для программистов почти никогда не стоит вопрос "что надо сделать?" (архитектура), максимум остаётся вопрос "как это сделать?" (детали реализации)
А LucidChart не пробовали?
Ещё одно подтверждение того, что люди плохо справляются с генерацией случайных чисел?
Хотя для большей достоверности было бы круто яркость/прозрачность точек регулировать в зависимости от количества избирателей на участке.
На этот вопрос у меня уже нет ответа… Имхо, тестовые задачки должны быть приближены к реальным задачам, которые должен решать соискатель после трудоустройства.
Т.е. если я хочу узнать знает ли претендент про xor, логичнее будет спросить про битовые маски (относительно часто применяются на практике).
упс, неправильно интерпретировал Вашу формулировку..
Ну, у виртуальных машин свои регистры или стек. Но в целом результат должен быть аналогичен. А то Вы описали настолько неоптимальную реализацию компилятора, что сложно поверить, что такое вообще возможно.
Вот для примера результат варианта с ± на C#:
Как видите, на уровне виртуальной машины остаётся только 2 переменных, она сама определяет, что числа влезут в int32, ну и работает со стеком вместо регистров eax, ebx, но это неизбежно для стековой виртуальной машины.
Я бы её скорее назвал неуместной для собеседований, за редким исключением. А в плане корректности тут вроде всё ok.
P.S. Кстати, раз уж вспомнили о языковом разнообразии, то в некоторых языках легко поменять местами переменные любого типа, примерно так: