Альтернативные вопросы FizzBuzz

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

Я беседую с кем-то, а FB относительно хорошо известен и не так уж сложно запомнить, поэтому моя первая остановка в поиске идей - это моя новая зависимость SO.

Ответ 1

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

  • Обратная строка
  • Обратное предложение ( "Боб любит собак" → "собаки любят боб" )
  • Найти минимальное значение в списке
  • Найти максимальное значение в списке
  • Рассчитать остаток (с учетом числителя и знаменателя)
  • Возвращает отдельные значения из списка, включая дубликаты (т.е. "1 3 5 3 7 3 1 1 5" → "1 3 5 7" )
  • Возвращает отдельные значения и их количество (т.е. список выше становится "1 (3) 3 (3) 5 (2) 7 (1)" )
  • С учетом строки выражений (только переменные, + и -) и набора пар переменных/значений (т.е. a = 1, b = 7, c = 3, d = 14) возвращает результат выражения ( "a + b + c -d" будет -3).

Это были для Java, и вы могли использовать стандартные библиотеки, поэтому некоторые из них могут быть чрезвычайно легкими (например, 6). Но они работают как FizzBuzz. Если у вас есть ключ к программированию, вы должны сделать это довольно быстро. Даже если вы не знаете язык хорошо, вы должны, по крайней мере, дать понять, как что-то сделать.

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

Я также должен отметить: он позволял людям использовать свой компьютер, пока им были даны эти задачи. Им было специально указано, что они могут использовать Google и т.д.

Ответ 2

Возможно, это не отвечает на ваш вопрос напрямую, но я не уверен, что вам нужно придумать еще одну проблему. Помимо того, что "легко запоминать", вопрос FizzBuzz просто "прост", и в этом все дело. Если человек, с которым вы проводите собеседование, находится в классе людей, которым FizzBuzz "хорошо известен", тогда они находятся в классе людей, и вопрос типа FizzBuzz не будет отфильтровываться. Это не значит, что вы нанимаете их на месте, но это означает, что они должны быть в состоянии пробраться через него и получить удовольствие от интервью.

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

Ответ 3

Любой из ранних из Project Euler, вероятно, будет хорошим.

Например:

Проблема 25

Последовательность Фибоначчи определяется рекуррентным соотношением:

Fn = Fn−1 + Fn−2, where F1 = 1 and F2 = 1.

Следовательно, первые 12 членов будут:

F1 = 1
F2 = 1
F3 = 2
F4 = 3
F5 = 5
F6 = 8
F7 = 13
F8 = 21
F9 = 34
F10 = 55
F11 = 89
F12 = 144

12-й член F12 - это первый термин, содержащий три цифры.

Каков индекс первого слагаемого в последовательности Фибоначчи содержат 1000 цифр?

Ответ 4

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

Ответ 5

Фибоначчи, обратная строка, количество отсчетов бит в байте - другие общие. Project Euler также имеет большую коллекцию растущих трудностей.

Ответ 6

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

(Конечно, это концепция, которая, в идеале, должна была встречаться в математическом курсе где-то на этом пути, но это другая тема.)

Итак, я придумал то, что я называю, невообразимо, Threes in Reverse. Инструкция:

Напишите программу, которая выдает в обратном порядке, каждый кратный 3 от 1 до 200.

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

Но, возвращаясь назад, вы должны знать, с чего начать. Некоторые могут интуитивно понять, что 198 (3 * 66) является наивысшим кратным 3, и как таковой, жесткий код 66 в цикл. Другие могут использовать математическую операцию (целочисленное деление или пол() для деления с плавающей запятой 200 и 3), чтобы выяснить это число и при этом предоставить что-то более общее применимое.

По сути, это такая же проблема, как FizzBuzz (переключение значений и их распечатка с помощью твиста). Это одна из проблем для решения, которая не использует ничего такого (относительно) эзотерического, как операция по модулю.

Ответ 7

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

Спросите: покажите мне (на бумаге, но лучше на доску), как вы поменяли бы значения двух переменных.

Это была не моя идея, но был опубликован в комментарии кем-то по имени Джейкоб на сообщение в блоге все об исходном вопросе FizzBuzz.

Далее Джейкоб говорит:

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

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

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

Ответ 8

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

Ответ 9

Возвращает индекс первого появление строки X в строке Y

Реализация strstr() требует базового понимания языка, предоставляя возможность для умной оптимизации.

Ответ 10

Если это интервью на C/С++, убедитесь, что человек знает о указателях.

Общий - простой алгоритм ([single/double] связанный список). Спросите о сложности добавления в каждом случае (в начале, в конце, оптимизации...)?

(Общие) Как вы находите min и max из массива (размер N) с помощью всего 3 * N/2 сравнения?

C/С++: Как бы вы оптимизировали несколько "strcat" в буфере?

Ответ 11

Как насчет: Я хочу использовать одно целое число для хранения нескольких значений. Опишите, как это будет работать.

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

Ответ 13

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

Вы также будете удивлены, как много людей пытаются реализовать структуру данных типа "Карта/Словарь".

Ответ 14

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