Pertanyaan FizzBuzz Alternatif [ditutup]


88

Ada yang punya baik FizzBuzz pertanyaan jenis yang tidak pada masalah FizzBuzz?

Saya mewawancarai seseorang dan FB relatif terkenal dan tidak terlalu sulit untuk dihafal, jadi perhentian pertama saya dalam mencari ide adalah kecanduan baru saya.

Jawaban:


104

Saya telah melihat daftar kecil masalah pemrograman yang relatif sederhana yang digunakan untuk menyingkirkan kandidat, seperti FizzBuzz. Berikut adalah beberapa masalah yang saya lihat, dalam rangka meningkatkan kesulitan:

  1. Membalikkan string
  2. Membalik kalimat ("bob like dogs" -> "dogs like bob")
  3. Temukan nilai minimum dalam daftar
  4. Temukan nilai maksimum dalam daftar
  5. Hitung sisa (diberi pembilang dan penyebut)
  6. Kembalikan nilai yang berbeda dari daftar termasuk duplikat (yaitu "1 3 5 3 7 3 1 1 5" -> "1 3 5 7")
  7. Kembalikan nilai yang berbeda dan jumlahnya (yaitu daftar di atas menjadi "1 (3) 3 (3) 5 (2) 7 (1)")
  8. Diberikan string ekspresi (hanya variabel, +, dan -) dan satu set variabel / pasangan nilai (yaitu a = 1, b = 7, c = 3, d = 14) mengembalikan hasil ekspresi ("a + b + c -d "akan menjadi -3).

Ini untuk Java, dan Anda dapat menggunakan pustaka standar sehingga beberapa di antaranya bisa sangat mudah (seperti 6). Tapi mereka bekerja seperti FizzBuzz. Jika Anda memiliki petunjuk tentang pemrograman, Anda seharusnya dapat melakukannya dengan sangat cepat. Bahkan jika Anda tidak tahu bahasanya dengan baik, Anda setidaknya harus bisa memberikan ide di balik bagaimana melakukan sesuatu.

Dengan menggunakan tes ini, salah satu atasan saya sebelumnya melihat segalanya mulai dari orang-orang yang mengerjakan semuanya dengan sangat cepat, hingga orang-orang yang dapat melakukannya dengan sangat cepat, hingga satu orang yang tidak dapat menjawab satu pun setelah setengah jam.

Saya juga harus mencatat: dia membiarkan orang menggunakan komputernya saat mereka diberi tugas ini. Mereka secara khusus diinstruksikan bahwa mereka dapat menggunakan Google dan sejenisnya.


Untuk item 8, apakah solusi yang berdasarkan JSR-223 (javax.script) akan diterima? :-P (Memang penggunaan itu benar-benar berlebihan, tetapi beberapa orang lebih suka melakukannya daripada menggunakan, katakanlah, java.util.Scanner.)
Chris Jester-Young

4
Itu tidak sesuai dengan ide saya tentang semangat pertanyaannya, tetapi jika Anda cukup tahu untuk mengusulkannya, maka Anda pasti cukup tahu untuk lulus pertanyaan FizzBuzz, jadi saya tidak akan menentangnya. Bahkan mungkin menjadi nilai tambah bagi Anda. Saya mungkin masih bertanya bagaimana Anda akan melakukannya tanpa javax.script sekalipun.
MBCook

3
Saya telah membaca jawaban Anda untuk sementara waktu dan tidak tahu apa yang sedang terjadi, mengapa saya tidak menyukainya, masalahnya adalah pertanyaan Anda tidak menyenangkan untuk dikodekan :) (yang tidak masalah karena ini dimaksudkan untuk wawancara). Tidak ada maksud nyata untuk komentar ini tetapi hanya ingin mengeluarkannya dari sistem saya. :) maaf untuk semua smiley
Trufa

1
Ingin melihat solusi sampel untuk nomor 8. 7 yang pertama sangat mudah, tetapi 8 (bagi saya) tampaknya sedikit lebih rumit dibandingkan yang lain. Saya mengerjakannya dengan Python 3.x dan ini adalah permainan yang sama sekali berbeda. Mungkin hanya sesuatu yang tidak saya sadari.
DonutSteve

31

Mungkin ini tidak menjawab pertanyaan Anda secara langsung, tetapi saya tidak yakin Anda perlu mengajukan masalah lain. Selain "mudah diingat", pertanyaan FizzBuzz juga "mudah", dan itulah intinya. Jika orang yang Anda wawancarai termasuk dalam kelompok orang yang "terkenal" oleh FizzBuzz, mereka termasuk dalam kelompok orang yang pertanyaan jenis FizzBuzz tidak akan difilter. Itu tidak berarti bahwa Anda mempekerjakan mereka di tempat, tetapi itu berarti bahwa mereka harus dapat melewatinya dan melanjutkan wawancara.

Dengan kata lain, siapa pun yang meluangkan waktu untuk membaca Coding Horror layak untuk diwawancara lebih lanjut. Mintalah mereka menuliskan solusinya dengan sangat cepat, diskusikan dengan singkat (misalnya, Bagaimana Anda mengujinya?), Dan kemudian beralih ke pertanyaan berikutnya. Dan seperti yang dikatakan artikel tersebut, "sungguh mengherankan betapa banyak kandidat yang tidak mampu melakukan tugas pemrograman yang paling sederhana."


7
Jawaban yang bagus. "FizzBuzz itu mudah dan itulah intinya ... siapa pun yang meluangkan waktu untuk membaca Coding Horror layak untuk diwawancarai lebih lanjut" QFT. Saya sering bertanya kepada kandidat, "Di mana Anda bisa membaca tentang pemrograman?" Saya selalu terkejut betapa banyak orang yang tidak dapat menyebutkan satu pun blog, situs web, atau buku.
Noah Sussman

1
Saya tidak setuju. Kami mewawancarai seseorang minggu lalu, dan kami menanyakan mereka # 3 dari jawaban yang diterima. Mereka benar-benar berkata "oh, saya mengharapkan fizzbuzz" dan kemudian tidak dapat menjawab pertanyaan kami.
frandroid

23

Salah satu yang pertama dari Project Euler mungkin akan bagus.

Sebagai contoh:

Soal 25

Urutan Fibonacci ditentukan oleh relasi perulangan:

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

Oleh karena itu, 12 suku pertama adalah:

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

Suku ke-12, F12, adalah suku pertama yang terdiri dari tiga digit.

Berapa indeks dari suku pertama dalam deret Fibonacci yang mengandung 1000 digit?


14

Saya telah menemukan memeriksa string apakah itu palindrome adalah cara yang cukup sederhana yang bisa menjadi penyiang yang baik.


Saya akan mengatakan itu tergantung pada bahasanya. Di C itu bisa menarik, di Perl itu dilakukan dengan scalar(reverse 'foo') == 'foo'.
jkramer

3
benar, tetapi pada saat yang sama, dapat melihat solusi yang lebih sederhana itu berharga ... lalu Anda berkata, "oke, sekarang anggaplah Anda tidak memiliki fungsi kebalikan."
Mike Stone

1
Dalam C ++, saya akan memberikan poin bonus untuk setiap solusi "fungsional" yang tidak melibatkan pengulangan tulisan tangan. misalnya, "return equal (str.begin (), str.end (), str.rbegin ());" atau (untuk speed freaks) "return equal (str.begin (), str.begin () + str.size () / 2, str.rbegin ());"
Chris Jester-Young

1
Tentu saja, setelah melihat jawaban seperti itu, saya juga akan meminta kandidat untuk menjelaskan cara kerja kode. Mereka tidak bisa bangkit hanya dengan menyalin jawaban saya di atas! :-P
Chris Jester-Young

10

Saya menginginkan pertanyaan FizzBuzz yang tidak melibatkan operator modulo. Terutama karena saya biasanya mewawancarai pengembang web yang operator modulo tidak sering muncul. Dan jika itu bukan sesuatu yang Anda temui secara teratur, itu salah satu hal yang Anda cari beberapa kali Anda membutuhkannya.

(Memang, ini adalah konsep yang, idealnya, Anda temui dalam kursus matematika di suatu tempat, tapi itu topik yang berbeda.)

Jadi, yang saya temukan adalah apa yang saya sebut, tanpa imajinasi , Threes in Reverse . Instruksi adalah:

Tulis program yang mencetak, dalam urutan terbalik , setiap kelipatan 3 antara 1 dan 200.

Mudah melakukannya dalam urutan normal: kalikan indeks loop dengan 3 hingga Anda mencapai angka yang melebihi 200, lalu keluar. Anda tidak perlu khawatir tentang berapa banyak iterasi yang harus dihentikan setelahnya, Anda terus melakukannya hingga mencapai nilai pertama yang terlalu tinggi.

Tapi mundur ke belakang, Anda harus tahu harus mulai dari mana. Beberapa mungkin menyadari secara intuitif bahwa 198 (3 * 66) adalah kelipatan tertinggi dari 3, dan dengan demikian, kode keras 66 ke dalam loop. Orang lain mungkin menggunakan operasi matematika (pembagian integer atau floor () pada pembagian floating point 200 dan 3) untuk mengetahui angka itu, dan dengan melakukan itu, memberikan sesuatu yang lebih dapat diterapkan secara umum.

Pada dasarnya, ini adalah jenis masalah yang sama dengan FizzBuzz (mengulang nilai dan mencetaknya, dengan twist). Yang satu ini adalah masalah untuk dipecahkan yang tidak menggunakan sesuatu yang (relatif) esoterik seperti operasi modulo.


2
Saya penasaran Legiun: bagaimana pengembang web Anda melakukan hal-hal seperti baris penghalang hijau / alternatif tanpa modulo?
Andrew Burns

4
Nah, jika Anda hanya mencoba menerapkan gaya ke baris bergantian, dengan menggunakan pemilih anak ke-n CSS3. jQuery memiliki pemilih bergantian juga untuk melakukan hal-hal seperti itu melalui JS. Tetapi berbicara ke poin yang lebih besar, seperti yang saya katakan di atas, itu adalah sesuatu yang dicari, digunakan, dan kemudian dengan cepat dilupakan karena butuh 15 detik untuk menemukannya. Saya tidak mengatakan saya suka atau setuju, tetapi terutama di tingkat pemula, itu terjadi. :)
Legiun

1
ini solusi php saya :) ideone.com/BnJQ3 3 menit :)
Trufa

Ini pasti lebih sulit dalam bahasa level yang lebih rendah, karena di Ruby itu semudah memasukkan angka (secara berurutan) ke dalam sebuah array, lalu membalikkan seluruh array. ideone.com/MKKb6
Kerrick

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

9

Untuk sesuatu yang sangat sederhana yang dapat dilakukan dalam 10 detik, tetapi akan menghapus orang-orang yang benar-benar tidak dapat memprogram apa pun , coba yang ini:

Tanyakan: tunjukkan kepada saya (di atas kertas, tetapi lebih baik di papan tulis) bagaimana Anda akan menukar nilai dua variabel.

Ini bukan ideku, tapi diposting dalam komentar oleh seseorang bernama Jacob di postingan blog tentang pertanyaan asli FizzBuzz.

Yakub melanjutkan dengan mengatakan:

Jika mereka tidak memulai dengan membuat variabel ketiga, Anda dapat menghapus orang tersebut. Saya telah menemukan bahwa saya dapat memotong sepertiga hingga setengah pelamar saya (memang pada saat itu belum tersaring) dengan pertanyaan itu saja.

Ada pembahasan menarik lebih lanjut setelah itu mengomentari postingan blog asli tentang cara melakukan pertukaran variabel ini tanpa memerlukan variabel ketiga (menambah / mengurangi, xor dll), dan tentu saja, jika Anda menggunakan bahasa yang mendukung ini dalam satu pernyataan / operasi, ini mungkin bukan tes yang bagus.

Meskipun bukan ide saya, saya ingin memposting ini di sini karena ini adalah pertanyaan yang sangat sederhana dan mudah serta elegan yang dapat (dan harus) dijawab dalam waktu sekitar 10 detik oleh seseorang yang telah menulis program yang paling sederhana sekalipun. Ini juga tidak memerlukan penggunaan operator yang agak tidak jelas seperti operator modulo, yang banyak orang, yang merupakan programmer yang cukup baik, tidak terbiasa dengannya (yang saya tahu dari pengalaman saya sendiri).


1
Saya pikir ini adalah ide yang sangat bagus. Ini pasti mengalahkan duduk sekitar selama 20 menit menonton sementara seorang kandidat dengan susah payah men-debug program bertanya-tanya mengapa mereka menggunakan foreach daripada untuk dan bagaimana memperbaikinya! (Seperti yang baru saja saya lakukan)
mike nelson

std :: swap (a, b); Mengapa saya harus membuat variabel ketiga ketika hampir semua pustaka standar akan dengan senang hati melakukannya untuk saya?

@Dan - Idenya adalah Anda diminta untuk melakukan ini tanpa menggunakan perpustakaan apa pun dan hanya menggunakan kata kunci bawaan dalam bahasa pilihan Anda. Tentu, di dunia nyata Anda mungkin menggunakan rutinitas perpustakaan untuk mencapai ini, sama seperti menggunakan rutinitas perpustakaan untuk (katakanlah) struktur daftar tertaut daripada menulis milik Anda sendiri. Inti dari tes ini adalah bahwa itu cukup sederhana dan tidak mustahil untuk mengharapkan kandidat mana pun dapat melakukannya tanpa perlu menggunakan perpustakaan untuk mencapainya.
CraigTP

Jadi apakah Jacob menyarankan orang yang diwawancarai untuk menggunakan variabel ketiga atau tidak? Saya telah melihat alternatif untuk pertanyaan itu di mana ia meminta pengembang untuk tidak menggunakan variabel ketiga. Cara dia mengucapkan jawabannya cukup ambigu.
theGreenCabbage

1
Sebagai seseorang yang mengira mereka hanya programmer yang "oke", ini membuatku takut. Pikiran langsung saya adalah "Ya Tuhan, saya akan menggunakan variabel ke-3 tetapi tentunya dia menginginkan cara yang cerdas untuk melakukannya tanpa variabel!"
Pengacara Setan

8

Fibonacci, membalikkan string, menghitung jumlah bit yang ditetapkan dalam satu byte adalah yang umum lainnya. Project Euler juga memiliki banyak koleksi kesulitan yang meningkat.


Fibonaaci, meskipun sedikit lebih maju, itu bagus, saya benar-benar pemula dan saya butuh waktu 20-25 menit jadi ada referensi Anda :)
Trufa

Saya dipukul dengan Fibonacci, FizzBuzz, dan menghapus duplikat bilangan bulat dalam array - semua hari ini dalam sebuah wawancara (4 jam)
IAbstract

4

Minta mereka untuk menulis aplikasi untuk mengembalikan faktor dari bilangan tertentu. Ini mudah dilakukan dan sulit dilakukan dengan baik dalam waktu singkat. Anda dapat melihat gaya mereka dan cara mereka memikirkan masalah dalam waktu singkat.


2

Kembalikan indeks kemunculan pertama string X dalam string Y.

Menerapkan strstr () membutuhkan pemahaman dasar bahasa sambil memberikan kesempatan untuk pengoptimalan yang cerdas.


2

Jika ini adalah wawancara C / C ++ pastikan orang tersebut tahu tentang petunjuk.

Umum - algoritma sederhana (daftar tertaut [tunggal / ganda]). Tanyakan tentang kerumitan penambahan dalam setiap kasus (di awal, di akhir, pengoptimalan ...)?

(Umum) Bagaimana Anda menemukan min dan max dari sebuah array (ukuran N) hanya dengan perbandingan 3 * N / 2?

C / C ++: Bagaimana Anda mengoptimalkan beberapa "strcat" ke buffer?


Tampak bagi saya bahwa untuk masalah "Bagaimana Anda menemukan min dan max dari sebuah array (ukuran N) dengan hanya 3 * N / 2 perbandingan?" bagus untuk menjelaskan bahwa angka 3 * N / 2 adalah jumlah perbandingan elemen array, tetapi Anda dapat membandingkan int dengan bebas misalnya. misalnya (i <ukuran larik) dalam loop.
sergtk


0

Bagaimana dengan: Saya ingin menggunakan satu integer untuk menyimpan banyak nilai. Jelaskan bagaimana itu akan berhasil.

Jika mereka tidak memiliki petunjuk tentang bit mask dan operasi, mereka mungkin tidak dapat menyelesaikan masalah lain.


9
Saya akan mengatakan itu lebih instruktif jika setelah sedikit topeng dijelaskan, atau menunjukkan, jika orang tersebut tidak memukul dahi mereka, dan menggelengkan kepala untuk mengejek diri sendiri. Bit-mask bukanlah idiom yang umum, kecuali jika menggunakan C, perangkat yang disematkan, atau jaringan. Banyak orang berbakat belum.
Gregg Lind

2
Hmm, maka Anda harus memutuskan apakah menerima menyimpan 1,2 dan 3 dalam desimal 123 dihitung sebagai jawaban yang benar, meskipun matematika itu akan sangat rumit dibandingkan dengan hanya mendeklarasikan 3 variabel. Atau menyimpan 1,2,3 dengan menulis x = 1; x = 2; x = 3; Maksud saya, apakah kita perlu menyimpan nilai-nilai ini secara bersamaan?
MatthewMartin

0

Menemukan daftar bilangan prima adalah pertanyaan yang cukup umum tetapi masih memerlukan pemikiran dan ada berbagai tingkat jawaban yang mungkin diberikan orang.

Anda juga akan terkejut betapa banyak orang yang berjuang untuk mengimplementasikan struktur data tipe Peta / Kamus.


0

Saya telah meminta kandidat saya untuk membuat program untuk menghitung faktorial dari bilangan tertentu dalam bahasa pseudo pilihan mereka. Ini adalah masalah yang cukup mudah untuk dipecahkan dan cocok untuk pertanyaan tindak lanjut alami (yang sering kali dapat ditanyakan) tentang rekursi.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.