FizzBu​​zzの代替質問[終了]


88

FizzBu​​zzの問題ではない良いFizzBu​​zzタイプの質問がありますか?

私は誰かにインタビューしています。FBは比較的よく知られていて、覚えるのはそれほど難しくありません。そのため、アイデアの検索で最初にやめたのは、私の新しい中毒SOです。

回答:


103

FizzBu​​zzのように、候補を除外するために使用される比較的単純なプログラミング問題の小さなリストを見ました。ここに私が見たいくつかの問題を難易度の高い順に示します。

  1. 文字列を逆にする
  2. 文を逆にします( "bob like dogs"-> "dogs likes bob")
  3. リストから最小値を見つける
  4. リストの最大値を見つける
  5. 剰余を計算する(分子と分母が与えられた場合)
  6. 重複を含むリストから個別の値を返します(つまり、「1 3 5 3 7 3 1 1 5」->「1 3 5 7」)
  7. 個別の値とその数を返します(つまり、上記のリストは「1(3)3(3)5(2)7(1)」になります)
  8. 式の文字列(変数、+、および-のみ)および変数と値のペアのセット(つまり、a = 1、b = 7、c = 3、d = 14)を指定すると、式( "a + b + c -d "は-3)になります。

これらはJava用であり、標準ライブラリを使用できるため、それらの一部は非常に簡単です(6など)。ただし、FizzBu​​zzのように機能します。あなたがプログラミングについての手がかりを持っているなら、あなたはほとんどかなり速く行うことができるはずです。言語をよく知らない場合でも、少なくとも何かを行う方法の背後にある考えを与えることができるはずです。

このテストを使用して、私の前のボスの1人は、すべてを非常に迅速に実行した人から、非常に迅速に実行できる人、30分後に1つに答えられなかった1人の男まで、すべてを見ました。

また、注意が必要です。彼は、これらのタスクが与えられている間、人々に自分のコンピューターを使用させました。彼らはグーグルなどを使うことができると明確に指示された。


項目8について、JSR-223(javax.script)に基づくソリューションは受け入れられますか?:-P(確かにそれを使用することは完全に過剰ですが、一部の人々は、たとえば、java.util.Scannerを使用するよりもむしろそれを実行することを望んでいます。)
Chris Jester-Young

4
それは私の質問の精神についての私の考えの範囲外ですが、あなたがそれを提案するのに十分知っているなら、あなたは確かにFizzBu​​zzの質問に合格するのに十分知っているので、私はあなたに対してそれを保持しません。それはあなたの好意でさえプラスかもしれません。私はまだjavax.scriptなしでどうやってそれをするのかと尋ねるでしょう。
MBCook 2009年

3
私はしばらくあなたの答えを読んでいて、何が起こっているのか理解できませんでした、なぜ私はそれが好きではなかったのですか、問題はあなたの質問がコード化するのが楽しくないことです:)(これは意図されていたので大丈夫です)インタビュー用)。このコメントに本当の意味はありませんが、私のシステムからそれを取り出したかっただけです。:)すべてのスマイリーをごめんなさい
23:01にTrufa

1
番号8のサンプルソリューションを見たいと思います。最初の7は簡単ですが、8(私にとって)は残りの部分に比べて少し複雑に見えます。私はそれをPython 3.xで試しているのですが、まったく別のゲームです。たぶん私が気づいていない何かだけです。
DonutSteve

31

多分これはあなたの質問に直接答えませんが、私はあなたが別の問題を思い付く必要があるかどうか確信がありません。「覚えるのが簡単」であることに加えて、FizzBu​​zzの質問は単なる「簡単」であり、それがポイントです。あなたがインタビューしている人がFizzBu​​zzが「よく知られている」人々のクラスにいるなら、それらはFizzBu​​zzタイプの質問が除外しない人々のクラスにいます。それはあなたがその場で彼らを雇うことを意味するのではありませんが、彼らがそれを通り抜けて面接の肉に乗り込むことができるはずであることを意味します。

別の言い方をすれば、コーディングホラーを読むのに時間がかかる人は誰でも、さらにインタビューする価値があります。すぐにソリューションを書いてもらい、簡単に話し合って(たとえば、これをどのようにテストしますか?)、次の質問に進みます。そして記事が言うように、「最も単純なプログラミングタスクを実行できない候補者の数が本当に驚くべきことです。」


7
すばらしい答えです。「FizzBu​​zzは簡単で、それがポイントです... Coding Horrorを読むのに時間をかける人は誰でも、さらにインタビューする価値があります」QFT。「プログラミングについてどこで読みますか?」どれだけの人が1つのブログ、Webサイト、または本に言及できないのかといつも驚きます。
Noah Sussman

1
同意しません。私たちは先週誰かにインタビューし、受け入れられた答えから#3を尋ねました。彼らは文字通り「ああ、私はfizzbuzzを期待していました」と言って、それから私たちの質問に答えることができませんでした。
frandroid

23

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は、3桁の最初の用語です。

1000桁を含むフィボナッチ数列の最初の項のインデックスは何ですか?


14

文字列が回文かどうかをチェックするのは、かなりシンプルなものでかなりシンプルなものであることがわかりました。


言語によると思います。Cでは興味深いかもしれませんが、Perlではで行われscalar(reverse 'foo') == 'foo'ます。
jkramer 2008

3
確かに、しかし同時に、より簡単なソリューションを見ることができることは価値があります...そして、あなたは「わかりました、今、あなたはリバース機能を持っていないふりをします」と言います。
マイクストーン

1
C ++では、手書きのループを含まない「機能的な」ソリューションにはボーナスポイントを与えます。例:「return equal(str.begin()、str.end()、str.rbegin());」または(スピードフリークの場合) "return equal(str.begin()、str.begin()+ str.size()/ 2、str.rbegin());"
Chris Jester-Young

1
もちろん、そのような答えが出たら、候補者にもコードの仕組みを説明してもらいます。上記の私の答えをコピーするだけでは、彼らは足を伸ばすことができません!:-P
クリスジェスター-ヤング

10

モジュロ演算子を含まないFizzBu​​zzの質問が必要でした。特に私は通常、モジュロ演算子があまり頻繁に出てこないWeb開発者にインタビューしているためです。そして、それが定期的に遭遇するものではない場合、それはあなたがそれを必要とする数回調べているものの一つです。

(確かに、それは理想的には途中で数学のコースに出会うべきであるという概念ですが、それは別のトピックです。)

だから、私が思いついたのは、想像を超えてスリーズインリバースです。手順は次のとおりです。

1から200までの3の倍数ごとに、逆の順序で出力するプログラムを記述します。

通常の順序でそれを行うのは簡単です。ループインデックスに3を掛けて、200を超える数値に到達したら、終了します。終了する反復の数を心配する必要はありません。高すぎる最初の値に到達するまで続けるだけです。

しかし、逆に言えば、どこから始めればよいかを知る必要があります。198(3 * 66)は3の最高の倍数であるため、66をループにハードコードすることを直感的に理解する人もいます。他の人は、数学的演算(整数除算または200と3の浮動小数点除算のfloor())を使用してその数を計算し、そうすることで、より一般的に適用できるものを提供します。

基本的に、それはFizzBu​​zzと同じ種類の問題です(値をループして、ひねりを加えて出力します)。これは解決すべき問題であり、モジュロ演算として(比較的)難解なものをまったく使用しません。


2
私はレギオンに興味があります:あなたのウェブ開発者はどのようにモジュロなしで緑の禁止/代替行のようなことをしますか?
Andrew Burns

4
まあ、CSS3のn番目の子セレクターを使用して、スタイルを交互の行に適用しようとしているだけの場合。jQueryには、JSを介してこのようなことを行うための代替セレクターもあります。しかし、上で述べたように、より大きなポイントで言えば、それは調べられて使用され、15秒すべてを見つけるのにかかったため、すぐに忘れられてしまうものです。気に入ったり承認したりしているわけではありませんが、特にエントリレベルでは発生します。:)
Legion

1
ここに私のphpソリューションがあります:) ideone.com/BnJQ3 3分:)
Trufa

Rubyでは数値を(順番に)配列にプッシュしてから配列全体を逆にするのと同じくらい簡単であるため、低レベル言語ではこれはより困難なはずです。ideone.com/MKKb6
ケリック

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

8

フィボナッチ、文字列の反転、バイトに設定されたビット数のカウントは、他の一般的なものです。 プロジェクトオイラーには、難易度が高くなるコレクションも多数あります。


Fibonaaciは少し高度ですが、素晴らしいものです。私は完全に初心者で、20〜25分かかったので、参照があります:)
Trufa

私はフィボナッチ、FizzBu​​zzに
遭遇

8

10秒でできる非常にシンプルなもので、文字通り何もプログラムできない人を削除する場合は、次のコードを試してください。

質問:2つの変数の値をどのように交換するか(紙では、しかしホワイトボードではより良い)を見せて

これは私の考えではありませんでしたが、元のFizzBu​​zz質問に関するブログ投稿の Jacobという名前の誰かのコメント投稿されました

ジェイコブは続けて言う:

彼らが3番目の変数の作成から始まっていない場合は、その人をほとんど書くことができます。私はその質問だけで私の(私は確かにその時点でスクリーニングされていない)応募者の3分の1から半分に削減できることを発見しました。

3番目の変数(加算/減算、xorなど)を必要とせずにこの変数スワッピングを実行する方法について、そしてもちろん、これをサポートする言語を使用している場合、元のブログ投稿のコメントの後にさらに興味深い議論があります単一のステートメント/操作では、それほど良いテストではないかもしれません。

私の考えではありませんが、これはとてもエレガントでシンプルで簡単な質問なので、ここに投稿したいと思います。これは、最も単純なプログラムでさえ書いた人なら10秒以内に答えることができるはずです。また、かなり適切なプログラマーである多くの人々が単純に馴染みのない(私自身の経験から知っています)、モジュロ演算子のように見かけ上不明な演算子を使用する必要もありません。


1
これは非常に良い考えだと思います。候補者がなぜforeachの代わりにforeachを使用したのか、そしてそれをどのように修正するのか疑問に思っているプログラムを苦痛にデバッグしている間、それは20分間座って見守っています。(先ほど行ったように)
マイクネルソン、2010

std :: swap(a、b); ほぼすべての標準ライブラリが喜んでそれを実行するのに、なぜ3番目の変数作成する必要があるのですか?

@ダン-これは、ライブラリを使用せずに、選択した言語の組み込みキーワードのみ使用してこれを行うように求められるという考え方です。確かに、現実の世界では、ライブラリルーチンを使用してこれを実現できます。これは、独自のライブラリルーチンを作成するのではなく、リンクリスト構造に(たとえば)ライブラリルーチンを使用するのと同じです。このテストの点は、それが期待に十分に単純ではない問題外だということですどの候補がなくてそれを行うことができるように必要、それを達成するために、ライブラリに頼ります。
CraigTP 2011

それで、ジェイコブはインタビュー対象者に3番目の変数を使用するように提案していますか?私は、開発者に3番目の変数を使用しないように要求するその質問の代替案を見てきました。彼の答えの言い方はかなり曖昧です。
theGreenCabbage 14

1
彼らは単に「大丈夫」なプログラマーだと思っている人として、これは私を怖がらせました。私の直近の考えは、「親愛なる神様、私は3番目の変数を使用しますが、確かに彼はそれなしでそれを行うための賢い方法を望んでいます!」
デビルズアドボケイト

4

与えられた数の因子を返すアプリを書くように彼らに頼んでください。それは簡単で、短期間でうまくやるのが難しいです。あなたは彼らのスタイルと彼らが問題を通して考えている方法を短時間で見ることができます。


2

文字列Y内の文字列Xの最初の出現のインデックスを返します

strstr()を実装するには、巧妙な最適化の機会を提供しながら、言語の基本的な理解が必要です。


2

C / C ++インタビューの場合は、その人がポインタについて知っていることを確認してください。

一般-単純なアルゴリズム([single / double] linkedリスト)。それぞれの場合の追加の複雑さについて質問します(最初、最後に、最適化...)?

(一般)ちょうど3 * N / 2の比較で配列(Nサイズ)から最小値と最大値をどのように見つけますか?

C / C ++:複数の "strcat"をどのようにバッファーに最適化しますか?


問題は「3 * N / 2の比較で配列(Nサイズ)から最小値と最大値をどのように見つけるのですか?」数3 * N / 2は配列の要素の比較数であることを明確にするとよいでしょうが、たとえばintは自由に比較できます。たとえば、ループ内の(i <配列サイズ)。
sergtk 2008年


0

方法:単一の整数を使用して複数の値を格納したい。それがどのように機能するかを説明してください。

ビットマスクと操作についての手掛かりがない場合は、おそらく他の問題を解決できません。


9
ビットマスクを説明したり、指摘したりした後、額をたたき、自嘲で首を振らないと、より有益です。C、組み込みデバイス、またはネットワーキングを行わない限り、ビットマスクは一般的なイディオムではありません。多くの才能ある人々はそうではありません。
グレッグリンド

2
ええと、1、2、3を10進数の123に格納することを正解と見なすかどうかを決定する必要があります。ただし、3つの変数を宣言するだけでは計算が複雑になってしまいます。または、x = 1と書いて1,2,3を保存します。x = 2; x = 3; つまり、これらの値を同時に保存する必要がありますか?
MatthewMartin 2009

0

素数のリストを見つけることはかなり一般的な質問ですが、それでもいくつかの考慮が必要であり、人々が与える可能性のある答えの程度はさまざまです。

また、Map / Dictionaryタイプのデータ構造の実装に多くの人々が苦労していることにも驚かれるでしょう。


0

私は候補者に、任意の疑似言語で任意の数の階乗を計算するプログラムを作成するように依頼しました。これはかなり簡単に解決できる問題であり、再帰に関する自然なフォローアップの質問(よく尋ねられることもあります)に役立ちます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.