Чи існує таке правило, як через 20 хвилин, ви просто повинні почати кодування незалежно від того, що?
Ні, але якщо ви витратите 20 хвилин на аналіз проблеми, перш ніж приступити до справи, ви, мабуть, вже в біді. Роботодавець, який задає вам таке питання, як той, який ви цитували, в основному цікавиться, як ви підходите до проблеми, але якщо вони зададуть це як проблему кодування, вони також захочуть побачити якийсь код. Розмовляйте з ними через ваш розумний процес ...
Ну, очевидний підхід тут - груба сила. Якби у мене був спосіб розпізнати правильний трикутник за трьома вершинами, я міг би пройти всі комбінації двох точок і початок пошуку правильних трикутників. Це не повинно бути важким - я можу написати функцію, яка використовує теорему Піфагора для ідентифікації правильних трикутників. Щоб зробити це простіше, я також напишу функцію, яка визначає відстань між двома точками, використовуючи формулу відстані ...
Написання цих функцій має тривати близько трьох хвилин. Тепер, лише за кілька хвилин до питання, ви вже показали, що ви пам’ятаєте основну геометрію і що ви справді знаєте, як писати код. Це також дає вам можливість поговорити:
Отже, ми могли, очевидно, поставити isRightTriangle(p1, p2, p3)
функцію в середину чотирьох for
циклів і повторити всі можливі варіанти для кожної з двох змінних точок. Подивимось ... проблема задає кількість правильних трикутників, включаючи початок на сітці 50х50, тому використання методу грубої сили змушує перевірити 50 можливостей для кожної координати кожної точки. Це 50 ^ 4 перевірки ... Я впевнений, що ми можемо зробити краще, але код очевидний, тому дозвольте мені записати це ...
Отже, тепер ви пишете функцію, яка використовує вкладені for
петлі та isRightTriangle()
функцію, яку ви тільки що написали. Ви вирішили проблему, але ви також дали інтерв'юеру побачити, куди ви їдете. Якщо їх метою було просто побачити, що ви можете написати код, вони можуть сказати вам зупинитися. Швидше за все, вони із задоволенням спілкуються з кимось, хто знає, що вони роблять, і вони захочуть побачити, як далеко ви це зайняли. Отже, ви продовжуєте ...
Мені прийшло в голову, коли я писав, що ми можемо скористатися симетрією. Ми можемо відобразити будь-який заданий правильний трикутник навколо лінії 45 °, тому, якщо ми вирішимо перевірити одну з точок лише на одній стороні цієї лінії, ми можемо просто порахувати будь-які праві трикутники, які ми знайдемо двічі ... один раз для трикутника та один раз для її відображення. Це скорочує кількість чеків удвічі. Крім того, дивлячись на це зараз, ми беремо квадратний корінь, щоб знайти відстань між двома точками, але тоді ми просто знову це квадрат у isRightTriangle()
...
І так далі. Знову ж таки, вони зазвичай не хочуть бачити ідеального рішення, вони хочуть бачити, як ви добираєтесь до рішення. Ваш мислительний процес не повинен бути схожим на описаний вище - просто впевненість у тому, щоб продумати вголос, буде рахувати багато. Не потійте, якщо ви помилитесь - просто скажіть "хммм, я думаю, я тут пішов з рейок - відпустіть мене на крок назад ..."