함수형 스타일 프로그래밍은 굉장합니다(동형 예제).
9407 단어 programmingjavascriptfunctional
엄밀한 함수형 프로그래밍 가이드는 아니지만, 함수형 프로그래밍 마인드로 문제를 처리할 때 얼마나 흥미롭고 강력한지 보여줍니다.
문제
프로그래밍 작업 면접 중에 질문implement an algorithm to detect if 2 strings are isomorphic하는 것은 매우 일반적인 문제이며 이에 대한 많은 답변이 있을 수 있습니다. 다시 해봅시다.
도구
요구 사항을 분석하면 실제로 용어
isomorphic
가 요구 사항을 잘 반영하고 있음을 알 수 있습니다. 즉, 동일한 형태를 갖는다는 의미입니다. 따라서 의미를 표현하는 코드를 작성할 수 있습니다.const isomorphic = equalBy(structure)
지금까지 우리는 함수
equalBy
의 서명을 가지고 있습니다. 구현해 보겠습니다.const equalBy = fn => (a, b) => fn(a) === fn(b)
자연스럽고 자기 표현입니다.
이제
isomorphic
를 자세히 살펴보면 문자열의 구조에만 관심이 있고 그 안의 세부 문자에는 신경 쓰지 않는다는 것을 알았습니다. 그렇다면 문자열의 형식(또는 구조)을 어떻게 표현할까요?요구 사항에 제공된 예제를 검토하여 문자열의 문자 인덱스로 문자열의 구조를 표현하는 아이디어를 얻습니다. 이는 세부 문자에서 추상화되도록 숫자로 표현할 수 있습니다. 따라서 다음 코드를 작성합니다.
const structure = s => [...s].map(c => s.indexOf(c)).join('-')
이 코드 줄은 약간 깁니다. 테스트하고 문서화해 보겠습니다.
console.assert(structure('aabbcc') === '002244', 'A structure of a string can be expressed through the indices of the characters in it');
지금까지
equalBy
와 structure
가 모두 있으므로 isomorphic
를 실행할 준비가 되었습니다! 이를 보여주기 위해 몇 가지 테스트를 작성할 수 있습니다.console.assert(isomorphic('', ''), 'empty strings are isomorphic');
console.assert(isomorphic('aabbcc', 'aabbcc'), 'strings are always isomorphic with themselves');
console.assert(isomorphic('aabbcc', 'zzxxyy'), 'if the characters have the same indices sequence, then the strings composed by them are isomorphic');
console.assert(!isomorphic('aabacc', 'xxyyzz'), 'even if the character indices are the same, however the sequences are not all the same, then the 2 strings composed by them are NOT isomorphic');
console.assert(!isomorphic('aaabbcc', 'xxyyyzz'), 'if any character indices are different, then the strings composed by them are NOT isomorphic');
console.assert(!isomorphic('abcdefghijk', 'abcdefghijba'), 'if the lengths are different, then the strings are NOT isomorphic');
우리는 테스트를 실행했고 모두 통과했습니다!
요약
따라서
isomorphic
에 대한 구현 코드는 총 3줄입니다.const equalBy = fn => (a, b) => fn(a) === fn(b)
const structure = s => [...s].map(c => s.indexOf(c)).join('-')
const isomorphic = equalBy(structure)
pointless
코드를 작성하는 방법이라는 것을 알 수 있습니다. 멋진 것 외에도 간단한 확장까지 문제를 우아하게 해결합니다!브라우저에서 시도하거나 leetcode에서 확인할 수 있습니다: https://leetcode.com/submissions/detail/465004270/ https://leetcode.com/submissions/detail/530009145/
Reference
이 문제에 관하여(함수형 스타일 프로그래밍은 굉장합니다(동형 예제).), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/jefftian/functional-style-programming-is-awesome-isomorphic-example-4b9p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)