Мой личный сайт:Туоба'С Фронт Энд Инн~ Поймите один га. вотисходный адрес, если вы обнаружите какие-либо ошибки в моей статье, пожалуйста, не стесняйтесь жаловаться мне, и давайте учиться вместе и добиваться прогресса вместе φ(>ω
Введение
Написание кода может быть для вас сочетанием клавиш Ctrl+C и Ctrl+V, если вам комфортно с обыденностью; программирование может стать искусством, если вы творческий человек. Мы постоянно сталкиваемся с какими-то фрагментами кода, которые можно назвать элегантной одухотворенностью, здесь, на мой взгляд, я перечислю те части, которые видел.
Для удобства чтения яНазвание кода соединяется с глупым решением, а элегантное и духовное решение помещается внизу.,надеюсь на вас это окажет определенное влияние.Судьи могут попробовать сами.Задача не сложная.
Конечно, в Рим ведут тысячи дорог, и ваше решение может оказаться лучше. Если это так, я надеюсь, что вы можете показать это в области комментариев, чтобы больше людей увидели~
Примечание. Все приведенные ниже вопросы взяты изcodewars
Вопросы и безрассудные решения
-
Create Phone Number
Вопрос: Напишите функцию, которая принимает массив из 10 целых чисел (массив от 0 до 9) и возвращает строку из этих чисел в виде телефонного номера вида (123) 456-7890.
Example:
createPhoneNumber([1, 2, 3, 4, 5, 6, 7, 8, 9, 0]) // => returns "(123) 456-7890"1111
Решение дурака:
const createPhoneNumber = n => "(" + n[0] + n[1] + n[2] + ") " + n[3] + n[4] + n[5] + "-" + n[6] + n[7] + n[8] + n[9]
-
Find the odd int
Вопрос: Учитывая массив, найдите нечетное количество вхождений числа.
PS: Всегда будет только целое число, появляющееся нечетное количество раз.
Example:
findOdd([1,1,2,-2,5,2,4,4,-1,-2,5]); // => returns -1
Решение дурака:
function findOdd(A) { let count = 0; do { let i = A.splice(count,1,'p')[0]; if (i !== 'p'){ let result = [i]; A.forEach(function (e, index) { if (e === i){ i === result[0] ? result.pop(): result.push(i); A.splice(index, 1, 'p'); } }); if (result.length > 0){ return result[0] } } count ++; } while (A.length > count); }
-
Who likes it?
Тема: Вы, наверное, знаете систему «Нравится» на Facebook или других сайтах. Люди могут «лайкать» сообщения в блогах, изображения или другие элементы. Мы хотим создать текст, который будет отображаться рядом с таким элементом.
Реализуйте функцию, входными данными которой является массив, содержащий имена людей, которым понравился элемент. Возвращаемое значение представляет собой текст в следующем формате:
likes [] // must be "no one likes this" likes ["Peter"] // must be "Peter likes this" likes ["Jacob", "Alex"] // must be "Jacob and Alex like this" likes ["Max", "John", "Mark"] // must be "Max, John and Mark like this" likes ["Alex", "Jacob", "Mark", "Max"] // must be "Alex, Jacob and 2 others like this"
Решение дурака:
const likes = names => { switch (names.length) { case 0: return 'no one likes this' case 1: return names[0] + ' likes this' case 2: return names[0] + ' and ' + names[1] + ' like this' case 3: return names[0] + ', ' + names[1] + ' and ' + names[2] + ' like this' default: return names[0] + ', ' + names[1] + ' and ' + (names.length - 2) + ' others like this' } }
-
Shortest Word
Вопрос: Учитывая строку слов, верните длину самого короткого слова.
Строки никогда не бывают пустыми, и вам не нужно думать о разных типах данных.
Example:
findShort("bitcoin take over the world maybe who knows perhaps") // returns 3,因为最短单词是the和who,长度为3
Решение дурака:
// 其实也不是特别莽 const findShort = s => s.split(' ').map(w => w.length).sort((a,b) => a-b)[0];
-
Sum of Digits / Digital Root
Вопрос: Создайте функцию, которая вычисляет цифровой корень.
Цифровой корень — это рекурсивная сумма цифр числа. Учитывая n, возьмите сумму n цифр. Если значение состоит из двух или более цифр, выполняйте рекурсию таким образом, пока не будет получена одна цифра, которая является цифровым корнем. Это работает только для натуральных чисел.
Example:
digital_root(16) => 1 + 6 => 7 digital_root(942) => 9 + 4 + 2 => 15 ... => 1 + 5 => 6 digital_root(132189) => 1 + 3 + 2 + 1 + 8 + 9 => 24 ... => 2 + 4 => 6 digital_root(493193) => 4 + 9 + 3 + 1 + 9 + 3 => 29 ... => 2 + 9 => 11 ... => 1 + 1 => 2
Решение дурака:
function digital_root(n) { let num = n; if (num < 10){ return num }else { return arguments.callee((num+'').split('').reduce(function (a,b) { return parseInt(a) + parseInt(b) })) } }
Элегантность и духовные решения
-
Create Phone Number
function createPhoneNumber(numbers){ var format = "(xxx) xxx-xxxx"; for(var i = 0; i < numbers.length; i++){ format = format.replace('x', numbers[i]); } return format; }
Используйте шаблон формата, чтобы заменить бит x во всех форматах зацикливанием, которое выглядит элегантно и удобочитаемо, привлекая внимание людей.
-
Find the odd int
const findOdd = (xs) => xs.reduce((a, b) => a ^ b);
Думаю, не менее 70% людей удивятся, когда увидят это решение. Вспомните, как давно вы использовали побитовые операции? В этой задаче используется метод reduce() и побитовая операция XOR, которая эквивалентна побитовому XOR для всех четных чисел, за которым следует 0, а затем нечетные числа и 0 подвергаются побитовому XOR для получения самих себя, чтобы получить решение.
-
Who likes it?
function likes (names) { var templates = [ 'no one likes this', '{name} likes this', '{name} and {name} like this', '{name}, {name} and {name} like this', '{name}, {name} and {n} others like this' ]; var idx = Math.min(names.length, 4); return templates[idx].replace(/{name}|{n}/g, function (val) { return val === '{name}' ? names.shift() : names.length; }); }
Это не нужно объяснять, используйте шаблонную строку, не вводите ее вручную.
-
Shortest Word
function findShort(s){ return Math.min.apply(null, s.split(' ').map(w => w.length)); }
Такие вопросы, как разница между apply и call, часто можно встретить на собеседованиях, но сколько людей на самом деле написали код, используя их на работе?
-
Sum of Digits / Digital Root
function digital_root(n) { return (n - 1) % 9 + 1; }
Это гениальное решение. Некоторые люди могут не понять, здесь используется теорема, которую мы выучили в начальной школе: «сумма всех битов, кратная 9, делится на 9». У вас может не сложиться впечатление об этом, но «число, сумма всех битов которого кратна 3, делится на 3», знайте, это та же истина. Что касается того, почему (n-1) добавляет 1 после деления 9, это для того, чтобы предотвратить само кратное 9 решение 0.
резюме
Приведенные выше пять фрагментов кода можно использовать для решения проблемы с помощью замены, битовой операции, шаблонной строки, применения и даже теоремы о том, что «сумма всех битов кратна 9, может делиться на 9», что на самом деле удивительно. .
Некоторые операции магические, а некоторым можно научиться. Нам нужно научиться тому, чему мы можем научиться, и использовать это в следующий раз.