Perguntas alternativas do FizzBuzz [fechadas]


88

Alguém tem alguma pergunta do tipo FizzBuzz que não seja o problema do FizzBuzz?

Estou entrevistando alguém e o FB é relativamente conhecido e não é tão difícil de memorizar, então minha primeira parada em busca de ideias é meu novo vício SO.

Respostas:


103

Eu vi uma pequena lista de problemas de programação relativamente simples usados ​​para eliminar candidatos, assim como o FizzBuzz. Aqui estão alguns dos problemas que tenho visto, em ordem crescente de dificuldade:

  1. Inverta uma corda
  2. Inverta uma frase ("bob gosta de cachorros" -> "cachorros gosta de bob")
  3. Encontre o valor mínimo em uma lista
  4. Encontre o valor máximo em uma lista
  5. Calcule um resto (dado um numerador e denominador)
  6. Retorne valores distintos de uma lista incluindo duplicatas (por exemplo, "1 3 5 3 7 3 1 1 5" -> "1 3 5 7")
  7. Retorne valores distintos e suas contagens (ou seja, a lista acima torna-se "1 (3) 3 (3) 5 (2) 7 (1)")
  8. Dada uma sequência de expressões (apenas variáveis, +, e -) e um conjunto de pares de variável / valor (ou seja, a = 1, b = 7, c = 3, d = 14) retorna o resultado da expressão ("a + b + c -d "seria -3).

Elas eram para Java e você poderia usar as bibliotecas padrão, portanto, algumas delas podem ser extremamente fáceis (como 6). Mas eles funcionam como o FizzBuzz. Se você tem uma ideia sobre programação, deve ser capaz de fazer mais rapidamente. Mesmo que você não conheça bem o idioma, você deve pelo menos ser capaz de dar uma ideia por trás de como fazer algo.

Usando esse teste, um dos meus chefes anteriores viu tudo, desde pessoas que conseguiam fazer tudo muito rápido, até pessoas que conseguiam fazer muito rápido, até um cara que não conseguia responder a uma única pergunta depois de meia hora.

Também devo observar: ele deixava que as pessoas usassem seu computador enquanto realizavam essas tarefas. Eles foram especificamente instruídos de que poderiam usar o Google e similares.


Para o item 8, uma solução baseada em JSR-223 (javax.script) seria aceita? :-P (Reconhecidamente, o uso disso é completamente exagero, mas algumas pessoas preferem fazer isso do que usar, digamos, java.util.Scanner.)
Chris Jester-Young

4
Isso não está dentro da minha ideia do espírito da pergunta, mas se você sabe o suficiente para propor isso, então certamente sabe o suficiente para passar nas perguntas do FizzBuzz, então eu não usaria isso contra você. Pode até ser uma vantagem a seu favor. Eu provavelmente ainda perguntaria como você faria isso sem javax.script.
MBCook

3
Estou lendo suas respostas há um tempo e não consegui descobrir o que estava acontecendo, por que não gostei, o fato é que suas perguntas não são divertidas de codificar :) (o que está ok, já que foi intencional para entrevistas). Não há nenhum ponto real para este comentário, mas apenas queria tirá-lo do meu sistema. :) desculpe por todos os smileys
Trufa

1
Gostaria de ver soluções de exemplo para o número 8. Os primeiros 7 são uma brisa, mas 8 (para mim) parece um pouco mais complicado em comparação com o resto. Estou trabalhando nisso no Python 3.xe é um jogo totalmente diferente. Provavelmente é apenas algo que não conheço.
DonutSteve de

31

Talvez isso não responda diretamente à sua pergunta, mas não tenho certeza se você precisa encontrar outro problema. Além de ser "fácil de memorizar", a pergunta do FizzBuzz é simplesmente "fácil", e esse é o ponto. Se a pessoa que você está entrevistando está na classe de pessoas para as quais o FizzBuzz é "bem conhecido", então ela está na classe de pessoas que uma pergunta do tipo FizzBuzz não filtraria. Isso não significa que você os contrate na hora, mas significa que eles devem ser capazes de passar rapidamente por isso e ir direto ao assunto da entrevista.

Colocando de outra forma, vale a pena entrevistar qualquer pessoa que reserve um tempo para ler Coding Horror . Peça-lhes que escrevam a solução muito rapidamente, discuta-a brevemente (por exemplo, como você testa isso?) E, em seguida, passe para a próxima pergunta. E, como diz o artigo, "é verdadeiramente surpreendente quantos candidatos são incapazes das tarefas de programação mais simples."


7
Ótima resposta. "FizzBuzz é fácil e esse é o ponto ... qualquer pessoa que reserve um tempo para ler Coding Horror vale a pena entrevistar mais adiante" QFT. Costumo perguntar aos candidatos "onde você lê sobre programação?" Sempre fico surpreso com a quantidade de pessoas que não conseguem citar um único blog, site ou livro.
Noah Sussman

1
Discordo. Entrevistamos alguém na semana passada e perguntamos a ele o número 3 da resposta aceita. Eles literalmente disseram "oh, eu estava esperando fizzbuzz" e então não foram capazes de responder à nossa pergunta.
frandroid

23

Qualquer um dos primeiros do Projeto Euler provavelmente seria bom.

Por exemplo:

Problema 25

A sequência de Fibonacci é definida pela relação de recorrência:

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

Portanto, os primeiros 12 termos serão:

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

O 12º termo, F12, é o primeiro termo a conter três dígitos.

Qual é o índice do primeiro termo na sequência de Fibonacci para conter 1000 dígitos?


14

Descobri que verificar se uma string é um palíndromo é bastante simples e pode ser um removedor decente.


Eu diria que depende do idioma. Em C pode ser interessante, em Perl é feito com scalar(reverse 'foo') == 'foo'.
jkramer

3
verdade, mas ao mesmo tempo, ser capaz de ver a solução mais simples é valioso ... então você diz, "ok, agora finja que não tem a função reversa."
Mike Stone,

1
Em C ++, eu daria pontos de bônus para qualquer solução "funcional" que não envolva um loop escrito à mão. por exemplo, "retornar igual (str.begin (), str.end (), str.rbegin ());" ou (para fanáticos por velocidade) "retornar igual (str.begin (), str.begin () + str.size () / 2, str.rbegin ());"
Chris Jester-Young

1
Claro, ao ver essa resposta, eu também pediria ao candidato para explicar o funcionamento do código. Eles não podem levantar uma perna apenas copiando minha resposta acima! :-P
Chris Jester-Young

10

Eu queria uma pergunta do FizzBuzz que não envolvesse o operador do módulo. Especialmente porque normalmente estou entrevistando desenvolvedores da web para os quais o operador de módulo simplesmente não aparece com tanta frequência. E se não é algo que você encontra regularmente, é uma daquelas coisas que você procura nas poucas vezes em que precisa.

(Concedido, é um conceito que, idealmente, você deveria ter encontrado em um curso de matemática em algum lugar ao longo do caminho, mas esse é um tópico diferente.)

Então, o que eu inventei é o que chamo, sem imaginação, Três em Reverso . A instrução é:

Escreva um programa que imprima, em ordem reversa , todos os múltiplos de 3 entre 1 e 200.

Fazê-lo na ordem normal é fácil: multiplique o índice do loop por 3 até chegar a um número que exceda 200 e saia. Você não precisa se preocupar com quantas iterações encerrar depois, apenas continue até atingir o primeiro valor que é muito alto.

Mas voltando atrás, você tem que saber por onde começar. Alguns podem perceber intuitivamente que 198 (3 * 66) é o maior múltiplo de 3 e, como tal, embutir 66 no loop. Outros podem usar uma operação matemática (divisão inteira ou um piso () em uma divisão de ponto flutuante de 200 e 3) para descobrir esse número e, ao fazer isso, fornecer algo mais genericamente aplicável.

Essencialmente, é o mesmo tipo de problema que o FizzBuzz (repetir os valores e imprimi-los, com uma variação). Este é um problema a ser resolvido que não usa nada tão (relativamente) esotérico quanto a operação do módulo.


2
Estou curioso, Legião: como seus desenvolvedores web fazem coisas como barras verdes / linhas alternativas sem módulo?
Andrew Burns,

4
Bem, se você está apenas tentando aplicar estilos a linhas alternadas, usando o seletor enésimo filho do CSS3. jQuery também tem seletores alternados para fazer essas coisas por meio de JS. Mas falando sobre o seu ponto mais amplo, como eu disse acima, é algo que é pesquisado, usado e então rapidamente esquecido porque levou 15 segundos para ser encontrado. Não estou dizendo que gosto ou aprovo, mas especialmente no nível de entrada, isso acontece. :)
Legião de

1
aqui está minha solução php :) ideone.com/BnJQ3 3 minutos :)
Trufa

Deve ser mais difícil em linguagens de nível inferior, porque em Ruby é tão fácil quanto colocar os números (em ordem) em um array e depois inverter o array inteiro. ideone.com/MKKb6
Kerrick

Python:print [x for x in xrange(3, 200, 3)][::-1]
beatgammit de

8

Fibonacci, reverter uma string, contar o número de bits definido em um byte são outros comuns. O Projeto Euler também tem uma grande coleção de dificuldade crescente.


Fibonaaci, embora um pouco mais avançado, é legal, sou totalmente novato e me levou de 20 a 25 minutos, então aí está a sua referência :)
Trufa

Fui atingido com Fibonacci, FizzBuzz e remova inteiros duplicados em uma matriz - tudo hoje em uma entrevista (4 horas)
IAbstract

8

Para algo realmente super simples que pode ser feito em 10 segundos, mas removeria aquelas pessoas que literalmente não podem programar nada , tente este:

Pergunte: mostre-me (no papel, mas melhor no quadro branco) como você trocaria os valores de duas variáveis.

Não foi ideia minha, mas foi postado em um comentário por alguém chamado Jacob em um post de blog sobre a pergunta original do FizzBuzz.

Jacob continua a dizer:

Se eles não começarem com a criação de uma terceira variável, você pode praticamente descartar essa pessoa. Descobri que posso reduzir de um terço à metade dos meus candidatos (reconhecidamente não verificados) apenas com essa pergunta.

Há uma outra discussão interessante após aquele comentário na postagem original do blog sobre maneiras de realizar essa troca de variável sem exigir uma terceira variável (adicionar / subtrair, xor etc.) e, claro, se você estiver usando uma linguagem que suporte isso em uma única instrução / operação, pode não ser um teste tão bom.

Embora não seja ideia minha, eu queria postar isso aqui, pois é uma pergunta simples e elegante que pode (e deve) ser respondida em cerca de 10 segundos por alguém que escreveu até mesmo o mais simples dos programas. Também não requer o uso de operadores um tanto aparentemente obscuros como o operador de módulo, com o qual muitas pessoas, que por outro lado são programadores bastante decentes, simplesmente não estão familiarizados (o que eu sei por experiência própria).


1
Acho que é uma ideia muito boa. Certamente é melhor do que ficar sentado por 20 minutos assistindo enquanto um candidato depura dolorosamente um programa se perguntando por que eles usaram foreach em vez de para e como corrigi-lo! (Como acabei de fazer)
mike nelson

std :: swap (a, b); Por que devo criar uma terceira variável, quando quase todas as bibliotecas padrão o farão para mim de bom grado?

@Dan - A ideia é que você seja solicitado a fazer isso sem usar nenhuma biblioteca e usando apenas as palavras-chave integradas no idioma de sua escolha. Claro, no mundo real você pode usar uma rotina de biblioteca para fazer isso, da mesma forma que usar uma rotina de biblioteca para (digamos) uma estrutura de lista vinculada em vez de escrever a sua própria. O objetivo desse teste é que ele é suficientemente simples e não está fora de questão esperar que qualquer candidato seja capaz de fazê-lo sem precisar recorrer a uma biblioteca para obtê-lo.
CraigTP

Então Jacob está sugerindo que o entrevistado use uma terceira variável ou não? Já vi alternativas para essa pergunta em que pede ao desenvolvedor para não usar uma terceira variável. A maneira como ele formulou sua resposta é bastante ambígua.
theGreenCabbage

1
Como alguém que pensa que é apenas um programador "ok", isso me assustou. Meu pensamento imediato foi "Querido Deus, eu usaria uma terceira variável, mas com certeza ele quer uma maneira inteligente de fazer isso sem uma!"
Advogado do Diabo

4

Peça-lhes que escrevam um aplicativo para retornar os fatores de um determinado número. É fácil de fazer e difícil de fazer bem em um curto período de tempo. Você pode ver o estilo deles e a maneira como eles pensam nos problemas em um curto espaço de tempo.


2

Retorna o índice da primeira ocorrência da string X dentro da string Y

A implementação de strstr () requer um conhecimento básico da linguagem, ao mesmo tempo que fornece a oportunidade para uma otimização inteligente.


2

Se for uma entrevista C / C ++, certifique-se de que a pessoa conhece os ponteiros.

Geral - algoritmo simples (lista encadeada [simples / dupla]). Pergunte sobre a complexidade de adicionar em cada caso (no início, no final, otimizações ...)?

(Geral) Como você encontra o mínimo e o máximo em uma matriz (tamanho N) com apenas 3 * N / 2 comparações?

C / C ++: Como você otimizaria vários "strcat" s para um buffer?


Parece-me que para o problema "Como você encontra o mínimo e o máximo em uma matriz (tamanho N) com apenas 3 * N / 2 comparações?" é bom esclarecer que o número 3 * N / 2 é um número de comparação de elementos do array, mas você pode comparar int livremente, por exemplo. por exemplo (i <tamanho do array) em loops.
sergtk


0

Que tal: eu quero usar um único inteiro para armazenar vários valores. Descreva como isso funcionaria.

Se eles não tiverem a menor ideia sobre máscaras de bits e operações, provavelmente não conseguirão resolver outros problemas.


9
Eu diria que é mais instrutivo se depois de ter as máscaras explicadas, ou apontadas, a pessoa não bater com a testa e balançar a cabeça em zombaria. Máscaras de bits não são um idioma comum, a menos que se use C, dispositivos incorporados ou rede. Muitas pessoas talentosas não o fizeram.
Gregg Lind,

2
Hmm, então você tem que decidir se aceitar armazenar 1,2 e 3 no decimal 123 conta como uma resposta correta, mesmo que a matemática seja terrivelmente complicada em comparação com apenas declarar 3 variáveis. Ou armazenando 1,2,3 escrevendo x = 1; x = 2; x = 3; Quer dizer, precisamos armazenar esses valores contemporaneamente?
MatthewMartin

0

Encontrar uma lista de números primos é uma pergunta bastante comum, mas ainda requer um pouco de reflexão e há vários graus de respostas que as pessoas podem dar.

Você também ficaria surpreso com quantas pessoas lutam para implementar uma estrutura de dados do tipo Mapa / Dicionário.


0

Pedi aos meus candidatos que criassem um programa para calcular o fatorial de um determinado número em qualquer pseudo-linguagem de sua escolha. É um problema bastante fácil de resolver e se presta bem às perguntas de acompanhamento natural (que podem ser feitas com frequência) sobre a recursão.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.