Пройдите собеседование по программированию с PEDAC

На собеседовании по кодированию вы действительно хотите показать свои навыки решения проблем, не выглядя как парень с обложки. Используя метод решения проблем PEDAC, у нас будет план решения любой потенциальной проблемы собеседования по кодированию. Для тех, кто не знает, что такое PEDAC, это аббревиатура от:

P проблема E образцы D ata алгоритм C оды

Я пройдусь по каждому из них, чтобы прояснить каждый шаг.

Проблема:

Прежде чем писать какой-либо код, нужно понять проблему. В этом случае проблема состоит в том, чтобы определить, содержит ли список заданных слов анаграмму слова. Во-первых, мы должны понять, что такое анаграмма. Согласно нашим повелителям Google, анаграмма - это слово или фраза, буквы которой можно переставлять, чтобы создать другое слово или фразу. Теперь, когда мы понимаем, что такое анаграмма, мы знаем, что все буквы исходного слова должны быть найдены в словах данного массива. Чтобы лучше перефразировать проблему, мы можем сказать, что мы пройдемся по массиву и проверим, имеет ли какое-либо из слов те же символы и количество символов, что и исходное слово. Теперь мы объяснили проблему своими словами и можем перейти к следующему шагу.

P: We need to determine which words from the list are anagrams of a given word and return those words.

Примеры:

Теперь мы должны создать пример того, как программа будет работать. Мы предоставим входы и выходы для этой программы. Если у нас есть слово `iceman` и нам предоставляется список слов, таких как` аниме, кино и google`, мы знаем, что output будет `cinema`, потому что это единственное слово, которое имеет те же буквы, что и слово iceman, только в другом порядке. Другим примером может быть слово `слушать` вместе со списком слов:` enlists, enlist, lists, inlets `. Если это входы, выходами будут `enlist, inlets`. Теперь, когда мы рассмотрели несколько примеров входов и выходов, мы можем перейти к следующему шагу - данным.

E: (iceman, ["anime", "cinema", "google"]) => ["cinema"]
(listen, ["enlists", "enlist", "lists", "inlets", "words"]) => ["enlist", "inlets"]
(sushi, ["words", "youtube", "great", "hush"] => []

Данные:

На этом этапе мы определим, какие структуры данных мы будем использовать. Когда у нас есть список чего-либо, мы, скорее всего, будем использовать массив. В этом случае рекомендуется использовать массивы, потому что мы можем изменять содержимое массива, чтобы было легче увидеть, совпадают ли слова друг с другом. Данные не всегда будут массивами, в зависимости от проблемы вы можете решить использовать объекты, строки или логические значения. Определив структуру данных, которую вы используете для конкретной проблемы, вы можете увидеть, какие методы доступны для использования. Также будет полезно, если у вас есть конкретный метод, который вы хотите использовать. Это поможет, потому что даст нам представление о том, будем ли мы преобразовывать тип данных.

D: Array, because we are working with multiple items.

Алгоритм:

На этом этапе мы определим пошаговое решение и запишем его в псевдокоде. Мы знаем, что для этой конкретной проблемы нам нужно найти способ сравнить каждый элемент с оригиналом. Это потому, что каждое слово, которое является анаграммой оригинала, будет возвращено. Хороший вопрос: «как мы можем сравнить два слова?» Мы не можем обязательно сказать if (inlets === listen) return inlets. Это всегда будет false, потому что это не одно и то же. Мы можем использовать .sort (), чтобы изменить слова в сопоставимом порядке, а затем вернуть исходное слово. Используя сортировку, мы меняем первое слово в алфавитном порядке, и, делая то же самое с каждым словом в массиве, мы теперь имеем сопоставимые данные.

Пример того, как выглядит алгоритм:

A:
- Have a function that takes in two parameters a word and an array.
- Use some method or loop to iterate through the array
- For each item in the array and the target word, we will use sort to alphabetize it.
- In alphabetical order the two are indistinguishable.
- Whichever words match the target word will be stored in a variable (in case there is more than one found word)
- Return the variable that is holding the words that pass.

Алгоритмы могут меняться по мере того, как вы кодируете, но суть в том, чтобы иметь план, который упростит кодирование.

Код:

Здесь мы собираем все части вместе и кодируем наш алгоритм. Если алгоритм понятен, кодирование будет намного проще. Может быть пара проблем, о которых мы не задумывались, но все они могут быть решены, если у нас есть план. Вот как мы можем закодировать решение, используя алгоритм, и то, что мы знаем о сортировке.

function anagram(word, arr) {
//This variable holds the words from the array that match the word.
const found = [];
//We use forEach in order to iterate through the array and do the process of changing each //individual word without affecting the other words.
arr.forEach(item => {
//item is each item in the array
//by using split we are changing each item into a new array of each character
//We then sort to get the new array with the letters in alphabetical order
//We join the array to get a new word altogether
const newItem = item.split("").sort().join("");
//We do the same process for the word in order to have comparable data.
const newWord = word.split("").sort().join("");
//In this if statement we are comparing the newWord to the newItems in the array.
if (newWord === newItem) {
//when the words match we want to send the original item to the variable found.
//By sending the original item we have already compared it and it has passed true but we don't //want to permanently mutate the word.
found.push(item);
}
});
//We return the contents of found to see which words are anagram of the original word
return found;
}
anagram("iceman", ["anime", "cinema", "google", "words"]); //should return [ "cinema" ]

Код без комментариев:

function anagram(word, arr) {
const found = [];
arr.forEach(item => {
const newItem = item.split("").sort().join("");
const newWord = word.split("").sort().join("");
if (newWord === newItem) {
found.push(item); 
}
});
return found;
}
anagram("iceman", ["anime", "cinema", "google", "words"]); //should return [ "cinema" ]

Заключение

Надеюсь, это помогло. Все мы знаем, что собеседования по кодированию могут вызывать беспокойство, но с PEDAC у вас есть план атаки. Использование PEDAC предоставит вам структуру, которой нужно следовать, и способ действительно разбить каждую проблему на более мелкие части. В разобранном виде проблема не будет казаться такой большой. Я надеюсь, что PEDAC окажется для вас таким же полезным, как и я!