Preguntas alternativas de FizzBuzz [cerrado]


88

¿Alguien tiene alguna buena pregunta del tipo FizzBuzz que no sea el problema de FizzBuzz?

Estoy entrevistando a alguien y FB es relativamente conocido y no es tan difícil de memorizar, así que mi primera parada en la búsqueda de ideas es mi nueva adicción SO.

Respuestas:


104

He visto una pequeña lista de problemas de programación relativamente simples que se utilizan para descartar candidatos, al igual que FizzBuzz. Estos son algunos de los problemas que he visto, en orden de dificultad creciente:

  1. Invertir una cuerda
  2. Invertir una oración ("a Bob le gustan los perros" -> "A los perros le gustan los perros")
  3. Encuentra el valor mínimo en una lista
  4. Encuentra el valor máximo en una lista
  5. Calcular un resto (dado un numerador y denominador)
  6. Devuelve valores distintos de una lista que incluya duplicados (es decir, "1 3 5 3 7 3 1 1 5" -> "1 3 5 7")
  7. Devuelve valores distintos y sus recuentos (es decir, la lista anterior se convierte en "1 (3) 3 (3) 5 (2) 7 (1)")
  8. Dada una cadena de expresiones (solo variables, + y -) y un conjunto de pares de variable / valor (es decir, a = 1, b = 7, c = 3, d = 14) devuelve el resultado de la expresión ("a + b + c -d "sería -3).

Estos eran para Java, y podría usar las bibliotecas estándar, por lo que algunas de ellas pueden ser extremadamente fáciles (como 6). Pero funcionan como FizzBuzz. Si tiene una pista sobre la programación, debería poder hacerlo con bastante rapidez. Incluso si no conoces bien el idioma, al menos deberías poder dar la idea de cómo hacer algo.

Al usar esta prueba, uno de mis jefes anteriores vio de todo, desde personas que lo superaron bastante rápido, hasta personas que podían hacerlo más rápido, hasta un tipo que no pudo responder ni una sola después de media hora.

También debo señalar: dejó que la gente usara su computadora mientras se les asignaban estas tareas. Se les indicó específicamente que podían usar Google y similares.


Para el elemento 8, ¿se aceptaría una solución basada en JSR-223 (javax.script)? :-P (Es cierto que el uso de eso es completamente excesivo, pero algunas personas prefieren hacer eso que usar, digamos, java.util.Scanner.)
Chris Jester-Young

4
Eso no está dentro de mi idea del espíritu de la pregunta, pero si sabe lo suficiente para proponer eso, entonces ciertamente sabe lo suficiente para aprobar las preguntas de FizzBuzz, por lo que no lo tomaría en su contra. Incluso puede ser una ventaja a tu favor. Sin embargo, probablemente todavía preguntaría cómo lo haría sin javax.script.
MBCook

3
He estado leyendo tu respuesta por un tiempo y no pude entender qué estaba pasando, por qué no me gustó, lo que pasa es que tus preguntas no son divertidas de codificar :) (lo cual está bien ya que esto estaba destinado para entrevistas). Este comentario no tiene ningún sentido, pero solo quería sacarlo de mi sistema. :) perdón por todos los emoticonos
Trufa

1
Me gustaría ver soluciones de muestra para el número 8. Los primeros 7 son muy sencillos, pero el 8 (para mí) parece un poco más complicado en comparación con el resto. Lo estoy resolviendo en Python 3.xy es un juego completamente diferente. Probablemente sea algo que no conozco.
DonutSteve

31

Quizás esto no responda directamente a su pregunta, pero no estoy seguro de que necesite plantear otro problema. Además de ser "fácil de memorizar", la pregunta de FizzBuzz es simplemente "fácil", y ese es el punto. Si la persona a la que está entrevistando pertenece a la clase de personas a las que FizzBuzz es "bien conocido", entonces pertenece a la clase de personas que una pregunta del tipo FizzBuzz no filtraría. Eso no significa que los contrate en el momento, pero sí significa que deberían poder pasar rápidamente y pasar al meollo de la entrevista.

Para decirlo de otra manera, vale la pena entrevistar más a cualquiera que se tome el tiempo de leer Coding Horror . Simplemente pídales que escriban la solución muy rápido, que la analicen brevemente (por ejemplo, ¿cómo se prueba esto?) Y luego pasen a la siguiente pregunta. Y como dice el artículo, "es realmente asombroso cuántos candidatos son incapaces de realizar las tareas de programación más simples".


7
Gran respuesta. "FizzBuzz es fácil y ese es el punto ... cualquiera que se tome el tiempo para leer Coding Horror vale la pena entrevistarlo más" QFT. A menudo les pregunto a los candidatos "¿a dónde van para leer sobre programación?" Siempre me sorprende la cantidad de personas que no pueden mencionar un solo blog, sitio web o libro.
Noah Sussman

1
Estoy en desacuerdo. Entrevistamos a alguien la semana pasada y le preguntamos el número 3 de la respuesta aceptada. Literalmente dijeron "oh, esperaba fizzbuzz" y luego no pudieron responder a nuestra pregunta.
frandroid

23

Cualquiera de los primeros del Proyecto Euler probablemente sería bueno.

Por ejemplo:

Problema 25

La secuencia de Fibonacci está definida por la relación de recurrencia:

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

Por lo tanto, los primeros 12 términos serán:

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

El duodécimo término, F12, es el primer término que contiene tres dígitos.

¿Cuál es el índice del primer término en la secuencia de Fibonacci que contiene 1000 dígitos?


14

Descubrí que revisar una cuerda si es un palíndromo es bastante simple y puede ser un desyerbador decente.


Yo diría que depende del idioma. En C podría ser interesante, en Perl se acabó scalar(reverse 'foo') == 'foo'.
jkramer

3
cierto, pero al mismo tiempo, ser capaz de ver la solución más simple es valioso ... entonces dices, "ok, ahora finge que no tienes la función inversa".
Mike Stone

1
En C ++, daría puntos extra por cualquier solución "funcional" que no implique un bucle escrito a mano. por ejemplo, "return equal (str.begin (), str.end (), str.rbegin ());" o (para fanáticos de la velocidad) "return equal (str.begin (), str.begin () + str.size () / 2, str.rbegin ());"
Chris Jester-Young

1
Por supuesto, al ver esa respuesta, también le pediría al candidato que explique el funcionamiento del código. ¡No pueden sacar una ventaja simplemente copiando mi respuesta anterior! :-P
Chris Jester-Young

10

Quería una pregunta de FizzBuzz que no involucre al operador de módulo. Sobre todo porque suelo entrevistar a desarrolladores web para quienes el operador de módulo no aparece con tanta frecuencia. Y si no es algo con lo que te encuentres con regularidad, es una de esas cosas que buscas las pocas veces que lo necesitas.

(Por supuesto, es un concepto que, idealmente, debería haber encontrado en un curso de matemáticas en algún momento del camino, pero ese es un tema diferente).

Entonces, lo que se me ocurrió es lo que llamo, sin imaginación, Threes in Reverse . La instrucción es:

Escribe un programa que imprima, en orden inverso , cada múltiplo de 3 entre 1 y 200.

Hacerlo en orden normal es fácil: multiplique el índice de bucle por 3 hasta llegar a un número que exceda 200, luego salga. No tiene que preocuparse por cuántas iteraciones terminar después, simplemente continúe hasta que alcance el primer valor que es demasiado alto.

Pero yendo hacia atrás, hay que saber por dónde empezar. Algunos pueden darse cuenta intuitivamente de que 198 (3 * 66) es el múltiplo más alto de 3 y, como tal, codificar 66 en el ciclo. Otros pueden usar una operación matemática (división entera o un piso () en una división de punto flotante de 200 y 3) para calcular ese número y, al hacerlo, proporcionar algo más genéricamente aplicable.

Esencialmente, es el mismo tipo de problema que FizzBuzz (recorrer valores e imprimirlos, con un giro). Este es un problema para resolver que no usa nada tan (relativamente) esotérico como la operación de módulo.


2
Tengo curiosidad por Legion: ¿cómo hacen sus desarrolladores web cosas como la restricción verde / filas alternas sin módulo?
Andrew Burns

4
Bueno, si solo está tratando de aplicar estilos a filas alternas, utilizando el selector nth-child de CSS3. jQuery también tiene selectores alternos para hacer tales cosas a través de JS. Pero hablando de su punto más amplio, como dije anteriormente, es algo que se busca, se usa y luego se olvida rápidamente porque tomó 15 segundos encontrarlo. No digo que me guste o que lo apruebe, pero especialmente a nivel de entrada, sucede. :)
Legion

1
aquí está mi solución php :) ideone.com/BnJQ3 3 minutos :)
Trufa

Debe ser más difícil en lenguajes de nivel inferior, porque en Ruby es tan fácil como insertar los números (en orden) en una matriz y luego invertir toda la matriz. ideone.com/MKKb6
Kerrick

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

9

Para algo realmente súper simple que se puede hacer en 10 segundos, pero eliminaría a las personas que literalmente no pueden programar nada , pruebe esto:

Pregunte: enséñeme (en papel, pero mejor en una pizarra) cómo intercambiaría los valores de dos variables.

Esta no fue mi idea, pero se publicó en un comentario. por alguien llamado Jacob en una publicación de blog sobre la pregunta original de FizzBuzz.

Jacob continúa diciendo:

Si no empiezan con la creación de una tercera variable, prácticamente puedes descartar a esa persona. Descubrí que puedo reducir de un tercio a la mitad de mis solicitantes (es cierto que en ese momento no seleccionados) solo con esa pregunta.

Hay una discusión más interesante después de ese comentario en la publicación del blog original sobre las formas de realizar este intercambio de variables sin requerir una tercera variable (sumar / restar, xor, etc.) y, por supuesto, si está utilizando un lenguaje que admite esto en una sola declaración / operación, puede que no sea una prueba tan buena.

Aunque no es mi idea, quería publicar esto aquí, ya que es una pregunta sencilla y elegante que puede (y debe) ser respondida en unos 10 segundos por alguien que haya escrito incluso el programa más simple. Tampoco requiere el uso de operadores aparentemente oscuros como el operador de módulo, con el que muchas personas, que por lo demás son programadores bastante decentes, simplemente no están familiarizadas (lo que sé por mi propia experiencia).


1
Creo que es una muy buena idea. Ciertamente es mejor que estar sentado durante 20 minutos viendo mientras un candidato depura dolorosamente un programa preguntándose por qué han usado foreach en lugar de for y cómo solucionarlo. (Como acabo de hacer)
mike nelson

std :: swap (a, b); ¿Por qué debería yo crear una tercera variable cuando casi todos los librería estándar siempre estará feliz de hacerlo por mí?

@Dan: la idea es que se le pida que haga esto sin usar ninguna biblioteca y usando solo las palabras clave integradas en el idioma que elija. Claro, en el mundo real puede usar una rutina de biblioteca para lograr esto, al igual que usar una rutina de biblioteca para (digamos) una estructura de lista enlazada en lugar de escribir la suya propia. El punto de esta prueba es que es lo suficientemente simple y no descarta esperar que cualquier candidato pueda hacerlo sin necesidad de recurrir a una biblioteca para lograrlo.
CraigTP

Entonces, ¿está sugiriendo Jacob al entrevistado que use una tercera variable o no? He visto alternativas a esa pregunta donde le pide al desarrollador que no use una tercera variable. La forma en que formuló su respuesta es bastante ambigua.
theGreenCabbage

1
Como alguien que piensa que es solo un programador "aceptable", esto me asustó. Mi pensamiento inmediato fue "Querido Dios, usaría una tercera variable, ¡pero seguramente él quiere una forma inteligente de hacerlo sin una!"
Abogado del diablo

8

Fibonacci, invertir una cadena, contar el número de bits establecidos en un byte son otros comunes. Project Euler también tiene una gran colección de dificultad creciente.


Fibonaaci, aunque un poco más avanzado, es bueno, soy un novato completo y me tomó 20-25 minutos, así que esta es tu referencia :)
Trufa

Me golpearon con Fibonacci, FizzBuzz, y eliminé enteros duplicados en una matriz, todo hoy en una entrevista (4 horas)
IAbstract

4

Pídales que escriban una aplicación para devolver los factores de un número determinado. Es fácil de hacer y difícil de hacer bien en un corto período de tiempo. Puede ver su estilo y la forma en que resuelven los problemas en poco tiempo.


2

Devuelve el índice de la primera aparición de la cadena X dentro de la cadena Y

La implementación de strstr () requiere una comprensión básica del lenguaje al tiempo que brinda la oportunidad de una optimización inteligente.


2

Si se trata de una entrevista de C / C ++, asegúrese de que la persona conozca los consejos.

General: algoritmo simple (lista enlazada [simple / doble]). Preguntar sobre la complejidad de añadir en cada caso (al principio, al final, optimizaciones ...).

(General) ¿Cómo se encuentra el mínimo y el máximo de una matriz (tamaño N) con solo 3 * N / 2 comparaciones?

C / C ++: ¿Cómo optimizaría varios "strcat" en un búfer?


Me parece que para el problema "¿Cómo se encuentra el mínimo y el máximo de una matriz (tamaño N) con solo 3 * N / 2 comparaciones?" Es bueno aclarar que el número 3 * N / 2 es un número de comparación de elementos de una matriz, pero puede comparar int libremente, por ejemplo. por ejemplo (i <tamaño de la matriz) en bucles.
sergtk


0

Qué tal: quiero usar un solo entero para almacenar varios valores. Describe cómo funcionaría eso.

Si no tienen ni idea de las máscaras de bits y las operaciones, probablemente no puedan resolver otros problemas.


9
Yo diría que es más instructivo si después de haberle explicado o señalado las máscaras, si la persona no se golpea la frente y niega con la cabeza burlándose de sí misma. Las máscaras de bits no son un idioma común, a menos que uno use C, dispositivos integrados o redes. Mucha gente talentosa no lo ha hecho.
Gregg Lind

2
Mmm, entonces tienes que decidir si aceptar almacenar 1, 2 y 3 en el decimal 123 cuenta como una respuesta correcta, aunque las matemáticas serían horriblemente complicadas en comparación con solo declarar 3 variables. O almacenando 1,2,3 escribiendo x = 1; x = 2; x = 3; Quiero decir, ¿necesitamos almacenar estos valores al mismo tiempo?
MatthewMartin

0

Encontrar una lista de números primos es una pregunta bastante común, pero aún requiere pensar un poco y hay diferentes grados de respuestas que la gente podría dar.

También se sorprendería de cuántas personas luchan por implementar una estructura de datos de tipo Mapa / Diccionario.


0

Les he pedido a mis candidatos que creen un programa para calcular el factorial de un número dado en cualquier pseudolenguaje de su elección. Es un problema bastante fácil de resolver y se presta bien a las preguntas de seguimiento naturales (que a menudo se pueden preguntar) sobre la recursividad.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.