Domande alternative su FizzBuzz [chiuso]


88

Qualcuno ha delle buone domande tipo FizzBuzz che non sono il problema FizzBuzz?

Sto intervistando qualcuno e FB è relativamente noto e non è così difficile da memorizzare, quindi la mia prima fermata alla ricerca di idee è la mia nuova dipendenza SO.

Risposte:


103

Ho visto un piccolo elenco di problemi di programmazione relativamente semplici usati per eliminare i candidati, proprio come FizzBuzz. Ecco alcuni dei problemi che ho riscontrato, in ordine di difficoltà crescente:

  1. Inverti una stringa
  2. Inverti una frase ("bob like dogs" -> "dogs likes bob")
  3. Trova il valore minimo in un elenco
  4. Trova il valore massimo in un elenco
  5. Calcola un resto (dato un numeratore e un denominatore)
  6. Restituisce valori distinti da un elenco che include duplicati (ad esempio "1 3 5 3 7 3 1 1 5" -> "1 3 5 7")
  7. Restituisce valori distinti e i relativi conteggi (ovvero l'elenco sopra diventa "1 (3) 3 (3) 5 (2) 7 (1)")
  8. Data una stringa di espressioni (solo variabili, + e -) e un insieme di coppie variabile / valore (ad es. A = 1, b = 7, c = 3, d = 14) restituisce il risultato dell'espressione ("a + b + c -d "sarebbe -3).

Questi erano per Java e potresti usare le librerie standard in modo che alcune di esse possano essere estremamente facili (come 6). Ma funzionano come FizzBuzz. Se hai un indizio sulla programmazione dovresti essere in grado di farlo abbastanza rapidamente. Anche se non conosci bene la lingua dovresti almeno essere in grado di dare l'idea che sta dietro a come fare qualcosa.

Usando questo test uno dei miei capi precedenti ha visto di tutto, da persone che hanno fatto tutto abbastanza velocemente, a persone che potevano fare più abbastanza velocemente, a un ragazzo che non poteva rispondere a uno solo dopo mezz'ora.

Dovrei anche notare: lasciava che le persone usassero il suo computer mentre venivano assegnati questi compiti. Sono stati specificatamente istruiti che potevano utilizzare Google e simili.


Per l'elemento 8, sarebbe accettata una soluzione basata su JSR-223 (javax.script)? :-P (Certo, l'uso di questo è completamente eccessivo, ma alcune persone preferirebbero farlo piuttosto che usare, ad esempio, java.util.Scanner.)
Chris Jester-Young,

4
Non è nella mia idea dello spirito della domanda, ma se ne sai abbastanza per proporlo, allora sicuramente ne sai abbastanza per passare le domande di FizzBuzz, quindi non te la metterei contro. Potrebbe anche essere un vantaggio a tuo favore. Tuttavia, probabilmente ti chiederei ancora come faresti senza javax.script.
MBCook

3
È da un po 'che leggo la tua risposta e non riesco a capire cosa stava succedendo, perché non mi è piaciuto, il fatto è che le tue domande non sono divertenti da programmare :) (il che va bene dato che era inteso per le interviste). Non ha senso questo commento, ma volevo solo toglierlo dal mio sistema. :) scusa per tutte le faccine
Trufa

1
Vorrei vedere soluzioni di esempio per il numero 8. I primi 7 sono un gioco da ragazzi, ma 8 (a me) sembra un po 'più complicato rispetto al resto. Lo sto lavorando in Python 3.x ed è un gioco completamente diverso. Probabilmente solo qualcosa di cui non sono a conoscenza.
DonutSteve

31

Forse questo non risponde direttamente alla tua domanda, ma non sono certo che tu debba affrontare un altro problema. Oltre ad essere "facile da memorizzare", la domanda di FizzBuzz è semplicemente "facile", e questo è il punto. Se la persona che stai intervistando è nella classe di persone per cui FizzBuzz è "noto", allora è nella classe di persone che una domanda di tipo FizzBuzz non filtrerebbe. Ciò non significa che li assumi sul posto, ma significa che dovrebbero essere in grado di affrontarlo rapidamente e passare al nocciolo del colloquio.

In altre parole, chiunque si prenda il tempo di leggere Coding Horror merita di essere intervistato ulteriormente. Invitali a scrivere la soluzione molto velocemente, a discuterne brevemente (ad esempio, come lo testate?), Quindi passare alla domanda successiva. E come dice l'articolo, "è davvero sorprendente quanti candidati non siano in grado di svolgere i compiti di programmazione più semplici".


7
Bella risposta. "FizzBuzz è facile e questo è il punto ... chiunque si prenda il tempo di leggere Coding Horror merita di essere intervistato ulteriormente" QFT. Chiedo spesso ai candidati "dove vai a leggere di programmazione?" Sono sempre sorpreso di quante persone non siano in grado di menzionare un singolo blog, sito web o libro.
Noah Sussman,

1
Non sono d'accordo. Abbiamo intervistato qualcuno la scorsa settimana e gli abbiamo chiesto il n. 3 dalla risposta accettata. Hanno letteralmente detto "oh, mi aspettavo fizzbuzz" e poi non sono stati in grado di rispondere alla nostra domanda.
frandroid

23

Uno dei primi del Progetto Eulero sarebbe probabilmente buono.

Per esempio:

Problema 25

La sequenza di Fibonacci è definita dalla relazione di ricorrenza:

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

Quindi i primi 12 termini saranno:

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

Il 12 ° termine, F12, è il primo a contenere tre cifre.

Qual è l'indice del primo termine nella sequenza di Fibonacci che contiene 1000 cifre?


14

Ho scoperto che controllare una stringa se è un palindromo è piuttosto semplice che può essere una sarchiatrice decente.


Direi che dipende dalla lingua. In C potrebbe essere interessante, in Perl è finito scalar(reverse 'foo') == 'foo'.
jkramer

3
vero, ma allo stesso tempo, essere in grado di vedere la soluzione più semplice è prezioso ... poi dici "ok, ora fai finta di non avere la funzione inversa".
Mike Stone,

1
In C ++, darei punti bonus per qualsiasi soluzione "funzionale" che non implichi un ciclo scritto a mano. ad esempio, "return equal (str.begin (), str.end (), str.rbegin ());" o (per i fanatici della velocità) "return equal (str.begin (), str.begin () + str.size () / 2, str.rbegin ());"
Chris Jester-Young,

1
Naturalmente, vedendo una risposta del genere, chiederei anche al candidato di spiegare il funzionamento del codice. Non possono alzarsi semplicemente copiando la mia risposta sopra! :-P
Chris Jester-Young il

10

Volevo una domanda su FizzBuzz che non coinvolgesse l'operatore modulo. Soprattutto perché di solito intervisto gli sviluppatori web per i quali l'operatore modulo non viene fuori così spesso. E se non è qualcosa in cui ti imbatti regolarmente, è una di quelle cose che cerchi le poche volte che ne hai bisogno.

(Certo, è un concetto che, idealmente, dovresti aver incontrato in un corso di matematica da qualche parte lungo il percorso, ma questo è un argomento diverso.)

Quindi, quello che mi è venuto in mente è quello che chiamo, senza fantasia, Threes in Reverse . L'istruzione è:

Scrivi un programma che stampa, in ordine inverso , ogni multiplo di 3 compreso tra 1 e 200.

Farlo in ordine normale è facile: moltiplica l'indice del ciclo per 3 fino a raggiungere un numero che supera 200, quindi esci. Non devi preoccuparti di quante iterazioni terminare dopo, vai avanti finché non raggiungi il primo valore troppo alto.

Ma andando indietro, devi sapere da dove iniziare. Alcuni potrebbero realizzare intuitivamente che 198 (3 * 66) è il multiplo più alto di 3 e, come tale, codifica 66 nel ciclo. Altri potrebbero usare un'operazione matematica (divisione intera o floor () su una divisione in virgola mobile di 200 e 3) per calcolare quel numero e, così facendo, fornire qualcosa di più genericamente applicabile.

Essenzialmente, è lo stesso tipo di problema di FizzBuzz (scorrere i valori e stamparli, con una svolta). Questo è un problema da risolvere che non usa nulla di così (relativamente) esoterico come l'operazione modulo.


2
Sono curioso Legion: come fanno i tuoi sviluppatori web a fare cose come la barra verde / righe alternate senza modulo?
Andrew Burns

4
Bene, se stai solo cercando di applicare gli stili a righe alternate, utilizzando il selettore n-esimo figlio di CSS3. jQuery ha anche selettori alternati per fare queste cose tramite JS. Ma parlando del tuo punto più ampio, come ho detto sopra, è qualcosa che viene cercato, utilizzato e poi rapidamente dimenticato perché ci sono voluti tutti i 15 secondi per trovarlo. Non sto dicendo che mi piaccia o approvo, ma soprattutto a livello di ingresso, succede. :)
Legion

1
ecco la mia soluzione php :) ideone.com/BnJQ3 3 minuti :)
Trufa

Deve essere più difficile nei linguaggi di livello inferiore, perché in Ruby è facile come inserire i numeri (in ordine) in un array, quindi invertire l'intero array. ideone.com/MKKb6
Kerrick

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

8

Fibonacci, invertire una stringa, contare il numero di bit impostati in un byte sono altri comuni. Project Euler ha anche una vasta collezione di difficoltà crescente.


Fibonaaci, anche se un po 'più avanzato, è carino, sono un principiante completo e mi ci sono voluti 20-25 minuti quindi c'è il tuo riferimento :)
Trufa

Sono stato colpito da Fibonacci, FizzBuzz e rimuovo interi duplicati in un array - tutto oggi in un'intervista (4 ore)
IAbstract

8

Per qualcosa di veramente super semplice che può essere fatto in 10 secondi, ma rimuoverebbe quelle persone che letteralmente non possono programmare nulla , prova questo:

Chiedi: mostrami (sulla carta, ma meglio su una lavagna) come scambieresti i valori di due variabili.

Non è stata una mia idea, ma è stata pubblicata in un commento da qualcuno di nome Jacob in un post del blog sulla domanda originale di FizzBuzz.

Jacob prosegue dicendo:

Se non iniziano con la creazione di una terza variabile, puoi praticamente cancellare quella persona. Ho scoperto che posso tagliare da un terzo alla metà dei miei candidati (devo ammetterlo a quel punto non selezionati) con quella domanda da sola.

C'è un'altra discussione interessante dopo quel commento sul post del blog originale sui modi per eseguire questo scambio di variabili senza richiedere una terza variabile (aggiunta / sottrazione, xor ecc.) E, naturalmente, se stai usando un linguaggio che lo supporta in una singola istruzione / operazione, potrebbe non essere un buon test.

Anche se non è una mia idea, volevo postarla qui perché è una domanda così semplice ed elegante a cui può (e dovrebbe) trovare risposta entro circa 10 secondi da qualcuno che ha scritto anche il più semplice dei programmi. Inoltre non richiede l'uso di operatori in qualche modo apparentemente oscuri come l'operatore modulo, che molte persone, che altrimenti sono programmatori abbastanza decenti, semplicemente non hanno familiarità (cosa che conosco per esperienza personale).


1
Penso che questa sia un'ottima idea. Certamente è meglio stare seduti per 20 minuti a guardare mentre un candidato esegue dolorosamente il debug di un programma chiedendosi perché ha usato foreach invece di for e come risolverlo! (Come ho appena fatto)
mike nelson

std :: swap (a, b); Perché dovrei ho creare una terza variabile, quando quasi ogni libreria standard mai sarà lieto di farlo per me?

@ Dan - L'idea è che ti venga chiesto di farlo senza utilizzare alcuna libreria e utilizzando solo le parole chiave integrate nella lingua che preferisci . Certo, nel mondo reale puoi usare una routine di libreria per ottenere ciò, come usare una routine di libreria per (diciamo) una struttura di elenchi collegati piuttosto che scrivere la tua. Il punto di questo test è che è sufficientemente semplice e non escluso aspettarsi che un candidato sia in grado di farlo senza dover ricorrere a una biblioteca per ottenerlo.
CraigTP

Quindi Jacob suggerisce all'intervistato di usare una terza variabile o no? Ho visto alternative a quella domanda in cui si chiede allo sviluppatore di non utilizzare una terza variabile. Il modo in cui ha formulato la sua risposta è piuttosto ambiguo.
theGreenCabbage

1
Come qualcuno che pensa di essere solo un programmatore "a posto", questo mi ha spaventato. Il mio pensiero immediato è stato "Caro Dio, userei una terza variabile ma sicuramente vuole un modo intelligente di farlo senza uno!"
Devil's Advocate

4

Chiedi loro di scrivere un'app per restituire i fattori di un dato numero. È facile e difficile da fare bene in un breve periodo di tempo. Puoi vedere il loro stile e il modo in cui pensano ai problemi in un breve lasso di tempo.


2

Restituisce l'indice della prima occorrenza della stringa X all'interno della stringa Y

L'implementazione di strstr () richiede una conoscenza di base del linguaggio fornendo al contempo l'opportunità di un'ottimizzazione intelligente.


2

Se è un'intervista C / C ++ assicurati che la persona conosca i puntatori.

Generale - algoritmo semplice ([singolo / doppio] elenco collegato). Chiedere la complessità dell'aggiunta in ogni caso (all'inizio, alla fine, ottimizzazioni ...)?

(Generale) Come trovi il minimo e il massimo da un array (dimensione N) con soli 3 * N / 2 confronti?

C / C ++: come ottimizzereste più "strcat" in un buffer?


Mi sembra che per il problema "Come trovi il minimo e il massimo da un array (dimensione N) con soli 3 * N / 2 confronti?" è bene chiarire che il numero 3 * N / 2 è un numero di confronto di elementi di array, ma puoi confrontare int liberamente per esempio. ad esempio (i <dimensione dell'array) nei cicli.
sergtk


0

Che ne dici: voglio usare un singolo numero intero per memorizzare più valori. Descrivi come funzionerebbe.

Se non hanno la più pallida idea delle maschere di bit e delle operazioni, probabilmente non possono risolvere altri problemi.


9
Direi che è più istruttivo se, dopo aver spiegato o indicato le maschere, la persona non si schiaffeggia la fronte e scuote la testa per autoironia. Le maschere di bit non sono un idioma comune, a meno che non si facciano C, dispositivi incorporati o reti. Molte persone di talento non l'hanno fatto.
Gregg Lind,

2
Hmm, allora devi decidere se accettare la memorizzazione di 1,2 e 3 in 123 decimali conta come una risposta corretta, anche se la matematica sarebbe orribilmente complicata rispetto alla semplice dichiarazione di 3 variabili. Oppure memorizzare 1,2,3 scrivendo x = 1; x = 2; x = 3; Voglio dire, dobbiamo memorizzare questi valori contemporaneamente?
MatthewMartin

0

Trovare un elenco di numeri primi è una domanda abbastanza comune, ma richiede comunque un po 'di riflessione e ci sono vari gradi di risposte che le persone potrebbero dare.

Saresti anche sorpreso di quante persone faticano a implementare una struttura dati di tipo Mappa / Dizionario.


0

Ho chiesto ai miei candidati di creare un programma per calcolare il fattoriale di un dato numero in qualsiasi pseudo linguaggio di loro scelta. È un problema abbastanza facile da risolvere e si presta bene alle domande di follow-up naturali (che potrebbero essere poste spesso) sulla ricorsione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.