Alternative FizzBuzz-Fragen [geschlossen]


88

Hat jemand gute Fragen vom Typ FizzBuzz, die nicht das FizzBuzz-Problem sind?

Ich interviewe jemanden und FB ist relativ bekannt und nicht so schwer zu merken, also ist meine erste Station bei der Suche nach Ideen meine neue Sucht SO.

Antworten:


103

Ich habe eine kleine Liste relativ einfacher Programmierprobleme gesehen, mit denen Kandidaten ausgesondert werden, genau wie bei FizzBuzz. Hier sind einige der Probleme, die ich gesehen habe, in der Reihenfolge der zunehmenden Schwierigkeit:

  1. Eine Zeichenfolge umkehren
  2. Umkehren eines Satzes ("Bob mag Hunde" -> "Hunde mögen Bob")
  3. Suchen Sie den Mindestwert in einer Liste
  4. Finden Sie den Maximalwert in einer Liste
  5. Berechnen Sie einen Rest (mit Zähler und Nenner)
  6. Geben Sie unterschiedliche Werte aus einer Liste mit Duplikaten zurück (z. B. "1 3 5 3 7 3 1 1 5" -> "1 3 5 7").
  7. Geben Sie unterschiedliche Werte und deren Anzahl zurück (dh die obige Liste wird zu "1 (3) 3 (3) 5 (2) 7 (1)").
  8. Bei einer gegebenen Folge von Ausdrücken (nur Variablen, + und -) und einer Menge von Variablen / Wert-Paaren (dh a = 1, b = 7, c = 3, d = 14) wird das Ergebnis des Ausdrucks ("a +" zurückgegeben b + c -d "wäre -3).

Diese waren für Java und Sie konnten die Standardbibliotheken verwenden, so dass einige von ihnen extrem einfach sein können (wie 6). Aber sie funktionieren wie FizzBuzz. Wenn Sie eine Ahnung von der Programmierung haben, sollten Sie dies am schnellsten tun können. Auch wenn Sie die Sprache nicht gut kennen, sollten Sie zumindest in der Lage sein, die Idee zu vermitteln, wie man etwas macht.

Mit diesem Test sah einer meiner vorherigen Chefs alles, von Leuten, die alles ziemlich schnell geschafft hatten, über Leute, die es am schnellsten konnten, bis zu einem Mann, der nach einer halben Stunde keinen einzigen beantworten konnte.

Ich sollte auch beachten: Er ließ die Leute seinen Computer benutzen, während sie diese Aufgaben erhielten. Sie wurden speziell angewiesen , dass sie könnten Google und dergleichen verwenden.


Würde für Punkt 8 eine auf JSR-223 (javax.script) basierende Lösung akzeptiert? :-P (Zugegeben, die Verwendung davon ist völlig übertrieben, aber einige Leute würden das lieber tun, als beispielsweise java.util.Scanner zu verwenden.)
Chris Jester-Young

4
Das entspricht nicht meiner Vorstellung vom Geist der Frage, aber wenn Sie genug wissen, um dies vorzuschlagen, dann wissen Sie sicherlich genug, um die FizzBuzz-Fragen zu bestehen, sodass ich es Ihnen nicht vorenthalten würde. Es kann sogar ein Plus für Sie sein. Ich würde wahrscheinlich immer noch fragen, wie Sie es ohne javax.script machen würden.
MBCook

3
Ich habe Ihre Antwort eine Weile gelesen und konnte nicht herausfinden, was los war, warum es mir nicht gefallen hat. Die Sache ist, dass Ihre Fragen keinen Spaß beim Codieren machen :) (was in Ordnung ist, da dies beabsichtigt war für Interviews). Dieser Kommentar hat keinen wirklichen Sinn, wollte ihn aber nur aus meinem System entfernen. :) Entschuldigung für alle Smileys
Trufa

1
Ich würde gerne Beispiellösungen für Nummer 8 sehen. Die ersten 7 sind ein Kinderspiel, aber 8 (für mich) scheint im Vergleich zu den anderen etwas komplizierter zu sein. Ich arbeite es in Python 3.x aus und es ist ein ganz anderes Spiel. Wahrscheinlich nur etwas, von dem ich nichts weiß.
DonutSteve

31

Vielleicht beantwortet dies Ihre Frage nicht direkt, aber ich bin nicht sicher, ob Sie sich ein anderes Problem einfallen lassen müssen. Die FizzBuzz-Frage ist nicht nur "leicht zu merken", sondern auch einfach "leicht", und genau darum geht es. Wenn sich die Person, die Sie interviewen, in der Klasse der Personen befindet, für die FizzBuzz "bekannt" ist, gehört sie zur Klasse der Personen, die eine Frage vom Typ FizzBuzz nicht herausfiltern würde. Das bedeutet nicht, dass Sie sie vor Ort einstellen, aber es bedeutet, dass sie in der Lage sein sollten, sich durch das Interview zu bewegen.

Anders ausgedrückt, jeder, der sich die Zeit nimmt, Coding Horror zu lesen, ist es wert, weiter interviewt zu werden. Lassen Sie sie die Lösung einfach sehr schnell aufschreiben, sie kurz besprechen (z. B. Wie testen Sie das?) Und dann mit der nächsten Frage fortfahren. Und wie der Artikel sagt: "Es ist wirklich erstaunlich, wie viele Kandidaten nicht in der Lage sind, die einfachsten Programmieraufgaben zu erledigen."


7
Gute Antwort. "FizzBuzz ist einfach und das ist der Punkt ... jeder, der sich die Zeit nimmt, Coding Horror zu lesen, ist es wert, weiter interviewt zu werden" QFT. Ich frage oft Kandidaten: "Wohin gehen Sie, um etwas über Programmierung zu lesen?" Ich bin immer wieder überrascht, wie viele Leute nicht in der Lage sind, einen einzelnen Blog, eine Website oder ein Buch zu erwähnen.
Noah Sussman

1
Ich bin nicht einverstanden. Wir haben letzte Woche jemanden interviewt und ihn nach Nummer 3 der akzeptierten Antwort gefragt. Sie sagten buchstäblich "Oh, ich hatte Fizzbuzz erwartet" und konnten dann unsere Frage nicht beantworten.
frandroid

23

Jeder der frühen von Project Euler wäre wahrscheinlich gut.

Beispielsweise:

Problem 25

Die Fibonacci-Sequenz wird durch die Wiederholungsrelation definiert:

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

Daher werden die ersten 12 Begriffe sein:

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

Der 12. Term, F12, ist der erste Term, der drei Ziffern enthält.

Was ist der Index des ersten Terms in der Fibonacci-Sequenz, der 1000 Stellen enthält?


14

Ich habe festgestellt, dass das Überprüfen einer Zeichenfolge, ob es sich um ein Palindrom handelt, ziemlich einfach ist und ein anständiger Jäger sein kann.


Ich würde sagen, das hängt von der Sprache ab. In C könnte es interessant sein, in Perl ist es erledigt scalar(reverse 'foo') == 'foo'.
jkramer

3
stimmt, aber gleichzeitig ist es wertvoll, die einfachere Lösung zu sehen ... dann sagen Sie: "Okay, tun Sie jetzt so, als hätten Sie nicht die umgekehrte Funktion."
Mike Stone

1
In C ++ würde ich Bonuspunkte für alle "funktionalen" Lösungen vergeben, die keine handgeschriebene Schleife beinhalten. zB "return gleich (str.begin (), str.end (), str.rbegin ());" oder (für Geschwindigkeitsfreaks) "return gleich (str.begin (), str.begin () + str.size () / 2, str.rbegin ());"
Chris Jester-Young

1
Wenn ich eine solche Antwort sehe, möchte ich den Kandidaten natürlich auch bitten, die Funktionsweise des Codes zu erläutern. Sie können kein Bein hochlegen, indem sie meine Antwort oben kopieren! :-P
Chris Jester-Young

10

Ich wollte eine FizzBuzz-Frage, an der der Modulo-Operator nicht beteiligt ist. Zumal ich normalerweise Webentwickler interviewe, für die der Modulo-Operator einfach nicht so oft auftaucht. Und wenn es nicht etwas ist, auf das Sie regelmäßig stoßen, ist es eines dieser Dinge, die Sie die wenigen Male nachschlagen, wenn Sie es brauchen.

(Zugegeben, es ist ein Konzept, das Sie im Idealfall irgendwo auf dem Weg in einem Mathematikkurs kennengelernt haben sollten, aber das ist ein anderes Thema.)

Also, was ich mir ausgedacht habe, ist das, was ich einfallslos Threes in Reverse nenne . Die Anweisung lautet:

Schreiben Sie ein Programm, das in umgekehrter Reihenfolge jedes Vielfache von 3 zwischen 1 und 200 ausgibt.

Machen Sie es einfach in normaler Reihenfolge: Multiplizieren Sie den Schleifenindex mit 3, bis Sie eine Zahl erreichen, die 200 überschreitet, und beenden Sie dann. Sie müssen sich keine Gedanken darüber machen, wie viele Iterationen danach beendet werden sollen. Sie müssen einfach weitermachen, bis Sie den ersten Wert erreicht haben, der zu hoch ist.

Aber wenn man rückwärts geht, muss man wissen, wo man anfangen soll. Einige könnten intuitiv erkennen, dass 198 (3 * 66) das höchste Vielfache von 3 ist, und als solches Hardcode 66 in die Schleife. Andere verwenden möglicherweise eine mathematische Operation (Integer Division oder Floor () für eine Gleitkommadivision von 200 und 3), um diese Zahl zu ermitteln, und stellen dabei etwas allgemeiner Anwendbares bereit.

Im Wesentlichen ist es das gleiche Problem wie bei FizzBuzz (Durchlaufen von Werten und Ausdrucken mit einem Dreh). Dieses Problem ist zu lösen und verwendet nichts, was so (relativ) esoterisch ist wie die Modulo-Operation.


2
Ich bin neugierig Legion: Wie machen Ihre Webentwickler Dinge wie Green-Barring / alternative Zeilen ohne Modulo?
Andrew Burns

4
Wenn Sie nur versuchen, Stile auf abwechselnde Zeilen anzuwenden, verwenden Sie den n-ten untergeordneten Selektor von CSS3. jQuery hat auch alternierende Selektoren, um solche Dinge über JS zu erledigen. Aber wenn ich zu Ihrem größeren Punkt spreche, wie ich oben sagte, wird er nachgeschlagen, verwendet und dann schnell vergessen, da es 15 Sekunden gedauert hat, ihn zu finden. Ich sage nicht, dass ich es mag oder gutheiße, aber besonders im Einstiegsbereich passiert es. :)
Legion

1
Hier ist meine PHP-Lösung :) ideone.com/BnJQ3 3 Minuten :)
Trufa

In untergeordneten Sprachen muss es schwieriger sein, da es in Ruby so einfach ist, die Zahlen (in der richtigen Reihenfolge) in ein Array zu verschieben und dann das gesamte Array umzukehren. ideone.com/MKKb6
Kerrick

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

8

Fibonacci, eine Zeichenfolge umkehren, die Anzahl der in einem Byte gesetzten Bits zählen, sind andere gebräuchliche. Das Projekt Euler hat auch eine große Sammlung von zunehmenden Schwierigkeiten.


Fibonaaci, obwohl etwas fortgeschrittener, ist ein netter, ich bin ein absoluter Neuling und es hat 20-25 Minuten gedauert, also gibt es deine Referenz :)
Trufa

Ich wurde mit Fibonacci, FizzBuzz, getroffen und entfernte doppelte Ganzzahlen in einem Array - alles heute in einem Interview (4 Stunden)
IAbstract

8

Für etwas wirklich Super-Einfaches, das in 10 Sekunden erledigt werden kann, aber diejenigen Leute entfernen würde, die buchstäblich nichts programmieren können , versuchen Sie Folgendes:

Fragen Sie: Zeigen Sie mir (auf Papier, aber besser auf einem Whiteboard), wie Sie die Werte zweier Variablen austauschen würden.

Dies war nicht meine Idee, wurde aber in einem Kommentar von jemandem namens Jacob in einem Blog-Beitrag über die ursprüngliche FizzBuzz-Frage veröffentlicht.

Jacob fährt fort:

Wenn sie nicht starten können, eine dritte Variable mit dem Erstellen Sie ziemlich viel schreiben , der Person aus. Ich habe festgestellt, dass ich allein mit dieser Frage ein Drittel bis die Hälfte meiner (zu diesem Zeitpunkt noch nicht geprüften) Bewerber abschneiden kann.

Nach diesem Kommentar im ursprünglichen Blog-Beitrag gibt es eine weitere interessante Diskussion darüber, wie dieser Variablentausch durchgeführt werden kann, ohne dass eine dritte Variable erforderlich ist (Addieren / Subtrahieren, xor usw.), und natürlich, wenn Sie eine Sprache verwenden, die dies unterstützt In einer einzelnen Anweisung / Operation ist dies möglicherweise kein so guter Test.

Obwohl dies nicht meine Idee war, wollte ich dies hier posten, da es sich um eine so elegant einfache Frage handelt, die innerhalb von etwa 10 Sekunden von jemandem beantwortet werden kann (und sollte), der selbst die einfachsten Programme geschrieben hat. Es erfordert auch nicht die Verwendung von etwas scheinbar obskuren Operatoren wie dem Modulo-Operator, mit denen viele Leute, die ansonsten ziemlich anständige Programmierer sind, einfach nicht vertraut sind (was ich aus meiner eigenen Erfahrung kenne).


1
Ich denke, das ist eine sehr gute Idee. Es ist sicherlich besser, 20 Minuten herumzusitzen und zuzusehen, während ein Kandidat ein Programm schmerzhaft debuggt und sich fragt, warum er foreach anstelle von for verwendet hat und wie man es behebt! (Wie ich gerade getan habe)
Mike Nelson

std :: swap (a, b); Warum sollte ich eine dritte Variable erstellen, wenn fast jede Standardbibliothek dies jemals gerne für mich erledigt?

@Dan - Die Idee ist, dass Sie dazu aufgefordert werden, ohne Bibliotheken zu verwenden und nur die integrierten Schlüsselwörter in der Sprache Ihrer Wahl zu verwenden. Sicher, in der realen Welt können Sie eine Bibliotheksroutine verwenden, um dies zu erreichen, genauso wie Sie eine Bibliotheksroutine für (sagen wir) eine verknüpfte Listenstruktur verwenden, anstatt Ihre eigene zu schreiben. Der Punkt dieses Tests ist , dass es einfach genug ist und nicht aus der Frage zu erwarten , jeder Kandidaten in der Lage sein , es zu tun , ohne um eine Bibliothek zu greifen , es zu erreichen.
CraigTP

Schlägt Jacob dem Befragten vor, eine dritte Variable zu verwenden, oder nein? Ich habe Alternativen zu dieser Frage gesehen, bei der der Entwickler aufgefordert wird, keine dritte Variable zu verwenden. Die Art und Weise, wie er seine Antwort formulierte, ist ziemlich zweideutig.
TheGreenCabbage

1
Als jemand, der glaubt, nur ein "okay" -Programmierer zu sein, hat mich das erschreckt. Mein unmittelbarer Gedanke war: "Lieber Gott, ich würde eine dritte Variable verwenden, aber er möchte sicherlich eine clevere Möglichkeit, dies ohne eine zu tun!"
Devil's Advocate

4

Bitten Sie sie, eine App zu schreiben, um die Faktoren einer bestimmten Zahl zurückzugeben. Es ist einfach und in kurzer Zeit schwer, es gut zu machen. Sie können ihren Stil und die Art und Weise, wie sie Probleme durchdenken, in kurzer Zeit sehen.


2

Gibt den Index des ersten Vorkommens von Zeichenfolge X innerhalb von Zeichenfolge Y zurück

Die Implementierung von strstr () erfordert ein grundlegendes Verständnis der Sprache und bietet gleichzeitig die Möglichkeit zur cleveren Optimierung.


2

Wenn es sich um ein C / C ++ - Interview handelt, stellen Sie sicher, dass die Person über Zeiger Bescheid weiß.

Allgemein - einfacher Algorithmus ([einfach / doppelt] verknüpfte Liste). Fragen Sie nach der Komplexität des Hinzufügens in jedem Fall (am Anfang, am Ende, Optimierungen ...)?

(Allgemein) Wie finden Sie Min und Max aus einem Array (N-Größe) mit nur 3 * N / 2 Vergleichen?

C / C ++: Wie würden Sie mehrere "strcat" für einen Puffer optimieren?


Es scheint mir, dass für das Problem "Wie finden Sie Min und Max aus einem Array (N-Größe) mit nur 3 * N / 2 Vergleichen?" Es ist gut zu verdeutlichen, dass Nummer 3 * N / 2 eine Anzahl von Vergleichen von Elementen des Arrays ist, aber Sie können int zum Beispiel frei vergleichen. zB (i <Arraygröße) in Schleifen.
Sergtk


0

Wie wäre es: Ich möchte eine einzelne Ganzzahl verwenden, um mehrere Werte zu speichern. Beschreiben Sie, wie das funktionieren würde.

Wenn sie keine Ahnung von Bitmasken und Operationen haben, können sie wahrscheinlich keine anderen Probleme lösen.


9
Ich würde sagen, es ist lehrreicher, wenn nach dem Erklären oder Aufzeigen von Bitmasken die Person nicht auf die Stirn schlägt und ihren Kopf in Selbstironie schüttelt. Bitmasken sind keine gängige Redewendung, es sei denn, man verwendet C, eingebettete Geräte oder Netzwerke. Viele talentierte Leute haben es nicht.
Gregg Lind

2
Hmm, dann müssen Sie entscheiden, ob das Speichern von 1,2 und 3 in Dezimalzahl 123 als richtige Antwort gilt, obwohl die Mathematik hässlich kompliziert wäre, wenn Sie nur 3 Variablen deklarieren würden. Oder Speichern von 1,2,3 durch Schreiben von x = 1; x = 2; x = 3; Müssen wir diese Werte gleichzeitig speichern?
Matthew

0

Das Auffinden einer Liste von Primzahlen ist eine ziemlich häufige Frage, erfordert jedoch noch einige Überlegungen und es gibt unterschiedliche Grade an Antworten, die Menschen möglicherweise geben.

Sie wären auch überrascht, wie viele Menschen Schwierigkeiten haben, eine Datenstruktur vom Typ Map / Dictionary zu implementieren.


0

Ich habe meine Kandidaten gebeten, ein Programm zur Berechnung der Fakultät einer bestimmten Zahl in einer Pseudosprache ihrer Wahl zu erstellen . Es ist ein ziemlich leicht zu lösendes Problem und eignet sich gut für die natürlichen Nachfragen (die oft gestellt werden könnten) zur Rekursion.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.