Задачки, которые просят написать перед собеседованием на роль программиста в Австралии

Я недавно искала работу в Мельбурне, и в трех из шести мест, куда меня пригласили на интервью, мне прислали тестовое задание. Ниже приведены условия заданий без указания компаний. Само собой задачки на английском, но если очень хочется, просите в комментах, я переведу на другой язык.

И вот еще полезная ссылка про то, как собственно писать тестовые задания. engineering.lonelyplanet.com/...o-Pass-A-Coding-Test.html

Компания № 1.

Our company is stating a bowling club. To help with the club, we have engaged you to program a scoring system.

The features on the system are:

One player only
In each frame, the bowler has 2 tries to knock down all the pins
If in 2 tries, the bowler fails to knock down all the pins, their score is the sum of the number of pins they’ve knocked down in the 2 attempts
E.g, if a bowler rolls, 4,4

Their score is 8.

If in 2 tries, the bowler knocks down all the pins, it is a spare. The scoring of a spare is the sum of the number of pins knocked down plus the number of pins knocked down in the next bowl.
E.g, if a bowler rolls, 4,6 | 5, 0

Their score is 20. So that’s (4 + 6 + 5) + (5 + 0)

If in one try, the bowler knocks down all the pins, it is a strike. The scoring of a strike is the sum of the number of pins knocked down plus the number of pins knocked down in the next two bowls.
E.g, if a bowler rolls, 10 | 5, 4

Their score is 28. So that’s (10 + 5 + 4) + ( 5 + 4)

There are 10 pins in a frame
There are 10 frames in a match
Don’t worry about validating the number of rolls in a frame
The interface should look like this (in Java);

bowlingGame.roll(noOfPins);
bowlingGame.score();
If time permits implement the rules for the last frame (i.e, 10th frame)

In the last frame, if the bowler bowls a spare, they get another bowl. The score of this frame is the sum of the three bowls.
In the last frame, if the bowler bowls a strike, they get another 2 bowls. The score of this frame is the sum of the three bowls
If one has a strike for every roll, their score is 300
Notes on implementation:

use Java, Javascript, Groovy, Scala, Ruby or C#
try not to spend more than 2 hours maximum. (We don’t want you to lose a weekend over this!)
don’t build guis, a command line interface etc, we’re more interested in your approach to solving the given task, not how shiny it looks.
don’t use any frameworks (rails, spring etc), or any external jars/gems (unless it’s for testing..)
do not change the interface

Компания № 2.

I want you to develop an elevator system with a web frontend and backend storage system. The gui should cater for 4 elevators (numbered A,B,C and D) and 10 floors. Each elevator should not take on more than 20 people at a time.

People on a certain floor (for example, Level 9) should get the nearest available elevator (eg, say 3 elevators {A,B,C} are on floor 1 and the fourth {D} is on level 10 then elevator D should travel to get the people on level 9)

The gui should show each level and the number of people who wish to enter an elevator (textbox)

Each level should have dropdown menu and button beside it to represent the level / floor that the people on the said level wish to travel to. On each level there should be another 4 columns which show each elevator status. That is, the number of people in the current elevator and whether it’s going up (^) down (\/) or stationary (-)

I want the movement of the elevators tracked / stored in backend data storage of your choice. Please get this to me a soon as you can — at the best possible ability that you can — using the best practice OO techniques and open source technologies.

Компания № 3.

Our system has many digital images often taken with a camera. We have exported EXIF data from a selection of these images.
Your task is to create a set of static HTML files to allow a user to browse these images.

Create a batch processor that takes the input file and produces a single HTML file (based on the output template given with this test) for each camera make, camera model and also an index.

The index HTML page must contain:
— Thumbnail images for the first 10 work
— Navigation that allows the user to browse to all camera makes

Each Camera Make HTML page must contain:
— Thumbnail images of the first 10 works for that camera make
— Navigation that allows the user to browse to the index page and to all camera models of that make

Each Camera Model HTML page must contain:
— Thumbnail images of all works for that camera make and model
— Navigation that allows the user to browse to the index page and the camera make

The batch processor should take the location of the input file and the output directory as parameters.

The input file only contains a small sample set of works.

Ниже присоединены шаблон и входящий файл для последней задачи.
www.dropbox.com/...bydsad37bl/works.xml?dl=0
www.dropbox.com/...output-template.html?dl=0

Если есть вопросы по тому, как тут искать работу, пишите смело в личку.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn

Найкращі коментарі пропустити

Нормальные задачи. Что выгодно выделяет на фоне украинских глупостей:
1) Чёткое ТЗ. С выделением что нужно, и без игры в «угадай на что я надеюсь».
2) Практические задания, без теоретизации. Здесь нет цели показать свой «богатый внутренний мир», а требуется способность решить задачу.
3) Эти задачи даются ДО собеседования, а не предлагается написать прямо на собеседовании на бумаге.
4) Если им не понравится, на собеседование тебя просто не позовут. А если позовут — значит их устроило решение, и если его писал ты сам и не убил на это викенд — вероятнее всего ты уже подходишь.

Ну и самое главное — эти задачи носят сугубо тестовый характер. Притом тот кто их составил, понимает, что именно он так проверит. Другими словами, тот кто будет анализировать и тот кто принимает на работу — одно и то же лицо. А не посредник посредника фрилансера агентства, где по итогу оказывается что искали не айтишника, а танцовщицу.

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Спасибо большое Татьяне. Реально, интересный топик.
От себя хотел бы добавить, что очень понравился похожий ресурс — www.careercup.com

А можно в приват узнать, кто попросил сделать второе задание? Спасибо.

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

або якщо зустрінеш то за 5 хв розберешся
Так Вам и дают 5 мин на собеседовании, что бы Вы разобрались и написали. Проблема в чем? )

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

Зачем тогда Вас брат на работу если любой может посмотреть в гугле? А вообще смотрят на ход мысли а не на решение.

если любой может посмотреть в гугле
Речь исключительно о «редких» случаях. Помимо них есть масса вариантов как определить «качество» кандидата, в том числе, как ты заметил, оценивая ход мысли.
А вообще смотрят на ход мысли а не на решение.
Каким образом можно оценить ход мысли для, обсуждаемых в ветке, «редких» случаев?

Например, вопрос о поведении компилятора языка X при использовании параметра Y.
Незнание ответа на этот вопрос свидетельствует о том, что кандидат некомпетентен? — Очевидно, нет.
Разберешься ты с этим вопросом на собеседовании «за 5 мин»? — Если не знаешь ответа заранее, то нет.
Как можно оценить ход твоих мыслей при ответе на такой вопрос? — Никак. Ты либо знаешь ответ, либо нет.

Собственно, вот именно такого рода «редкие» вопросы и не имеют особого смысла.

Терзают смутные сомнения... это Вы первое (не фриланс) место работы ищите?

Нет. Я до этого 4 года работала в Австралии, и около 3 лет суммарно в Украине, и полгода в Швейцарии.
Я бы попросила не переходить на личности. Тема про тестовые задания а не про мои скилы.

Это не переход на личности. Это research. Есть тестовые, есть вопросы с собеседования — относительно не сложные. И с 7.5 годами опыта туда нельзя устроиться. Может там вообще нет реальных вакансий — а только подбор персонала на будущее?

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

обычная ситуация для развитых рынков. такой горячки как в Украине с возможностью полчить три офера за два дня почти ни где нет

Поделись, почему Австралия — не лучшее место по-твоему, мне любопытно.

На счет проектов не соглашусь, тут много интересных работ, с хорошими командами и процессами. Климат — наоборот, сюда много канадцев и лондонцев, например, едет из-за климата.
Про путешествия согласна, тут только Азия и Новая Зеландия рядом, в Европу слетать накладно. Цены не очень, согласна, зато качество высокое у большинства услуг и товаров.

Йой, а что в Австралии с климатом не так? по-моему, лучше не придумаешь))) но таки далеко, да)

Солнечной радиации 300+ дней в году. Это кажется весело из Украины. Ветра. Почитайте за отопление. Понятно, дело привычки все, но...

UPD. Да, и поинтересуйтесь сразу за покупку недвижимости.

Да, тут сгораешь очень быстро, не позагораешь ((
Про недвижимость: я просто пожизненно снимаю, купить не светит.

О, Австралия подтянулась, как раз самое утро :)))

С добрым утром меня и доброй ночи вам ))

а у нас еще рабочий день во всю... Вчерашний, для вас... Магия )

Над Австралией огромная озоновая дыра, это как бы не особо гуд )

Ну тут только Европа далеко, все остальное — не дальше чем с Европы. Вместо этого Филиппины рядом, Индонезия, Малайзия, Фиджи, Новая Зеландия, Сингапур. Куча пафосных баунти островов рядом. Все это стоит несколько сот долларов (сам перелет), хоть бери и на долгий уикенд лети.

Перелет на Филлипины — около тысячи баксов, не дешево совсем. Зато в Малайзию, да, можно за 200 AUD в одну сторону слетать.

Перелет на Филлипины — около тысячи баксов, не дешево совсем.

На Cebu Pacific можно за 500-600 AUD, главное акции мониторить

Инет убогий еще. 512кбит — в радость (преуменьшаю конечно, но все же)
И можете сказать что-то по-поводу «онлайн пиратства»? Насколько проблематично, с точки зрения закона, посмотреть на халяву кино/послушать музычку? В Лондоне, например, с этим ппц как сложно, инет раздается чуть ли не через специальные донглы от провайдеров

Не знаю, у меня в офисе и дома интернет отличный. Дорогой правда, 40 AUD в месяц, но норм.
Онлайн пиратство — я никогда не узнавала, как тут дела, спокойно дома качаю с торрентов фильмы уже несколько лет, пока за мной не пришли.

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

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

у меня даже в в NZ 200\200 мб оптика. Usenet струячит на всю ширину канала легко и не принужденно

Как для человека «в индус_трии» — я уважительно отношусь к законам, и не треплюсь о том, как я «занимаюсь херней» налево и направо.
Возьмите на заметку тоже

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

p.s. Если что я не говорил что я качаю там фильмы. Я от туда свободно доступный контент могу лить например — Тарковского какого нибудь или старые книжки.
ну и у нас именно раздачи караються законом, так что за активную раздачу торентов можно поиметь проблемы — по крайней мере я о таких случаях слышал.

Лол, мужик, держи свое авторитетное мнение при себе, и не ты`кай мне.
На всякий случай: сними очки со своего умного фейса, и перечитай то, что я написал.
В частности найди там строчки: «я живу в Лондоне», «не могу/не умею/боюсь скачать что-то».

За сим общение с тобой прекращаю, ибо с *** не вожусь. Спасибо за внимание.

ты мне тоже м"даком показался так что все ок , без обид

Интернет раньше был проблемой, сейчас вроде все ок, оптику везде тянут. Ко мне оптика еще не дошла, сижу на АДСЛ, но все-равно, 10мбит хватает. Единственно что аплоад маленький, и цены большие, по украинским меркам.

Пиратить можно без проблем.

у нас сильно выстрелила гос программа по fiber в каждый дом
за последние 5 лет стало прям сильно лучше

я конечно не крутой пират, но таких проблем не замечал ( использую вержин)

На выходных сяду переведу, если будет минутка свободная

Боулинг — классика жанра :)

Так как там вообще сейчас, работа есть? Зп какие?

Работы очень много, огромный внутренний рынок. Зп называют за год, до налогов. В австралийский долларах мидл получает 80-100 тысяч в год, после налогов это будет 50-70. В американских это 3-3,5 в месяц.

а потолок, допустим в Сиднее, допустим у крутого синьйора-помидора? Когда-то давно, помню, смотрел статистику, и во время майнинг-бума зп в Сиднее были даже интереснее чем в Штатах (в т.ч. и из-за дорогого АУД). Интересно что сейчас

Если работать по контракту, будет указываться рейт за день, и в общем денег больше получится. Думаю, по контракту потолок 150 в год. В Сиднее зарплаты в целом такие же, как в Мельбурне, разница несущественная, может в пару тысяч в год до налогов.
Сейчас австралийский доллар намного дешевле американского, потому что американский вырос, так что на глобальной арене Австралия выглядит не привлекательно, но жить норм.

американский вырос ко всем валютам, так что у Штатов и подавно конкурентов нет теперь

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

да, на старости надо в Австралию, клевая страна. Тихо и спокойно (никто не знает, происходит ли там вообще что-то))) , тепло и все такое.

На старости? Там вроде возрастной ценз жесткий. Но есть вариант — приехать молодым и состариться на месте.

Шансы уехать — до 35 лет. Потом нужно будет нефигово постараться. Подавал когда-то документы, всё ОК, но нужно был IELTS сдать на 6,5 баллов...передумал даже пробовать.

интересно почему до 35? там по моему разница в баллах небольшая, а что сложного в иелтс?

В баллах — да, но по факту потом много отказов. На гдэй обсуждение было.

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

Разве что поскорее сдохнуть под озоновой дырой. Я больше на Прованс/Северную Италию поглядываю.

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

ну если есть миллионов несколько почему б и не поглядывать на прованс и Италию

Не так уж там дорого. Хотя британские/голландские пенсионеры цены на недвижимость подняли неслабо, если верить местным.

я просто о том, что работы там нет, значит там будешь только тратить

да, на старости надо в Австралию, клевая страна
Дык мы про пенсию. Ну и заявление про нет работы несколько безосновательное.

С работой очень и очень сложно но она там есть

Не соглашусь. Я тут трачу не больше 2 недель на поиски работы: с момента принятия решения, что нужна работа до подписанного оффера.

Я работу уже 2 года не искал но помню что в 2013 с работой было скажем так не очень

Не замечал. А вот много коллег уезжает в Калифорнию — это вижу часто

Калиффорния — не все штаты. Из других штатов едут в Австралию, у меня тут много знакомых таких. В Калифорнию едут из Мельбурна только одиночки, которые хотят поработать в передовых компаниях, и попутешествовать. Но таких знакомых у меня меньше. И ни один не уехал с концами, все поработают пару лет и возвращаются.

Мой опыт этого не подтверждает. Сидней. 9 лет тут. Возможно разные компании

150 на контракте не потолок, на постоянке — да, у меня такое впечатление процентов 5 его достигают

тебе то зачем? В штатах по жирнее будет все равно — в AU цены довольно оголтелые на все

да просто любопытно стало, темка же о АУ.
Кстати, вот только что ради интереса зашел на numbeo и он мне сказал что цены в сиднее и в долине ± одинаковые а рент выше в долине. Так что он говорит что ты не совсем прав, получается. Хотя мне, в общем-то, не особо и важно :)

В Мельбурне жить дешевле, чем в Сиднее.

Я давно уже через seek не ищу. Шлю резюме напрямую в компании, в которых хотела бы работать. Но посмотреть среднюю температуру по больнице там можно.

Что я нелюблю в этом подходе, это то что тратиш n часов своего времени чтобы решить задачу, а в итоге рекрутерши (ненавижу рекрутерш), кудато пропадают без ответа и привета, и без никакого фидбека вообще.

Что мешает сразу указывать таким компаниям эротическо-порнографическое направление?

если ты ищеш в киеве (или одэссэ), то да, но если ты ищеш предложение в австралию. и их всего 2, то ситуация другая немного :-(

В Австралии такого не бывает, фидбек есть всегда

В Европе получал всегда фидбэк 8 из 10, с Австралии 1 из 10 только.

Странно. Наверное, мелкие конторы были. Мне всегда перезванивали.

какой? через 2 месяца стандартный ответ из которого ровным счетом ничего не ясно?

Миша, привет )
Это ответ на тестовое задание, или на что?

привет :)) да на все :) ну в европе так принято, если через неделю две нет ответа, значит считай не взяли, через месяца два ХР присылает стандартную рыбу :)))
В плане тестовых заданий, здесь они не настолько распространены... потому, особо ничего не могу на этот счет сказать..

Нормальные задачи. Что выгодно выделяет на фоне украинских глупостей:
1) Чёткое ТЗ. С выделением что нужно, и без игры в «угадай на что я надеюсь».
2) Практические задания, без теоретизации. Здесь нет цели показать свой «богатый внутренний мир», а требуется способность решить задачу.
3) Эти задачи даются ДО собеседования, а не предлагается написать прямо на собеседовании на бумаге.
4) Если им не понравится, на собеседование тебя просто не позовут. А если позовут — значит их устроило решение, и если его писал ты сам и не убил на это викенд — вероятнее всего ты уже подходишь.

Ну и самое главное — эти задачи носят сугубо тестовый характер. Притом тот кто их составил, понимает, что именно он так проверит. Другими словами, тот кто будет анализировать и тот кто принимает на работу — одно и то же лицо. А не посредник посредника фрилансера агентства, где по итогу оказывается что искали не айтишника, а танцовщицу.

Все верно.
В одном месте меня таки попросили написать на собеседовании код, на доске, но задача была скорее на логику, решение ровно в три строчки: попросили поменять местами значения двух переменных inplace, без использования дополнительных переменных.
Т.е. дано x=2; y=7; и на выходе получить x=7; y=2;

Публика будет признательна, если ты опубликуешь решение ^_^

a = a^b;
b = a^b;
a = a^b;
сделал за 10 секунд. Блин, а у меня такого не спрашивали никогда на собесе ) . А, точно, вы ж об Австралии. Я там не был )

Спасибо ) Но все намного проще.
x = y — x;
y = y — x;
x = x + y;

это если у вас переменные инты или другие цифры, поробуйте со строками такое сделать или с объектами

Ах да, там в условии было, что переменные численные. Простите за неточность.

Для чисел с плавающей запятой лучше xor. Как при переполнении себя будет ваш код вести?

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

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

Не получается. Все остается на своих местах

x = −7 y = 1
--------------------
x = −7 + 1 = −6
y = −6 — 1 = −7
x = −6 — (-7) = 1
--------------------
x = 1 y = −7

Ой, получается, сори, перепутала

Голову ломаю чего Вас в гугл не взяли
На позицию Full Stack Web Developer с уклоном на Front End.

Только один вопрос: а если человек НЕ СМОЖЕТ решить эту задачу, его точно нужно отсеять? Я могу точно сказать, что люди с очень хорошей памятью решить её не способны. А лучше всех такие задачи даются людям ненадёжным, которые принимают решения на лету, и не планируют дальше завтрашнего дня.

Это всего лишь один из вопросов. Не обязательно отсеят.

Да. И поэтому их десятки тысяч часов муштруют. И даже после этого — ставят помощника.

Ясно. «Десятки тысяч часов» посмешили) А помощник кто, автопилот?)

Второй пилот. Про десятки тысяч преувеличено, но 1500 минимум есть для ATP лицензии. И ещё пару тысяч, пока на технику вроде б737 пустят.

Вот чего вы такие серьезные и представительные?) В отличии от ненадежных пилотов)
И да, я вертолетчик. Предлагаю авиацию оставить в покое)

Тезис о ненадежности я не поддерживаю)

Татьяна, но ведь это решение не будет работать, если

y - x > INT_MAX

(например, INT_MAX = 32767, y = 32000, x = −32000)

Решение через XOR работать будет и в этом случае.

Задача на логику, пишется без привязки к реализации в языке. Псевдокод.

Понятно. Если бы меня попросили, написал бы через XOR. Если бы отвечал устно, указал бы и на наличие арифметического способа решения задачки и на его недостатки...

Задачка норм, сразу на ум приходит : dou.ua/...orums/topic/16342/#857019 ... Да и с вопроса и коню понятно, что надо забыть про компы и ЯПы и юзать типа «псевдокод». А то так можно и «x, y = y, x» ляпнуть.
Еще б вопросы типа «Если б вы в следующей жизни были цветком, кем бы вы стали ? 1. Роза 2. Ромашка 3.Тюльпан 4. Свой вариант. Обьясните почему ?» или «Какая геометрическая фигура вам нравится ?»... Ну и «Почему же люки круглые ?» xD Были такие на ХР собеседованиях ?

Вобше это единственно правильное решение в общем случае.
Ну так я и говорю, шо б язык и комп не привязывали к задачам, потому в пытоне в тупую и пишется x, y = y, x . А глядя на a = a ^ b, подумал «а в степени b» и догадаться что «^» значит — невозможно.. Ну если б написали :
x <- bitwXor(x, y)
y <- bitwXor(x, y)
x <- bitwXor(x, y)
я б понял. Пседокод это ж круть — пишешь словами шо надо и ложил на то, существует ли такая ф-я или метод....

Если работаешь на самом низком уровне, то лучшее решение для обмена данными между двумя 64-битными ячейками памяти через XCHG и MOV:

MOV RAX,M1_64 XCHG RAX,M2_64 MOV M1_64,RAX

C PDP-11 не работал, а проверять лень. Насчет х86 — соглашусь.

А проверить, не?

(это полезная особенность 2’s complement арифметики если чего)

Можно. Только проверка является частью решения задачи.

Нет, не так поняли. Решение выше, без изменений, работает для всех значений signed int’ов. Попробуйте набрать пример и запустить. То, что вы пронаблюдаете, это полезное свойство 2’s complement.

paste.ee/p/0Yf3h

Да, был неправ. Работает, и понимаю почему.

Представь как беззнаковые и поменяй местами

Да, только проверка на то какая переменная больше является частью арифметического способа решения задачи.

Я конечно дико извиняюсь, но по какому такому праву оно не будет работать? Обязано переполниться и работать:

signed short y = 32000, x = −32000;
x = y — x;
y = y — x;
x = x + y;

а если не будет слушаться, то в угол поставим

P.S. Единственный плюс подхода с ксором в том, что ксор не возбуждает керри флаг во флаговом регистре

С переполнением — работает.

Такое требуется знать только тем, кто занимается алгоритмами шифрования. И таки да, расскажи что именно за операция скрыта за ^ - в разных языках она разная.

о прикольное решение, я с ходу только варант с арифметическим трюком вспомнил

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

арфиметика это сила, но обычно на собеседованиях просят процитировать мануалы из sdk или знать поведение вот именно при какой то запомнившейся собеседующему ситуевины..... или закодить решение которое ниасилил собеседующий :))))
в общем как обычно ищут не потому что кто-то реально нужен......а чтобы доказать что тот кто есть смог автократично заплевать «фсех кто придет» за «мясным хлебом»......:))))

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

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

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

Подожди, это точно НЕ в Украине? Потому что задача по сути — идиотизм. Чтобы поменять местами 2 переменных, требуется третья. Есть миллион способов объявить её неявно, но золотое правило в программировании — не писать абстрактной ерунды там где есть прямой способ.

Знаешь что будет, если ты на практике применишь обмен местами переменных без явного создания третьей? Нечитаемый код будет! Грёбаная головоломка. И это всего три строчки кода. Представь себе каково в них разбираться, когда их 30 000.

Это точно в Австралии. Задали мне ровно 2 недели назад, парень азиат.
И если будете собеседоваться в Гугл, например, там тоже такое спрашивают.
Они не предполагают, что такое будет повсеместно в коде, задача просто на логику, посмотреть, сможет ли человек дебажить на доске.
Кстати, меня в эту контору не взяли. Контора оч крутая, но штат программистов небольшой.

Это задача НЕ на логику. А на знание как решать именно такие задачи.
Абсолютное большинство задач «на логику» имеют ту же проблему: те кто ЗНАЕТ решение, думает что оно логично. Но на реальные задачи такого толка всё человечество тратит сотни лет, они не решаются за минуту на собеседовании.

Часто проблема перелезть через забор. А потом оказываеися, что за забором полно горшков и обжигают их там вовсе не боги. :)

Проблема в том, что заборы строят тоже не боги. И когда нужно обжигать горшки, оказывается что всех гончаров отсеяли. Зато сколько перелезальщиков через заборы!

да бросьте вы, вполне себе на логику. Я, например, решал ее вообще в 7 классе, после введения в переменные в Pascal. Учитель спросил, как поменять, пришли к решению с переменной, а он потом «а можно и без, подумайте». Я, судя по всему, был единственным, кому было не пофиг и решил позже, пока шел по улице. Как вы понимаете, на тот момент я не знал, «как решать такие задачи».
Касательно смысла задавать — ну смысл такой же, как у любых задач на логику. На собеседовании можно, разве что в качестве разминки и дополнительного развлечения. Задавать такое — не бред, бред будет, если по результатам отсеивать. Хотя, если кандидат ну совсем ни в какую, то может это о чем-то и скажет, хотя в таком случае он наверняка провалится и по другим параметрам.

ЛОГИЧЕСКИ ВЕРНОЕ решение — это через временную переменную. Оно же «взрослое» решение, то есть с применением лучших практик без изобретения велосипеда. Объясняю почему так: в реальном исполнении придётся контролировать транзакцию, а это существенно более высокая нагрузка, чем лишняя переменная.

Иными словами, эту задачу могут решить почти все. Но чем более человек опытен, тем больше времени у него займёт её решение. И я не про конкретно эту задачу, а про весь класс задач «на логику». Проблема не в задаче, а в человеческом факторе: Тот, кто ответ ЗНАЕТ — не может адекватно оценить СКОРОСТЬ решения теми, кто не знает. И статистически попросту отсеет ВСЕХ не знающих решения заранее, а те кто знает — получат дополнительное преимущество.

Проблема в том, что отбор произойдёт по незначимому критерию. А именно — отобраны владельцы бесполезных знаний, теоретики. А отсеяны — практики. И так будет всегда, если доверять теоретикам функцию отсева.

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

Да, и в чём СМЫСЛ знать решение именно ЭТОЙ задачи? В реальном мире потратить одну лишнюю переменную на ССЫЛКУ на объект — не стоит ломаного гроша. Триллион таких операций не стоит грёбаного цента. А вот потеря кандидата на такой глупости — стоит реальных денег.

Единственные люди, кто ДОЛЖЕН знать решение — шифровальщики. Алгоритмы шифрования работают на побитовых операциях и перестановках, вот там это используется сплошь и рядом. И да, их код нечитабелен без комментариев что именно ХОТЕЛОСЬ сделать — ведь никакой гарантии что код безошибочен. И по сути это не програмиирование даже, это математика.

Кстати, сами математики не используют переменные повторно. То есть в математике переменная значение практически никогда НЕ МЕНЯЕТ. За редким случаем — итерации. То есть переменная формально может принимать значение, но если ей значение уже присвоили, то оно таким и остаётся. Иначе порушатся многолетние традиции.

В программировании микроконтроллеров и прочего мелкого железа тоже часто нужны побитовые операции.

Но ты согласен, что задавать такую задачу можно при 2 условиях:
1) Человек нужен именно для программирования микроконтроллеров. Потому что универсальных программистов умеющих делать всё на отлично — не существует.
2) Этот человек имеет опыт, или как минимум хорошее образование по данной специализации. То есть вакансия не джуновская.

Да, и в чём СМЫСЛ знать решение именно ЭТОЙ задачи?

Это проверка на понимание кругозора / базовых принципов работы машины. В теории второе, на практике обычно первое. Цель, насколько я понимаю — отсеять людей, которые умеют юзать интерфейсы © но не понимают, как оно работает под капотом.

базовых принципов работы машины
Каким боком к этой задаче комп, програмирование и какие то «базовые принципы работы» ?
Цель, насколько я понимаю — отсеять людей, которые умеют юзать интерфейсы © но не понимают, как оно работает под капотом.
Ага. Если не знаешь какая архитектура набора инструкций у проца — не подходи к компу ! Если не можешь описать все такты работы движка внутреннего сгорания (с формулами !) - не садись за руль !
Каким боком к этой задаче комп, програмирование и какие то «базовые принципы работы» ?

Вопросы к неназванной австралийской конторе?
Я предполагаю, что у них есть причины такое спрашивать.

Если не можешь описать все такты работы движка внутреннего сгорания (с формулами !) - не садись за руль !

Как писали в какой-то теме здесь же, «не берись проектировать движки».

Да чтоб тебе перед просмотром порнухи давали тест на алгоритмы MPEG4, а когда пройдёшь — ещё собеседование по защите авторских прав.
К живой бабе без медицинского диплома по гинекологии и вовсе не подходи ближе 200м.

Уже был срач на 100+ постов на эту тему, когда я написал, что мне эту задачку на собеседовании на курсы в insart на java предлагали. Не решил тогда, нервы-с. Хотя вообще это полный идиотизм, правильно тогда кто-то написал, что за такое в коде ногами бить надо. Даже в «Совершенном коде» где-то точно было об этом...

В варіанті з трьома ксорами нема неявної змінної.

І він, скоріше за все, повільніший, було обговорення.

Але є ТИПІЗАЦІЯ змінної. А також вимагається ДОСТУП до побітових операцій над цією змінною. Іншими словами, якщо ця змінна виявиться не числовою, а наприклад адресою в пам′яті — таке рішення призведе до уразливості коду.

Да эта задача вообще боянище)) даже прямо не знаю, доу уже не торт?))

В общем случае — да, так удобнее. Но есть случаи, когда необходимо решение через 2 переменные, а не через 3. Например, в микроконтроллерах, ОЗУ которых исчисляется байтами, а не гигабайтами. Объявление лишней переменной вполне может «не влезть» в доступную область памяти. И пишется код там не на жабе какой-нить, а на асме, поэтому на читабельность и отступы там никто не смотрит :)

Нельзя в ассемблере: переместить значение одной ячейки памяти в другую ячейку.

Можно в ассемблере: положить значение одной ячейки в стек или регистр, а затем достать из стека или положить из регистра в другую ячейку.

Возможно и пишет, но что то мне подсказывает, что нет )

Не, не пишу, просто слышал о таких задачах :)
Но создавать переменные в области памяти в асме таки можно.
Вариант с вычитанием будет использовать стек на 1 dword (или word) меньше, чем 2 push + 2 pop.

Можно. Ассемблер под каждое устройство свой. Разный тип контроллера — разный ассемблер. И если там прямой доступ в ОЗУ и однозадачная система с прерываниями — почему бы и нет?

Да, но в разрезе устройства на работу как Front End Web Developer, думаю речь идет о х86-64. Например когда мы говорим о байте мы же подразумеваем 8 бит, не 6, не 7 не 9, верно ? )

если

Front End Web Developer
работает с битами то обычно это плохо, ибо 98% фронтендщиков не имеют представления о том как работают побитовые операции.

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

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

Например, в микроконтроллерах, ОЗУ которых исчисляется байтами
И вот только таким программистам и надо задавать эту задачу. Согласись, это особая специализация — работа с микроконтроллерами, притом весьма специфическими. У подавляющего большинства микроконтроллеров память исчисляется мегабитами. Этого более чем достаточно чтобы впихнуть операционку на кшталт DOS и пару-тройку игр.

На сраной сим-карте десятки килобайт. Давно ли в руках держал микроконтроллер дешевле сим-карты?

я вчера впав ступор от этой задачи и комментария к ней типа «а легко и быстро», полез искать решение, нашел, а также рассуждения о том почему лучше делать через 3 (с которыми согласен).

Не знаю может это круто, ну и мой уровень явно не супер, но я не хотел бы встретить на проекте решения типа:
b = [a, a = b][0];

Массив тут можно рассматривать как дополнительную переменную.

Вообще эта задача — это, упрощенная для программистов, отсылка к мега-баянной задаче про 3 сосуда:
Имеется 3 сосуда: 8л 5л 3л.
Первый из них заполнен водой.
Нужно оставить ровно 4л. в первом сосуде.

Т.е. по факту рассматривается способность человека придумать алгоритм который приведет из состояния A в состояние B, а не знание как это делать на языке X.

выше привели решение с -+ я в отчаянии

но я не хотел бы встретить на проекте решения типа: b = [a, a = b][0];
Особенно если там бага. Угадай что дешевле — найти её в подобном коде, или переписать код с нуля?
А уж тестировать подобный код...

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

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

За сколько времени? А на собеседовании на это формально даётся пять минут. В реале — люди нетерпеливы, интервьюерам и 1 минута кажется вечностью, ведь решение такое простое.

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

я решил секунд за 10... Что со мной не так?

В 9-м классе? Я же говорю, барон, всё так. Второй раз и последующие — это уже не «решил», а знал ответ.

а я где-то говорил про 9-й класс? Только тут увидел задачку

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

Скажите честно, будучи программистом вы хоть раз этот подход использовали?

Будешь смеяться, натолкнулся на неё только что. Реальный проект. Но речь шла не о целых числах, а о текстовых данных (весьма массивных), и временные данные надёжно хранить негде. Решается почти как в предложенном варианте — ДОБАВЛЯЕТСЯ вторая строка в первое хранилище, первая переносится во вторую, удаляется вторая из первой. И всё это не в рамках общей транзакции, а в раздельных.

a=5;
b=3;

a = a+b;//8
b=a-b;// 5
a=a-b;// 3

Все просто )

int a = Integer.MAX_VALUE;
int b = Integer.MAX_VALUE — 1;

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

Это всего лишь один из вопросов. Остальные совсем другого плана. Тут скорее, если человек это решит, он заинтересует, если нет, не страшно, зато он другое умеет.

Мало того, одного решалы логических задач достаточно эдак на 50 000 хороших разрабочиков. А знаешь почему? Потому что логическую и на DOU спросить можно, даже если она совсем уникальна и не гуглится. А вот код тебе на халяву никто не напишет :)

код тебе на халяву никто не напишет
Скажи это тем конторам, которые перед собесом/вместо собеса присылают тестовое задание.

Я имею в виду боевой код — который большой, и который потом поддерживать.
А насчёт контор — они правы. При условии что это именно тестовое задание, а не жалкая попытка заработать на говнокоде.

который хорошо решает логические задачи — два разных специалиста.
А что это за специалист такой ? Где их готовят и чем они занимаются ?
.
.
Зодачко : Найдите единственное истинное утверждение :
.
По крайней мере есть один человек, который является хорошим разработчиком, но не умеет хорошо решать логические задачи. Те, кто решают хорошо логические задачи — хорошие разработчики.
.
Каждый хороший разработчик не умеет хорошо решать логические задачи. Есть человек, который хорошо решает логические задачи и является хорошим разработчиком.
.
Существует человек, который хорошо решает логические задачи, но не является хорошим разработчиком. Каждый хороший разработчик умеет хорошо решать логические задачи.
.
sad but true. ^ ^

Лаконично: Решение логических задач — не является необходимым и достаточным условием для того, чтобы быть хорошим разработчиком.

Такие задачи ставятся ЮРИСТАМ, и только юристам. Потому что вся их суть — умение трактовать юридически значимые ТЕРМИНЫ.

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

Почему так: естественные языки работают не по логике, а по шаблонному восприятию. И когда девушка говорит «ой, всё» — это не следует понимать как конец света. А всего лишь «не хватает оперативной памяти, хотите закрыть процесс бла-бла-бла?» :)

1) Чёткое ТЗ.
да хрен там. Я не знаю этого вашего боулинга и для него описалово явно не полное. Пришлось бы ещё гуглить правила.

Правила описаны в тексте задачи. Приём.

А вы их понять пытались? Что там боул значит? Вот пример спэйра: за 2 раза сбил 10 (4+6), потом есть ещё какие-то 5, 0. Ага, боул наверное пара бросков по свежевыставленным пинам. Считать как число сбитых пинов (10 же, т.к. спейр?), плюс число пинов в след. боуле. Т.е. (4 + 6) — число сбитых и (5 + 0) — сбитые в след. боуле. И тут первый DAFUQ — они считают как

(4 + 6 + 5) + (5 + 0)
 — что за первые +5?
Потом страйк. Это как спейр, но не 1 доп боул, а 2, ок, всё понятно, очевидно. Хрен там, где там ещё 2 боула в примере? Есть ещё 2 числа, так же как и в спейре, они почему-то считаются дважды, как так?
Потом оказывается, что есть ещё какие-то фреймы и их всего 10. Что такое фрейм вообще?

Frame: A single turn for a bowler, constituting one or two rolls, depending on pinfall.

что за первые +5?
если был сплит, добавляются очки за следующий бросок

Вы по приведённому тексту объясняйте. Вы ж считаете, что его достаточно, нет?

Правила описаны в тексте задачи.
Я не вижу в тексте ни этого вашего определения фрейма, ни правил при спилте, ни что такое сплит (посмотрел — его вообще по числу пинов не определить).

Написано же английским по белому:

The scoring of a spare is the sum of the number of pins knocked down plus the number of pins knocked down in the next bowl.
Сумма всех сбитых кеглей плюс количество сбитых в следующем боуле.
1 фрейм — 2 или 3 боула (3 — если страйк). Каждый боул 1 или 2 броска (в зависимости от количества сбитых кеглей:если сразу страйк — 1 бросок, если с первого раза не сбил все, а со второго досбил все оставшиеся — это спейр). Мне кажется, эти правила не очень сложные для обывателя. Пойду кодить.

Мне кажется, ни текст условий, ни что я писал вообще не прочитано.
Вот при спейре 4, 6. И следующем боуле 5, 0. По правилам

The scoring of a spare is the sum of the number of pins knocked down plus the number of pins knocked down in the next bowl.
Получи, как в примере
(4 + 6 + 5) + (5 + 0)
Это т.е. (4+6+5+0) + (5+0)?
Что тогда со страйком, где там второй боул?
Это т.е. (4+6+5+0) + (5+0)?
Да, сделал попытку, сбил 4 кегли. Сделал ещё одну, добил остальные 6. Получил спейр и следующий боул. В следующем боуле сбил c одного броска 5. Общий счёт (4+6) — 1й боул, (5+0) — 2й боул, к первому боулу добавляем (5+0). Я в боулинге не силён, но по тексту вроде так считается. При страйке вместо одного броска даётся два.

ДОСТАТОЧНО, чтобы смоделировать решение именно по этим правилам. Задание ведь тестовое, на реальный боулинг оно не пойдёт. ЕСЛИ какое-то доп.условие необходимо для разрешения двойственности — его просто вводят дополнительно и выносят в настройки.

Нормальные такие задачки, очень напоминает студенческие лабы.
Как по мне, лучше уж такие задачки и как разультат их успешного решения — трудоустройство, как задачки на собеседование — «сделай ка мне то, сам не знаю что...» (изредка, но встречалось и такое).

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

Вероятно что и собеседование не такое как в Украине, спрашивать «академические» вопросы не станут.

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

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

Да, в Австралии такого практически нигде не спрашивают. В Гугле у меня спрашивали, ага.

дата стракчер
Не академично !

Что в JavaScript вернёт конструктор Object, если ему передать аргумент типа Object.

Странный вопрос. Но подобный задать могут.

Достаточно всего нескольких таких «странных» вопросов — и получается статистика: ≈75% нужных кандидатов отсеивается по глупости.

В реальной работе такие вопросы тоже возникают. И возникают сотнями и тысячами. Как правило одноразово. Ответ на них гуглят или смотрят в справочнике, и благополучно забывают до следующего раза. К тому времени как он понадобится в следующий раз, вероятнее всего сам язык (или конкретная библиотека) будут переписаны до неузнаваемости.

Иными словами, рекрутер потратит лишний МЕСЯЦ на поиск идеального кандидата, в то время как сам кандидат не потратил бы и лишних 15 минут в год на редко встречающиеся в реальном программировании вопросы.

ЛЬВИНАЯ ДОЛЯ реальных задач у программиста — перевести задачу из предметной области в код и обратно. И всё. И такой работы туева хуча, для большинства — все 100%.

Когда тебе задают такие вопросы — складывается впечатление, что у людей на проекте так постоянно пишут.

А еще часто такие вопросы задает тот, кто сам вчера на Хабре чето новенькое прочитал =)

А еще часто такие вопросы задает тот, кто сам вчера на Хабре чето новенькое прочитал =)
Часто? Всегда! Постоянно задаются именно те вопросы, которые сами недавно узнали. И практически никогда — то что реально понадобится в работе. Как раз эти вопросы задаёт сам соискатель.

в JS нет конструкторов, так можно и ответить

Спасибо. Скажите, плз, на какую позицию такие тестовые задания?

На позицию Full Stack Web Developer с уклоном на Front End. Язык программирования не очень важен, во всех трех местах сказали «пиши на чем хочешь». Но я так понимаю, что они всем кандидатам шлют одно и то же.

Хорошо хоть дизайнеров о таком не спрашивают :)))

Підписатись на коментарі