Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เชี่ยวชาญ Ruby Coding Challenges สำหรับสัมภาษณ์: กลยุทธ์และวิธีแก้ปัญหา

การทำ coding challenges เป็นวิธีที่ดีมากในการปรับปรุงทักษะ Ruby และการแก้ปัญหา และ เตรียมพร้อมสำหรับ coding interviews!

ทำไม?

เพราะระหว่าง challenge คุณโฟกัสทั้งหมดที่การแก้ปัญหา 1 ปัญหาเฉพาะเจาะจง

คุณไม่ต้องกังวลเรื่องอื่นๆ

การฝึกแบบนี้จะขยายทักษะการคิด ให้คุณ สำรวจฟีเจอร์น่าสนใจของภาษา และกลายเป็นนักพัฒนา Ruby ที่ดีขึ้น

บาง challenge ต้องการความรู้เฉพาะทางเกี่ยวกับอัลกอริทึม โครงสร้างข้อมูล หรือคอนเซปต์ เช่น ทริกคณิตศาสตร์บางอย่าง

ไม่เป็นไรหากคุณแก้ไม่ได้ส่วนใหญ่

อย่ากังวล!

ตอนนี้:

ผมคิดว่าการอ่าน solution หลายๆ ตัวอาจช่วยให้คุณได้รู้สึกถึงกระบวนการแก้ปัญหาเหล่านี้

เริ่มต้นด้วย…

Challenge 1: การหาค่าซ้ำ

Challenge แรกคือ กำหนดอาร์เรย์ที่มีค่า Integer ให้หาตัวเลขที่ซ้ำทั้งหมด

ตัวอย่าง:

numbers = [1,2,2,3,4,5]
find_duplicates(numbers) # [2]

มาเริ่มด้วยคำถาม…

"ฉันจะรู้ได้อย่างไรว่าเลขตัวไหนซ้ำ?"

ผมไม่พยายามหา solution ในขั้นเดียว

ในขั้นนี้ ผมแค่อยากถามและตอบคำถามที่จะทำให้ใกล้ solution

เขียนไอเดียหลายๆ อย่าง:

  • นับจำนวนของแต่ละตัวเลขในอาร์เรย์ แล้ว count = 2 คือซ้ำ
  • วนทุก element เก็บรายการ "seen" elements หากเจอ element ซ้ำ คือเจอ duplicate
  • join ตัวเลขเป็น string แล้วพยายาม match duplicated numbers ด้วย regex

ไม่สำคัญว่า "ตัวไหนดีที่สุด" ในจุดนี้

อย่าประนีป!

สิ่งสำคัญตอนนี้คือได้ working solution เลือกตัวที่ดูดีแล้วเขียนโค้ด

ตัวอย่าง:

seen = []
numbers.each_with_object([]) do |n, dups|
  dups << n if seen.include?(n)
  seen << n
end
# [2]

ดูเหมือน solution ที่ถูกต้อง

ตอนนี้:

คุณอยากลอง input อื่นๆ (อาร์เรย์ต่างๆ) เพื่อให้แน่ใจว่าทำงานจริง การเขียน unit tests ดีสำหรับสิ่งนี้

หาก solution ทำงาน 100% แล้ว คุณลอง solution อื่นๆ และใช้ตัวที่เข้าใจง่ายที่สุด

อย่าหาความสมบูรณ์แบบ

หา learning, understanding และ progress ทุกวัน!

Challenge 2: คำที่ถูกต้อง (Valid Words)

กำหนดอาร์เรย์ของตัวอักษร และคำหนึ่งคำ ให้หาว่าคำนั้นสร้างจากตัวอักษรเหล่านี้ได้ไหม

ตัวอย่าง:

word = "orange"
characters = %w(e n g a r o)
valid_word?(characters, word) # true

อีกครั้ง เริ่มด้วยคำถามเพื่อนำกระบวนการคิด

"เราจะรับรองได้อย่างไรว่าคำนี้สร้างจากตัวอักษรเหล่านี้ได้?"

คิดไอเดีย

ห่างไกลสิ่งรบกวน และคิดเรื่องนี้

อาจช่วยได้หาก ทำบนกระดาษ

ไอเดียของผม:

  • สำหรับทุกตัวอักษรใน word ลบตัวอักษรนั้นออกจากอาร์เรย์ characters หากลบไม่หมด คืน false
  • นับตัวอักษรทั้งหมดใน word และ characters แล้วลบจำนวนกัน

Solution ที่เป็นไปได้:

word
  .each_char
  .all? { |ch| characters.delete_at(characters.index(ch)) rescue nil }

Solution ของคุณคืออะไร?

แชร์ในส่วนความคิดเห็น

สรุป

คุณเรียนรู้เกี่ยวกับ coding challenges และวิธีใช้พวกมันปรับปรุงทักษะ Ruby แล้ว!

จำไว้:

ไม่เป็นไรเลยที่จะแก้ challenge บางตัวไม่ได้ คิดว่ามันเหมือน boss ในเกมวิดีโอ ถ้า boss ระดับ 100 และคุณระดับ 70 จะยากมากที่จะเอาชนะ

คุณทำอะไรในกรณีนั้น?

คุณ level up และสะสมประสบการณ์กับ challenge ง่ายกว่า (boss ระดับต่ำกว่า) และ ได้ gear ที่ดีกว่า (เรียนรู้ Ruby และ programming มากขึ้น)

Good luck และ enjoy! 🙂